赞
踩
笔记来源:尚硅谷JVM全套教程,百万播放,全网巅峰(宋红康详解java虚拟机)
笔记来源:黑马程序员JVM完整教程,全网超高评价,全程干货不拖沓附有一些个人见解,如有错误,请指正!
虚拟机
所谓虚拟机(Virtual Machine),就是一台虚拟的计算机。它是一款软件,用来执行一系列虚拟计算机指令。大体上,虚拟机可以分为系统虚拟机和程序虚拟机。
Java虚拟机
作用
特点
JVM的位置
JVM是运行在操作系统之上的,它与硬件没有直接的交互
Java编译器输入的指令流基本上是一种基于栈的指令集架构,另外一种指令集架构则是基于寄存器的指令集架构。
具体来说:这两种架构之间的区别:
基于栈式架构的特点
基于寄存器架构的特点
举例1
同样执行2+3这种逻辑操作,其指令分别如下:
基于栈的计算流程(以Java虚拟机为例):
iconst_2 //常量2入栈
istore_1
iconst_3 // 常量3入栈
istore_2
iload_1
iload_2
iadd //常量2/3出栈,执行相加
istore_0 // 结果5入栈
而基于寄存器的计算流程
mov eax,2 //将eax寄存器的值设为1
add eax,3 //使eax寄存器的值加3
举例2
public int calc(){ int a=100; int b=200; int c=300; return (a + b) * c; } > javap -c Test.class ... public int calc(); Code: Stack=2,Locals=4,Args_size=1 0: bipush 100 2: istore_1 3: sipush 200 6: istore_2 7: sipush 300 10: istore_3 11: iload_1 12: iload_2 13: iadd 14: iload_3 15: imul 16: ireturn }
总结
==由于跨平台性的设计,Java的指令都是根据栈来设计的。==不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,每次执行的指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。
虚拟机的启动
Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。
虚拟机的执行
虚拟机的退出
有如下的几种情况:
目前Hotspot占有绝对的市场地位,称霸武林。
名称中的HotSpot指的就是它的热点代码探测技术。
具体JVM的内存结构,其实取决于其实现,不同厂商的JVM,或者同一厂商发布的不同版本,都有可能存在一定差异。主要以Oracle HotSpot VM为默认虚拟机。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。