JVM详解(二)内存模型

JVM
栈桢
javap -c .class文件进行反编译,字节码指令
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
op1=3;这行代码相当于上图字节码指令中的两行
istore0,赋值给局部变量0,局部变量是从索引0开始的
iload0 是入栈,将3入栈
iload1是将局部变量1,即op2入栈
iadd 将局部变量0,1弹出栈,进行相加,完成后入栈
istore2 ,相加的数值赋值给局部变量2,即代码中的result

main方法先压栈,然后这个方法进栈,完成后return,记录方法位置

在这里插入图片描述
java对象的内存布局
在这里插入图片描述
之前面试问,对象年龄保存在哪里,其实就是保存在对象头中

方法区和堆是进程,栈是线程,线程生命周期较短
下面讨论方法区和堆

jvm内存模型

(和java内存不一样,java中内存🈶主内存,工作内存)
回收需要停止(弊端)

对象太大,直接分配到老年代;年龄超过15(默认15),放到老年代.
新生代分成eden,s0,s1,经过回收,eden区对象放到s区,保证s0或者s1有一个为空,解决空间碎片问题,最大化利用young区,比例8:1:1,大多数对象会被回收(朝生夕死),这样配置减少GC回收次数,极少数回到s0区,万一s0区不够,会向老年代借空间(担保机制),s0和s1必须有一块是空的
young区和old区大小根据业务进行设计(JVM参数设置,后面会介绍)

GC

YoungGC(eden区和s区):minorGC
Old GC:Major GC,MajorGC通常伴随minorGc,会触发FullGC
Young+Old称作FullGC

尽可能减少FullGC次数,或者GC次数,允许一定的YoungGC
每一次GC对象年龄都会加1
Old区也放不下了,堆溢出;方法区也会溢出

在这里插入图片描述
下面探讨堆内存的垃圾回收,知道出问题如何排查和处理
1.确定什么对象是垃圾
引用计数(会存在循环引用问题),可达性分析
2.如何回收(回收算法,GC root(在java进程中长时间存在),由他出发,看对象是否可达),什么样的可以成为GC Root?
3.垃圾回收器
4.优势和劣势,如何选择
5.学会查看垃圾回收日志文件

下篇介绍

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值