一、第八课 聊聊年轻代、老年代
年轻代:创建和使用完后立马就要回收的对象放在里面
老年代:需要一直存在的对象放在里面
如图所示


思考题
问题:方法区内会不会进行垃圾回收
回答:在以下几种情况下,方法区里的类会被回收
1)首先该类的所有实例对象都已经被回收
2)加载这个类的classloader已经被回收
3)对该类的class对象没有任何引用
二、第九课 对象在JVM内存中如何分配
如果一个实例对象在新生代中,成功的在15次垃圾回收之后,还没被回收掉,就会被转移到老年代中
总结

思考题
问题:Java虚拟机栈需要垃圾回收吗?
回答:不需要。JVM垃圾回收针对的是新生代、老年代、方法区(永久代),不会针对方法的栈帧。方法一旦执行完毕,栈帧出栈,里面的局部变量直接从内存里清理掉了
三、第十课 线上部署如何设置JVM内存大小
-Xms:堆内存大小
-Xmx:堆内存最大大小
-Xmn:堆内存中的新生代大小,扣除新生代剩下的就是老年代大小
-Xss:每个线程的栈内存大小
-XX:PermSize:永久代大小(JDK8前用)
-XX:MaxPermSize:永久代最大大小(JDK8前用)
-XX:MetaspaceSize:元数据区大小(JDK8后用)
-XX:MaxMetaspaceSize:元数据区最大大小 (JDK8后用)
使用如图:


四、第十一课 每日百万交易的支付系统,如果设置JVM堆内存大小
按照以下思路分析,括号中的是举例
- 每秒钟有多少并发量?(比如订单系统,一秒有30个订单请求)
- 每个并发要创建多少个对象,总共占多少内存?(一个订单请求要创建20个对象,一个对象占据500Byte,那一共算10kb)
- 每个并发需要多久才能执行完成?(一个订单从收到请求、创建对象、入库、请求完成大概需要一秒)
所以可以这样想,一秒钟会创建600个对象,总共在新生代占据600*10=6M的内存空间,(这些对象只会在新生代),那么就可以根据实际机器配置等因素,在尽可能降低mino gc频率的情况下,找出合适的新生代大小,以及对应的老年代大小
五、第十二课 每日百万交易的支付系统,如果设置JVM栈内存和永久代大小
永久代主要存放类的信息,一般设置几百MB就够用了。栈内存一般不会特别设置,默认1MB左右,就差不多够用了
本文深入探讨了JVM内存管理的关键概念,包括年轻代与老年代的区别、对象的分配策略、垃圾回收机制以及如何合理设置JVM内存参数,特别针对高并发场景如支付系统的内存调优。
202

被折叠的 条评论
为什么被折叠?



