可以在Young Generation中运行并发收集以进行次要收集

时间:2011-07-11 20:09:55

标签: java performance algorithm garbage-collection

或者换句话说,是否有任何类似“并发复制算法”的算法可以帮助减少次要收集的暂停?

2 个答案:

答案 0 :(得分:2)

是的,存在不同的此类算法。

最简单的实现可以同时运行的Eden / Young-Generation算法就是使用多个Edens和Gen 1堆。根据哪个线程准备就绪(当前不是“复制收集”,即“复制所有引用的内容然后将指针切换到新内存”),该线程将使用指向该对象的指针进行响应;线程可以通过比较指向那些堆的最小/最大地址的指针来识别对象所属的Eden或Gen 1堆。

您还可以实现单个堆的并发副本:创建一个线程池,每当必须进行副本集合时,为每个线程分配一部分地址范围。

如果您需要更具体的想法,请专注于您的问题。

答案 1 :(得分:0)

java.util.concurrent包有很多类可以帮助解决这个主题领域。

例如,CopyOnWriteArrayList,根据javadoc是:

  

ArrayList的线程安全变体,其中通过创建基础数组的新副本来实现所有可变操作(添加,设置等)。

如果你担心线程安全(看起来像你),那么这个包中可能有一个对你有用的类。