簡體   English   中英

字符串的 Java GC 調優

[英]Java GC tuning for strings

分析應用程序我發現堆上有很多字符串。

在我的情況下,字符串是在堆上創建的而不是實習的,它們不是文字。

當應用程序中的字符串數量非常多時,是否需要遵循特定的 GC 調優技術。

我偶然發現了 GC 設置-XX:+UseCompressedStrings 或 -XX+UseStringCache但不確定這會有所幫助。 有沒有人嘗試過這些設置?

java版本“1.6.0_22”
Java(TM) SE 運行時環境(構建 1.6.0_22-b04)
Java HotSpot(TM) 64 位服務器 VM(構建 17.1-b03,混合模式)

-XX:+UseCompressedStrings ,你應該看看這個問題: Support for Compressed Strings -XX:+UseCompressedStrings Dropped in HotSpot JVM?

並且,與-XX+UseStringCache相關,看看: JVM -XX:+StringCache 參數?

順便提一句。 Java 7 提供了一些不錯的特性,允許在使用內部字符串時調整字符串緩存。 請參閱-XX:+PrintSTringTableStatistics-XX:StringTableSize=n 這樣您就可以優化字符串緩存大小。

Java 8 帶有一個新的 GC 特性 -XX:+UseStringDeduplication。

啟用此功能后,GC 將比較字符串以找到具有相同字符數組值的字符串。 假設str1str2具有相同的 char[],那么 GC 將使 str1 指向 str2 的 char[]。 這樣 str1 的 char[] 可以被垃圾收集並回收內存。 並且由於字符串是不可變的,因此不存在使多個字符串指向同一個 char[] 的風險

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM