初识JVM(1)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/dahaiaaaqe/article/details/78744279

java虚拟机

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

JVM规范

  1. 整数的表达

原码:第一位为符号位(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,是不是很神奇?
  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>]

这里写图片描述

猜你喜欢

转载自blog.csdn.net/dahaiaaaqe/article/details/78744279
今日推荐