初识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 内存基础概念之初识虚拟机与 Java 虚拟机运行时数据区
- 初识 JVM
- JVM进阶(十四)——初识JAVA 类加载机制
- Java虚拟机详解01----初识JVM
- JVM进阶(一)——初识JAVA栈
- 初识JVM-JVM运行机制(2)
- JVM进阶(二)——初识JAVA堆
- JVM进阶(一)——初识JAVA栈
- JVM进阶(十八)——初识Class文件
- 初识JVM中堆栈的存储
- 初识---JVM之堆,栈,方法区
- 初识JVM中堆栈的存储
- JVM学习笔记之初识java虚拟机
- 【JVM】初识JAVA工具JMC,java mission control,飞行记录器(黑匣子),IBM heapAnalyzer使用
- JVM笔记——初识
- JVM——深入解析之初识
- JVM学习(初识JVM)
- Java虚拟机详解01----初识JVM
- JVM学习篇 | (一) 初识JAVA栈
- java 虚拟机系列文章1--初识JVM