2011-07-11 71 views

回答

2

是的,存在不同的這種算法。

可以同時運行的Eden/Young-Generation算法最簡單的方法就是使用多個Edens和Gen 1堆。根據哪個線程就緒(當前不是「複製收集」,即「複製引用的所有內容然後將指針切換到新內存」),該線程將用指向該對象的指針作出響應;線程可以通過比較指向這些堆的最小/最大地址的指針來識別對象屬於哪個Eden或Gen 1堆。

您還可以實現單個堆的併發副本:創建線程池並且每當副本集合發生時,都將地址範圍的一部分分配給每個線程。

如果你需要一個更具體的想法,只是專門化你的問題。

0

java.util.concurrent包有許多類來幫助這個主題領域。

例如,CopyOnWriteArrayList,根據的Javadoc是:

ArrayList的,其中所有可變操作(添加,設置,等等)的一個線程安全的變體是通過使一個新的副本實現底層數組。

如果你擔心線程安全(看起來你是),那麼這個包中可能有一個類會對你有用。