目录
这个属于较为开放题目,可以结合自己项目实战出发,体现JVM调优。
1、GC是什么? 垃圾回收算法、收集器等
2、优化目标
(1) 将进入老年代的对象数量降到最低
(2) 减少FullGC的执行时间
(3) 优化JVM参数:比如堆和栈大小,设置垃圾收集器的模式
3、优化策略
(1) 将新对象预留在新生代,由于Full GC的成本远高于MinorGC,因此尽可能将对象分配在新生代,实际项目中根据GC日志分析新生代空间大小分配是否合理,适当通过"Xmn"命令调节新生代大小,最大限度降低新对象直接进入老年代的情况。
(2) 大对象进入老年代,虽然大部分情况下,将对象分配在新生代是合理里的。但是对于大对象这种做法却值得商榷,大对象如果首次在新生代分配可能会出现空间不足导致很多年龄不够的小对象被分配的老年代,破坏新生代的对象结构,可能会出现频繁的 fullgc。因此对于大对象,可以设置直接进入老年代(当然短命的大对象对于垃圾回收来说简直就是噩梦)。-XX:PretenureSizeThreshold可以设置直接进入老年代的对象大小 。
(3) 合理设置进入老年代对象的年龄,-XX:MaxTenuringThreshold 设置对象进入老年代的年龄大小,减少老年代的内存占用,降低fullgc发生的频率。
(4) 设置稳定的堆大小,堆大小设置有两个参数:-Xms初始化堆大小,-Xmx最大堆大小。
(5) 如果满足下面的指标,则一般不需要进行GC优化:
MinorGC执行时间不到50ms;Minor GC执行不频繁,约10秒一次;
FullGC执行时间不到1s;Full GC执行频率不算频繁,不低于10分钟1次。

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



