JVM的理解
一、 内存管理
1. 内存结构
方法区:
类加载的信息
运行时常量池:来源class文件中的常量池,动态设置常量的API
所有线程共享
PermSpace,MaxPermSpace
堆
存放对象实例
分代收集
Eden
from survior
to survior
old
所有线程共享
-Xmx,-Xms
虚拟机栈
线程执行java方法的调用栈,方法调用的嵌套,对应栈帧的入栈,出栈。
一个方法是一个栈帧。
一个栈帧
局部变量表
操作数栈
一个线程私有。
-Xss
本地方法栈
类似java方法,这里执行本地方法。
程序计数器
一个线程执行到字节码指令列表的哪条指令。
直接内存
执行引擎
本地方法库接口
本地方法库
2. 垃圾回收
如何确定对象是否为垃圾?引用计数算法,根搜索算法。
确定了对象是否为垃圾,然后怎么处理?
垃圾直接回收
非垃圾
标记清除算法
标记哪些是垃圾对象,直接回收,回收空间直接使用
标记复制算法
准备一个和原空间一样大的内存,将标记的删除,将非垃圾的copy到另一个空间去。
发现每次复制的很少,更新成第二版本
一个Eden占90%
两个survior占10%
一开始用一个Eden,一个survior,回收时,将非垃圾对象,copy到另一个survior上。
标记整理算法
将标记的垃圾对象回收,将非垃圾对象整理位置,挪到前面去,剩余空间连续。
分代收集算法*
年轻代用标记复制算法
老年代用标记整理算法
3. 内存监控工具
jps
jstat
jmap
jstack
二、执行引擎
1. class文件结构
2. 加载过程和类加载器
3. 执行引擎确定方法版本,执行方法内字节码,执行时内存结构
三、编译优化
1. 编译期优化
2. 运行期优化
四、并发执行
1. 多线程
2. 并发