我們有一個Java應用程序,它在Windows 7環境中通過JNA使用SWT和其他一些DLL。如何檢測內存在堆外的Java應用程序中泄漏?
我們已經看到JVM進程的內存使用量會隨着時間的推移而增加,但JVM堆積在正常的GC活動下相對穩定。
我們懷疑SWT和/或JNA/DLL有一些內存泄漏,但無法確定爲什麼或在哪裏。
Windows平臺上是否有任何工具可以幫助檢測這類問題?或者Java平臺上的任何工具可以幫助解決這個問題?任何建議都是值得歡迎的。
我們有一個Java應用程序,它在Windows 7環境中通過JNA使用SWT和其他一些DLL。如何檢測內存在堆外的Java應用程序中泄漏?
我們已經看到JVM進程的內存使用量會隨着時間的推移而增加,但JVM堆積在正常的GC活動下相對穩定。
我們懷疑SWT和/或JNA/DLL有一些內存泄漏,但無法確定爲什麼或在哪裏。
Windows平臺上是否有任何工具可以幫助檢測這類問題?或者Java平臺上的任何工具可以幫助解決這個問題?任何建議都是值得歡迎的。
在Java 8中有一個命令行開關:-XX:NativeMemoryTracking=<value>
,其中值可以是off
,summary
或detail
。
您可以將其設置爲detail
,然後您可以使用jcmd
來查詢它。
這裏有一些關於這個here的官方文檔。儘管這個功能相當有限,但它可能只是幫助找到原因。
如果做不到這一點,確定問題的來源的原油,但有效的方法是更換一個虛擬版本(甚至非本地虛擬)的dll,看看您是否能重現同樣的問題。
SWT最常見的泄漏是應用程序無法「處理」像'Color' –