2011-04-15 57 views
2

我們可以完全禁用字符串的實習嗎?這可能不是很有幫助,但只是一個想法。我可以考慮至少有一點,它可能有用,即在jvm調整過程中,控制燙髮的大小。我們可以避免在java中實習字符串嗎?

例如,如果我發佈了一個OSGI框架,並且任何人都可以添加任意數量的自己的捆綁包,並且每個捆綁包實際上可以完全搞砸我的調整參數。 (當然,我知道我們應該對給定的固定發行版進行調整,但仍然...)

任何想法!

回答

6

Permgen大小/用法對於現代JVM不是問題。當沒有剩餘的引用時,Interned字符串可用於垃圾回收器。

(不,你不能「關閉」字符串文字的實習)。

+1

全部爲true,但需要卸載/ gc'ed類才能使interclass字符串可用於gc。 – MeBigFatGuy 2011-04-15 05:53:57

+2

奇怪的是,考慮到我一直在看,它沒有任何東西被卸載。你的陳述是不正確的。 http://stackoverflow.com/questions/1091045/is-it-good-practice-to-use-java-lang-string-intern/2012661#2012661該答案中的代碼將告訴你,確實interned字符串是GC' d在現代JVMs – 2011-04-15 06:22:20

+0

啊是的,如果你明確實習字符串。是的我同意。我正在討論由jvm實施的標準常量。 – MeBigFatGuy 2011-04-15 12:05:25

0

String是最後一類,不能擴展。因此,不 - 你不能刪除在Java中實習Strings的能力。

1

通過在代碼中不使用任何字符串文字,您可以禁用大多數字符串的實習。您可以使用char []來代替它們並構建字符串。例如。

String hi = new String(new char[] { 'h', 'i' }); // not interned. 

正如你所提到的,這只是爲你自己創造工作,而且會讓事情變得更糟。

如果我給了一個OSGi框架,任何人都可以添加任意數量的自己的包,每個包串實習可以完全搞砸了我的整定參數

如果他們補充包,他們可能需要更高的最大內存,perm gen大小,直接內存大小,不同的NewSize比率,甚至不同的GC。防止這種情況的唯一方法是阻止OSGi容器中的任何其他模塊。

或者你可以說,如果你添加包,你可能需要改變調優參數。

+0

我正在尋找一些可以禁用實習的jvm參數。如前所述,這僅用於實驗目的。謝謝 – 2011-04-15 09:17:29

相關問題