jvm学习记录

jvm内存模型
虚拟机栈(通常所说的栈):存储局部变量表等
本地方法栈:给Native方法使用的
堆:存储实例对象
方法区:堆中,存储类信息、常量、静态变量
常量池:方法区中,1.8后移到堆中
直接内存:堆外内存,使用系统内存,例如nio
程序计数器:线程私有,指向指令执行到哪了
ps:线程独有的 栈和程序计数器

jvm垃圾回收机制
分代回收机制:新生代(一个Eden区+两个Survivor区)和老年代
-Xmn10M代表给新生代分配10M内存
-XX:SurvivorRatio=8代表配置一个Eden区和其中一个Survivor区的比例为8:1
内存分配:
(1)一个新增的对象实例首先会分配在Eden区,若Eden区内存不够了将触发一次Minor GC,Minor GC后存活下来的对象Survivor区存不下会通过分配担保机制直接转移至老年代
(2)经过了15次(默认)Minor GC后依然存活的Survivor区对象会晋升至老年代中,-XX:MaxTenuringThreshold=15控制,另一种说法是Survivor区中同龄的对象大小总和大于Survivor区空间的一半,大于等于该年龄的对象会晋升至老年代
(3)可通过参数-XX:PretenureSizeThreshold=75547562设置大于多少M的对象实例直接分配在老年代
回收策略:
新生代采用复制算法(Minor GC时将Eden区和其中一个Survivor区中还存活的对象复制到另一个空闲的Survivor区,可回收的对象空间清理干净,这样来回反复)
老年代采用标记-整理算法(标记-清除算法的升级版,对于存活下来的对象从一端按序排放)
补充:分配担保策略(Minor GC之前会检查老年代剩余连续可用空间是否大于新生代对象总大小/历届晋升过来的平均容量大小,如果是才可以进行Minor GC否则进行Full GC)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值