2& 和 ?!。
⑴2&
一般情况下,当新对象生成,并且在 5 申请空间失败时,就会触发 2&
,对 5 区域进行 ,清除非存活对象,并且把尚且存活的对象移动到
2! 区。然后整理 2! 的两个区。这种方式的 是对年轻代的 5 区进
行,不会影响到年老代。因为大部分对象都是从 5 区开始的,同时 5 区不
会分配的很大,所以 5 区的 会频繁进行。因而,一般在这里需要使用速度
快、效率高的算法,使 5 去能尽快空闲出来。
⑵?!
对整个堆进行整理,包括 :!&、<! 和 6。?! 因为需要对整个对进行
回收,所以比 2& 要慢,因此应该尽可能减少 ?! 的次数。在对 调优
的过程中,很大一部分工作就是对于 ?! 的调节。有如下原因可能导致 ?!:
年老代(<!)被写满,尽量不要让存活的对象到年老区中。
持久代(6)被写满。
2# &*+被显示调用。
上一次 之后 8 的各域分配策略动态变化。
1.9 垃圾收集器
⑴串行收集器
用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高。但是,
也无法使用多处理器的优势,所以此收集器适合单处理器机器。当然,此收集器
也可以用在小数据量( 左右)情况下的多处理器机器上。可以使用 0@@A
B7 2 打开。
⑵并行收集器
对年轻代进行并行垃圾回收,因此可以减少垃圾回收时间。一般在多线程多处理
器机器上使用。使用0@@AB7 6打开。
如果年老代不使用并发收集的话,默认是使用单线程进行垃圾回收,因此会制约
扩展能力。使用0@@AB7 6; 打开。
使用0@@A6<% CD>E设置并行垃圾回收的线程数。此值可以设置与机器
处理器数量相等。
此收集器可以进行如下配置:
最 大 垃 圾 回 收 暂 停 : 指 定 垃 圾 回 收 时 的 最 长 暂 停 时 间 , 通 过 0
@@AF6! CD>E指定。D>E为毫秒。如果指定了此值的话,堆大小和垃
圾回收相关参数会进行调整以达到指定值。设定此值可能会减少应用的吞吐量。
吞 吐 量 : 吞 吐 量 为 垃 圾 回 收 时 间 与 非 垃 圾 回 收 时 间 的 比 值 , 通 过 0
@@A<-/CD>E来设定,公式为 G(B>)。例如,0@@A<-/C 时,
表示 H的时间用于垃圾回收。默认情况为 ,即 H的时间用于垃圾回收。
⑶并发收集器
可以保证大部分工作都并发进行(应用不停止),垃圾回收只暂停很少的时间,
此 收 集 器 适 合 对 响 应 时 间 要 求 比 较 高 的 中 、 大 规 模 应 用 。 使 用 0@@A