Java虚拟机
2019-04-17 本文已影响0人
Sum_Day
我的Github地址
有问题直接留言或 联系QQ:1079569023
虚拟机栈:存储栈帧
http://bbs.xiangxueketang.cn/forum.php?mod=viewthread&tid=46&extra=page%3D2
栈帧划分
1.局部变量表(本地变量表)
存在基本类型+对象引用
2.操作数栈
方法的操作流程
3.动态链接
多态
4.返回地址
对应return操作
5.其他:1.逃逸分析优化 2.线程内存缓存
本地方法栈
存放native方法
程序计数器:唯一一个无OOM的区域
记录程序操作的指令地址
javac xxx.java
javap -v xxx.class > j.txt
编译后对应文件中操作数栈中对应的递增数值
方法区
常量,静态变量,类信息,即时编译后产生的信息
堆
存放动态创建的对象
垃圾回收
线程共享的区域中的对象GC回收
- 核心是堆中内存回收
- 方法区(永久代)也存在回收,回收条件十分严格
虚拟机运行时内存划分
新生代:老年代=> 1:2(90M->新生代30M:老年代60M)
1.新生代:Minor GC(分3个区域)
eden:8
from:1
to:1
2.老年代 Full GC
1.长时间存活对象
新生代对象中的age默认15次转入老年代
2.新生对象优先放入新生代存,放不下直接放入老年代
3.from/to Servior区都存不下新对象,from、to中的对象全部放入老年代
4.担保策略
3.永久代(应该是方法区)
垃圾回收算法
- 复制算法,利用率50%(新生代 8:1:1)
- 标记清除算法:利用率100%,存在内存碎片
- 标记整理算法:100%,内存复制,效率一般般
新生代回收算法
1.单线程:Serial
2.多线程
老年代回收算法:
1.单线程:Serial Old
2.多线程
CMS:标记清除算法
通用G1算法:标记整理+化整为0