2010-01-06 53 views
40

我想我增加了我的堆大小爲1 GB在NetBeans,因爲我改變了配置看起來像這樣:如何查看應用程序正在使用的當前堆大小?

netbeans_default_options="-J-Xmx1g ...... 

我重新啓動的NetBeans之後,我可以肯定的是我的應用程序提供1個GB現在呢?

有沒有辦法驗證這一點?

回答

128

使用此代碼:

// Get current size of heap in bytes 
long heapSize = Runtime.getRuntime().totalMemory(); 

// Get maximum size of heap in bytes. The heap cannot grow beyond this size.// Any attempt will result in an OutOfMemoryException. 
long heapMaxSize = Runtime.getRuntime().maxMemory(); 

// Get amount of free memory within the heap in bytes. This size will increase // after garbage collection and decrease as new objects are created. 
long heapFreeSize = Runtime.getRuntime().freeMemory(); 

這是對我有用的知道這一點。

+0

如果使用此策略,則需要重新編譯應用程序(NetBeans)。 – vkraemer 2010-01-07 15:38:28

+0

按照文檔:https://docs.oracle.com/javase/7/docs/api/java/lang/Runtime.html#freeMemory()。上面提到的方法在JVM中返回內存,不一定需要堆內存 – 2018-01-17 18:14:16

+0

請注意,不是所有用'-J-Xmx 1g'指定的堆大小都必須可用於應用程序的對象。虛擬機,尤其是垃圾收集器可能會使用一些內存。 [這裏](https://plumbr.io/blog/memory-leaks/less-memory-than-xmx)多一點關於這個話題。 – 2018-02-01 11:07:57

8

您可以使用jconsole(大多數JDK的標準)來檢查任何java進程的堆大小。

+0

這包括內存使用情況,線程和類實時圖表。很有用。 – vkraemer 2010-01-07 16:02:10

2

從Sun Java 6 JDK附帶jvisualvm。列出啓動標誌。

+0

visualvm ... no j – vkraemer 2010-01-07 15:35:15

+2

該二進制文件命名爲jvisualvm(.exe)。不知道爲什麼。 – 2010-01-07 18:14:19

0
public class CheckHeapSize { 

    public static void main(String[] args) { 
     // TODO Auto-generated method stub 
     long heapSize = Runtime.getRuntime().totalMemory(); 

     // Get maximum size of heap in bytes. The heap cannot grow beyond this size.// Any attempt will result in an OutOfMemoryException. 
     long heapMaxSize = Runtime.getRuntime().maxMemory(); 

     // Get amount of free memory within the heap in bytes. This size will increase // after garbage collection and decrease as new objects are created. 
     long heapFreeSize = Runtime.getRuntime().freeMemory(); 

     System.out.println("heapsize"+formatSize(heapSize)); 
     System.out.println("heapmaxsize"+formatSize(heapMaxSize)); 
     System.out.println("heapFreesize"+formatSize(heapFreeSize)); 

    } 
    public static String formatSize(long v) { 
     if (v < 1024) return v + " B"; 
     int z = (63 - Long.numberOfLeadingZeros(v))/10; 
     return String.format("%.1f %sB", (double)v/(1L << (z*10)), " KMGTPE".charAt(z)); 
    } 
} 
+0

使用此代碼以人類可讀的格式獲取HeapSize的內存 – 2017-06-17 09:59:05

+0

1千字節(1 KB)= 1000字節。 1千字節(1千字節)= 1024字節。 – bcody 2017-08-03 11:29:03

0

何時jvisualvm是矯枉過正,或者您需要僅CLI個人最喜歡的:jvmtop

JvmTop 0.8.0 alpha amd64 8 cpus, Linux 2.6.32-27, load avg 0.12 
https://github.com/patric-r/jvmtop 

PID MAIN-CLASS  HPCUR HPMAX NHCUR NHMAX CPU  GC VM USERNAME #T DL 
3370 rapperSimpleApp 165m 455m 109m 176m 0.12% 0.00% S6U37 web  21 
11272 ver.resin.Resin [ERROR: Could not attach to VM] 
27338 WatchdogManager 11m 28m 23m 130m 0.00% 0.00% S6U37 web  31 
19187 m.jvmtop.JvmTop 20m 3544m 13m 130m 0.93% 0.47% S6U37 web  20 
16733 artup.Bootstrap 159m 455m 166m 304m 0.12% 0.00% S6U37 web  46 
相關問題