一、判断一个对象可不可以被回收标志:
1>引用计数器
每当有一个地方引用,计数器就加1,引用失效就减1,计数器为0就不可用;
2>可达性分析算法(GC root)
当一个对象没有与任何引用链相连的时候,就可以对其进行回收;
JVM 什么情况下触发GC,GC触发方式是什么?
JVM内存不足时会触发GC,触发方式为分代收集算法:1年轻代,2年老代
年轻代:当一个对象被创建时,内存分配首先在年轻代,大部分对象在创建之后都不再使用,对象很快变得不可达(没用)
被GC清理;即Young GC
年老代:年轻代残存的对象被复制到年老代,年老代的空间比年轻代大,年老代GC的执行次数也比年轻代少,当年老代内存不足时,执行Full GC
GC算法:1、标记--清除;2、复制;3、标记--整理三种
标记--清除算法:首先标记所有需要回收的对象,标记玩以后统一回收。
缺点:效率低下,会造成不连续的内存空间
复制算法
主要解决效率问题,将内存空间划分为2部分,当这一块内存用完时,将存货的对象分配到另一块内存空间上,然后对已使用过得进行一次性清理
备注:常用来回收 新生代
标记--整理算法
标记完后,让所有对象想内存一端移动,然后直接清理边界以外的内存
二、JVM参数配置优化
1、String常量池在JDK1.7以前是永久区的一部分,1.7以后被移到堆中进行管理
-Xms512M -Xmx1024M -XX:MaxPermSize=1024M 配置堆大小介于512-1024之间