GC优化的两个目的:
1.将进入老年代的对象数量降到最低
2.减少Full GC的执行时间
使用 StringBuilder或 StringBuffer来代替 String
尽量少输出日志
https://blog.csdn.net/hellozhxy/article/details/80404022
将进入老年代的对象数量降到最低
关于分代GC,就是对象在Eden区被创建,随后被转移到Survivor区,在此之后剩余的对象会被转入老年代。也有一些对象由于占用内存过大,在Eden区被创建后会直接被传入老年代。老年代GC相对来说会比新生代GC更耗时,因此,减少进入老年代的对象数量可以显著降低Full GC的频率。你可能会以为减少进入老年代的对象数量意味着把它们留在新生代,事实正好相反,新生代内存的大小是可以调节的。
降低Full GC的时间
Full GC的执行时间比Minor GC要长很多,因此,如果在Full GC上花费过多的时间(超过1s),将可能出现超时错误。
如果通过减小老年代内存来减少Full GC时间,可能会引起 OutOfMemoryError或者导致Full GC的频率升高。
另外,如果通过增加老年代内存来降低Full GC的频率,Full GC的时间可能因此增加。
因此,你需要把老年代的大小设置成一个“合适”的值。