-
历史
- Sun Classic VM,Sun公司的产品,第一款商用Java虚拟机,只用解释器执行java代码
- Exact VM,编译器和解释器混合工作。出现时间短,被后来的HotSpot VM替代
- HotSpot VM,2007开源,一直用到现在的SDK中
- KVM,Sun产品,简单、轻量级,高度可移植。嵌入式设备中使用,如手机。
- JRockit VM,2008,BEA开发(被Oracle收购),专注服务端应用
- J9 VM,IBM产品
- Dalvik,没按JVM规范实现,基于寄存器架构。google产品,Android手机专用
- 微软JVM,97年被Sun公司告了之后就退出舞台
- Taobao VM,阿里服务器专用。基于HotSpot深度定制,放弃兼容性,拥抱高性能。
-
内存结构
-
线程独占区
-
程序计数器
记录着当前线程所执行的字节码的行号
-
虚拟机栈
- 基本元素是栈帧。
- 栈帧包含:局部变量表、操作数栈、动态链接、方法出口
- 程序中的每一次方法调用都会有一个栈帧存储到虚拟机栈中
-
本地方法栈
- 同上,是用于native方法的
- HotSpot将虚拟机栈和本地方法栈合并实现
-
-
线程共享区
-
堆
- 存放对象。根据生命周期不同,可分为下列两种区域
- 新生代:Eden、Survivor
- 老年代:Tenured
-
方法区
- 编译代码的存储区域,存储每个类的结构
- 类信息
- 运行时常量池
- 字段、方法数据
- 方法和构造函数的代码
-
-
特殊的内存:直接内存
-
它不是jvm管理的一部分
- 由native方法即C/C++方法申请的
-
-
- 垃圾回收机制
- class文件结构
- 类加载机制
- 字节码执行引擎
- 性能监控工具
- 性能调优
- 虚拟机编译及运行时优化
- Java高级线程
相关文章
- 11-29scala学习----柯里化
- 11-29[学习笔记] 拆系数 FFT
- 11-29分治 FFT学习笔记
- 11-29学习Matplotlib(一)
- 11-29Vue面试题笔记
- 11-29Matplotlib学习
- 11-29MAVLink笔记 #02# MAVLink绝对傻瓜教程翻译
- 11-29栈学习----------基本计算器||
- 11-29Nosql学习笔记
- 11-29matplotlib初次学习笔记