Java进阶学习

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. 方法区(永久代)也存在回收,回收条件十分严格
虚拟机运行时内存划分

新生代:老年代=> 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.永久代(应该是方法区)
垃圾回收算法
  1. 复制算法,利用率50%(新生代 8:1:1)
  2. 标记清除算法:利用率100%,存在内存碎片
  3. 标记整理算法:100%,内存复制,效率一般般
新生代回收算法
1.单线程:Serial
2.多线程


老年代回收算法:
1.单线程:Serial Old
2.多线程

CMS:标记清除算法

通用G1算法:标记整理+化整为0
上一篇下一篇

猜你喜欢

热点阅读