2010-01-25 100 views
1

正如我們所知,java的垃圾回收器是一個低優先級的線程。在java中我們可以創建任何高優先級的線程。所以有可能有我們自己定製的垃圾回收器線程具有可變的優先級(我們可以根據內存管理的級別來設置)。我們可以在java中有一個自定義的垃圾收集器嗎?

有沒有人試過。如果是的話,你可以分享一些關於如何和它的邏輯的知識? 謝謝

+0

爲什麼你想不想做? GC不是做得好嗎?然後在sun.com上提出問題:) – BalusC 2010-01-25 18:38:27

+0

只是想知道我們是否可以用一些很好的優先級來嘲笑它 – GuruKulki 2010-01-25 18:40:35

+0

模擬是爲單元測試完成的。單元測試不測試性能。我不相信這是一個明智的做法。 – 2010-01-25 18:44:46

回答

10

Java的垃圾收集器不是「低優先級的線程」。例如,垃圾收集通常並行使用多個線程。而且,當內存不足時,垃圾收集可以搶佔任何應用程序線程。

我推薦學習Garbage Collection Tuning guide來確定最適合應用程序的垃圾收集器的類型,以及如何調整它的參數。

0

我相信你必須部署自己的JRE/JVM。沒有辦法關閉Java中的默認垃圾收集。

Java 7將使用全新的GC,所以應該可以將它們交換出來。

+0

有一個不同的垃圾收集器的選擇,但你可以選擇一個最適合你的應用程序。 – Will 2010-01-25 18:45:36

3

Java中的垃圾收集已經很好的調整了多年。這可能,但不太可能是你在做這方面有特殊需求的非常特殊的事情。

但我認爲更可能的是,無論您認爲自己在使用垃圾收集器時遇到的問題是您應用程序中的問題。更多推測:

  • 您不必要地創建和丟棄了很多對象。
  • 您有內存泄漏。
  • 您在應用程序中遇到性能問題。
  • 你有不可能的表現期望。
+0

的確,與JVM捆綁在一起的垃圾回收器經歷了許多修改和升級。你最好的選擇是分析你的應用程序。此外,與性能有關,您可以嘗試將JVM設置爲服務器模式而不是客戶端模式;這可以給你提高性能。參見http://www.coderanch。COM/T/385923/Java的通用/ JAVA/JVM - 服務器模式-VS客戶端 – 2010-01-25 18:46:37

2

是的,你可以,但它需要你做一些相當硬的核心JVM工作,因爲你不能從正在運行的Java程序中完成它。最簡單的入門方式可能是使用Jikes RVM,因爲它是用Java編寫的(一個IBM項目開放源代碼)。

http://jikesrvm.org/

玩得開心,但想到一場艱苦的戰鬥:)