回答
在最近的Hotspot虛擬機上,實際的字符串看起來就像任何其他的 - 唯一的區別是底層字符數組正在被虛擬機跟蹤(我認爲它有一個額外的JNI引用,但它不顯示在YourKit轉儲 - 將是有趣的調查)。
也就是說,Yourkit提供了對重複字符串的內存檢查,我相信這是您所需要的。如果將它與'Trace Allocations'結合使用,您可以直接找到分配這些字符串的代碼。
見http://www.yourkit.com/docs/95/help/inspections_mem.jsp#duplicate_strings
-
獲得兩個時間點之間添加字符串列表比較容易:
- 獲取使用JMAP或你最喜歡的探查
- 做兩堆轉儲堆的差異
- 顯示字符串類的所有實例
應該可以使用任何分析器甚至jhat(如果你足夠耐心)。如果您使用YourKit,則可以使用書籤功能並僅使用一個堆快照。
問題不是重複的字符串。重複在堆內存中,我得到了很多。問題是interned字符串。如果我看不到哪一個是被實施的,哪一個不是,那麼獲得所有字符串的列表將無濟於事。 – 2011-07-20 21:39:03
也許最簡單的方法是使用字節碼查看器。任何被實現的字符串將出現在包含String字面值的類文件的常量池中。例如,在我回答的另一個StackOverflow問題的最近類文件中,我的代碼中有以下字符串文字:"sun.awt.noerasebackground"
。這在常量池中顯示爲'String_info'
類型。字節碼查看器(和編輯器,所以要小心!)我使用的是JBE。 JBE Download
您是否擁有JBE文檔的網址? – 2011-08-03 16:01:48
這是一個小項目,據我所知沒有任何文檔。 – Josh 2011-08-07 04:15:13
- 1. GSON反序列化字符串[]爲一個字符串內部的字符串
- 2. 部分反序列化具有多個根的JSON字符串
- 3. 輸出字符串是內部調用內部@ {}
- 4. Django測試自動化可以使用哪些工具?
- 5. JSON反序列化類缺少JSON鍵[字符串可以是單個字符串或列表字符串]
- 6. 您使用哪個(第三方)Visual Studio 2005/2008調試可視化工具?
- 7. 哪個構建工具可以教?
- 8. 如何可以參考內部一個字符串數組和數組列表
- 9. 哪個測試工具可以完成REST和GUI?
- 10. 查詢列出哪個字符串在表中出現了多少個字符?
- 11. 可變內部可以動態改變的字符串
- 12. 從HTML字符串內部調用Html.RenderAction
- 13. 模糊字符串匹配:哪個工具?
- 14. 一個簡單的調試可視化工具delphi 2010
- 15. JavaScript優化:什麼工具可以壓縮順序字符串連接?
- 16. 更改字符串內部的出現
- 17. 字符串內部的Java字符串
- 18. ToString()和調試器的字符串可視化器
- 19. notation3(n3)調試工具在哪裏?
- 20. 轉換/序列化爲內部控制字符串傳遞到可讀結構
- 21. 從哪個內存區域調用我的字符串?
- 22. 序列化字符串 - 可能嗎?
- 23. Findstr工具從多個字符串
- 24. 如何列出已在jvm中內化的字符串?
- 25. 我可以檢查數組中的字符串來自哪個部分嗎?
- 26. 哪些自動化軟件測試工具可以快速學習
- 27. 比較可以不同的內部順序的字符串
- 28. Java:我可以使用JAXB來序列化一個字符串列表嗎?
- 29. 字符串內部的Java字符串到字符串
- 30. Android SDK或Java中是否有一個實用工具可以用佔位符替換部分字符串?
你用什麼IDE? – 2011-07-08 14:01:41
@Ed Staub - 我在窗口計算機上使用eclipse,但是我在Linux計算機上用ant編譯並在那裏運行。你問來幹什麼? – 2011-07-08 15:14:18
不確定這是否有用:您可以在String上放置一個調試器詳細格式化程序,以顯示它是否被攔截,例如:(this == this.intern())?(「^」+ toString()):toString )'。你能解釋一下你需要的工具嗎?是因爲你依賴於平等測試,還是你在查看內存使用情況,或者... – 2011-07-08 15:18:40