-
GC优化的两个目的:
1) 将进入老年代的对象数量降到最低 基本都是分代GC,就是对象在Eden区被创建,随后被转移到Survivor区,在此之后剩余的对象会被转入 老年代。也有一些对象由于占用内存过大,在Eden区被创建后会直接被传入老年代。老年代GC相对来说会 比新生代GC更耗时,因此,减少进入老年代的对象数量可以显著降低Full GC的频率。 你可能会以为减少进入老年代的对象数量意味着把它们留在新生代,事实正好相反,新生代内存的大小是可以调节的。 2) 减少Full GC的执行时间 FullGC的执行时间比MinorGC要长很多,因此如果在FullGC上花费过久(超过1s),将可能出现超时错误。 如果通过减小老年代内存来减少Full GC时间,可能会引起OutOfMemoryError或者导致Full GC的频率升高 如果通过增加老年代内存来降低Full GC的频率,Full GC的时间可能因此增加 所以要不停的调节老年代大小,使得两者兼顾 (减少时间和减少频率)
-
永久代内存大小 一般不需要去调节,注意的时如果有很多类加载器的话,会预先分配给每个加载器独立的空间,可能导致永久代还未满,但是出现了outofmemory
-
大内存空间 减少了GC的次数 提高了GC的运行时间 小内存空间 增多了GC的次数 降低了GC的运行时间
-
设置新生代大小
修改参数:NewRatio
NewRatio:2 ----》 Minor GC 40ms
NewRatio:3 ----》 Minor GC 34ms
NewRatio:4 ----》 Minor GC 30ms
当修改为 4时,则GC时长最短,并且不会再出现FullGc