GC两种方法:
1.Systme.gc() ,
gc线程会立即启动,显示调用gc(),会增加主gc频率,进而影响性能。
2.finalize()
protected void finalize()
当一个对象变成一个垃圾对象的时候,如果此对象的内存被回收,那么就可以调用系统中定义的finalize方法来完成
GC何时运行:
1.eden(堆内存分一个eden与两个survivor)没有足够内存时,虚拟机将发生一次Minor GC,eden仍存活的对象将拷贝到survivor区(复制算法)。
2.老年代没有足够内存,进行full gc ,发生Full GC一般都会有一次Minor GC
3 .发生Minor GC时,虚拟机会检测之前每次晋升到老年代的平均大小是否大于老年代的剩余空间大小,如果大于,则进行一次Full GC,如果小于,则查看HandlePromotionFailure设置是否允许担保失败,如果允许,那只会进行一次Minor GC,如果不允许,则改为进行一次Full GC
减少GC开销:
1 减少临时对象的使用
2 不显式调用System.gc(),会增加主gc频率,影响性能
3 对象不用是为null 便于发现
4 尽量使用基本数据类型int 避免包装类数据类型 Interger
5 增加字符串使用stringBuffer .append() 而不是string=" a"+"b"
....