簡體   English   中英

查找JVM 8中內存使用過多的原因

[英]finding cause of excessive memory usage in jvm 8

我的實際問題是,當前netbeans使用的內存約為4G(根據OS X上的活動監視器)。 我設置了幾個內存限制選項都無濟於事。 從我的netbeans.conf

netbeans_default_options="-J-client -J-Xmx1G -J-Xss2m -J-Xms32m -J-XX:PermSize=32m -J-XX:MaxMetaspaceSize=256m -J-XX:+UseConcMarkSweepGC -J-Dapple.laf.useScreenMenuBar=true -J-Dapple.awt.graphics.UseQuartz=true -J-Dsun.java2d.noddraw=true -J-Dsun.java2d.dpiaware=true -J-Dsun.zip.disableMemoryMapping=true"

我想知道的是如何找出為什么要使用這么多的內存? 我應該采取什么步驟來確定問題的根源。

(我對通用類比對特定的Netbeans更感興趣)。 可能值得注意的是,我僅對Java進行了幾個月的編程,卻不知道可用於此目的的工具,也不知道我應該檢查什么。 (例如,我今天添加了MaxMetaspaceSize,因為我意識到這並不受限制,以為可能是這樣,但是我仍然不確定如何檢查)。

這是我從visualvm堆轉儲中發現的一些信息

  File size: 364.7 MB      Total bytes: 332,921,516     Total classes: 24,143     Total instances: 4,151,139     Classloaders: 3,272     GC roots: 65,185     Number of objects pending for finalization: 0 

它的元空間圖顯示它為堆保留了大約600M,為元空間保留了150M。 當時,活動監視器顯示的內存約為2G。 我要弄清楚的是整個1G額外的內存使用量在哪里。 如果再增加幾百兆字節,那是可以容忍的,但是2-4G的內存是系統內存的一半(還請注意,在相同版本的Linux機器上,它不會以這種方式運行)。 我認為對於Java IDE,從800M-2G的任何地方可能都是正常的,並且是可以容忍的,而我不會對此進行調查,就是使用剩余的可用內存,而沒有任何可察覺的原因使我想要看看究竟是什么,以及為什么要保留它。

活動監視器和可視VM數量未累加

更新:這是在JVM 8中的OS X上Swing中內存泄漏,我無法真正接受無法使我明白在jdk 8中定位問題根源的答案。

JDK附帶了工具。 運行%JAVA_HOME%\\ bin \\ jvisualvm.exe並檢查您的實例。 您應該能夠執行堆轉儲並分析使用情況。

暫無
暫無

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

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