的ManagementFactory
給你一個java.lang.management.ThreadMXBean
,但你要調用的方法是com.sun.management.ThreadMXBean
界面中(它擴展了java.lang.management.ThreadMXBean
接口)。
如果您是在Sun/Oracle的VM上運行,你可以把結果和調用方法:
((com.sun.management.ThreadMXBean)ManagementFactory.getThreadMXBean())
.getThreadAllocatedBytes();
當然,這也適用於其他虛擬機失敗,但。 com.sun包也不建議使用,因爲那裏的類可能會隨時更改(即使對VM稍作更新)。所以最好在使用這個代碼時小心謹慎,並且不要依賴代碼。
編輯 如果仍然不能編譯這一點,但它的工作原理使用反射,還有比反射一個更好的方式。 Java Management API特別支持按名稱訪問bean和屬性,因爲在編譯時你想要顯示它們的時候通常都是不知道它們的(想想像JConsole或VisualVM這樣的通用JMX客戶端)。
使用下面的代碼:
ObjectName threadMxBean = new ObjectName(ManagementFactory.THREAD_MXBEAN_NAME);
MBeanServer mbeanServer = ManagementFactory.getPlatformMBeanServer();
long[] memUsedPerThread = (long[]) mbeanServer.getAttribute(threadMxBean, "ThreadAllocatedBytes");
這應該工作,但我不能測試它,因爲我的JVM,屬性是不存在的。如果它不起作用,請使用JConsole或VisualVM,連接到您的Java進程並驗證該屬性是否確實具有正確的名稱。
你也可以看看JMX documentation。
編輯2 在你的代碼示例,您使用getThreadAllocationBytes
,但鏈接到API顯示getThreadAllocatedBytes
。仔細檢查你是否正確。我的回答錯了,現在我修好了。
您可以隨時在Eclipse中爲您的項目更改您的編譯器設置,如果這是您正在尋找的。 '項目>屬性> Java編譯器>啓用項目特定設置' – Sujay 2012-07-19 13:52:42
這是行不通的。它允許在主要版本的JDK之間進行選擇。我需要在JDK6u25 eclipse中引入的方法只允許我選擇1.6 – Alper 2012-07-19 14:39:13
Google找不到名爲getThreadAllocationBytes的方法(除此SO問題外)。在任何版本中,它也不作爲ThreadMXBean類的一部分列在GrepCode.com上。你在哪裏看到有關該方法的文檔? – 2012-07-19 14:40:47