您的位置:首页 > 其它

初识JVM(1)

2017-12-07 18:31 246 查看

java虚拟机

Java虚拟机的概念 :JVM是Java Virtual Machine的简称。意为Java虚拟机
虚拟机 :指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统
JVM使用软件模拟Java 字节码的指令集
使用最为广泛的JVM为HotSpot


JVM规范

整数的表达

原码:第一位为符号位(0为正数,1为负数)一直除以2直到除不尽

反码:符号位不动,原码取反

负数补码:符号位不动,反码加1

正数补码:和原码相同







原因:

1:用补码可以解决0和-0的问题,使用反码使得0和-0的表示二进制显示结果一样

2:用于运算,当两个数进行运算时,用两个数补码进行运算即可得到结果

扩展:来自于网友的补充

补码主要要解决的问题就是负数的表示,而众所周知,绝对值相等的两个正负数之和为0。

假设我们有正数 0000 0000 0000 1111,我们如何表示其相反数呢?一般我们的思路是,找一个数,跟它相加的结果等于0,但是我们发现,要找出一个与它相加后结果等于0的数还是要略加思考一下的(因为要计算进位),所以,为何不找出一个与它相加后结果是1111 1111 1111 1111的数,然后该数+1即是我们所要的答案啦。

于是,很容易的, 0000 0000 0000 1111 + 1111 1111 1111 0000 + 1 = 1111 1111 1111 1111 + 1 = (1)0000 0000 0000 0000

一目了然,1111 1111 1111 0001 就是我们想要的答案了,那么我们是怎么得到这个相反数的呢?

首先,找出一个数与它加起来结果是全1的,这个数便是它的反码,然后这个数再加1,这便是它的相反数了,也是我们说的补码。

我们检验一下0的情况,0000 + 1111 + 1 =(1)0000,其中1111 + 1 = (1)0000 = 0000,即+0和-0的二进制表示均为0000。

一个小小的例子解释了为何补码需要原码取反之后再加1,是不是很神奇?


Float的表示和定义(看看就行)



3 VM指令集

类型转化  l2i
出栈入栈操作  aload  astore
运算iadd  isub
流程控制  ifeq ifne
函数调用  invokevirtual invokeinterface  invokespecial  invokestatic


4 JVM需要对Java Library 提供以下支持:

反射 java.lang.reflect
ClassLoader
初始化 class和interface
安全相关 java.security
多线程
弱引用


5JVM的编译

源码到JVM指令的对应格式

Javap(JDK自带的反汇编器)

JVM反汇编的格式

<index> <opcode> [ <operand1> [ <operand2>... ]] [<comment>]


内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  jvm 虚拟机