2009-06-26 61 views
18

我最近讀到所有JRE 6 Java VM Options]可用的JVM參數,並看到這個:JVM -XX:+ StringCache參數?

-XX:+ StringCache:允許常用分配字符串緩存。

現在我一直的印象是Java的保持實習池下(正確的字?)字符串和做一些像字符串連接時與文字它沒有創建新的對象,但此池中拉他們。有沒有人曾經使用這個論點,或者可以解釋爲什麼需要這個論點?

編輯:我試圖運行一個基準測試,看看這個參數是否有任何影響,並且無法讓Sun JVM識別它。這是:

java version "1.6.0_11" 
Java(TM) SE Runtime Environment (build 1.6.0_11-b03) 
Java HotSpot(TM) Client VM (build 11.0-b16, mixed mode, 
sharing) 

所以我不知道這個參數是否可以工作。

+2

我想大部分的字符串操作,不使用實習。 JVM使用interning來存儲類文件中的字符串值,並避免由於重複而導致內存消耗過多。 – akarnokd 2009-06-26 16:17:48

+0

偉大的問題。太陽文檔在這裏非常不清楚。然而,關於實習的文檔很清楚,它只在特定情況下(字符串文字)運行,所以JVM arg或許在更廣泛的情況下應用這種行爲。 – 2009-06-26 16:21:47

回答

0

我一直沒能找到一個甚至接受這個所謂的參數的JVM--所以我想沒有其他的說法了。

6

我相信,隨着-XX:+AggressiveOpts使用時,它使同一String對象創建時String具有相同的文本(雖然不是通過new String,當然)返回。有一個配置文件階段,其中構建了緩存,並且在緩存切換到只讀後。它在某些基準測試中得分較高。

1

我也無法得到上面的工作,但最新的JBB @ spec.org顯示它的用途:-XX:-UseStringCache。我將不得不重新運行基準測試,以查看它是否有所作爲(一個XML重要的應用程序)。

1

我也無法找到尊重此設置的JVM;因爲JVM參數的文檔的質量和有用性是非常糟糕的,但由於某種原因,JVM供應商似乎認爲有競爭差異化的空間 - 儘管公平,Oracle/Sun是最差的。

無論如何,如果您發現您的應用程序在某些特定區域重複使用了少量的字符串值,那麼使用實習是絕對明智的 - 通過使用String.intern()方法返回實習生中的值。請注意,您必須使用返回值,這不是原始值的副作用。

與所有的性能分析/性能調整一樣,這需要使用度量和測試進行仔細的處理。它可能很重要(對我來說),但是如果值池不小,它會降低性能,並且您需要知道,字符串值池保存在Perm Gen中,因此使用它將影響內存使用情況,GC等等。

3

-XX:-UseStringCache奇怪地爲我工作。

我的JDK版本應該是1.6.0_22