web-dev-qa-db-fra.com

Comment afficher la taille de tas actuelle utilisée par une application?

Je pense avoir augmenté ma taille de segment de mémoire à 1 Go dans NetBeans depuis que j'ai modifié la configuration pour ressembler à ceci:

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

Après avoir redémarré NetBeans, puis-je être sûr que mon application reçoit 1 Go maintenant?

Y at-il un moyen de vérifier cela?

47
mrblah

Utilisez ce code:

// 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(); 

Cela m'a été utile de le savoir.

140
Drewen

Vous pouvez utiliser jconsole (standard avec la plupart des JDK) pour vérifier la taille des segments de mémoire de tout processus Java.

8
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));
    }
}
5
ram kumar

Attachez avec jvisualvm à partir du Sun Java 6 JDK. Les indicateurs de démarrage sont répertoriés.

Vous pouvez utiliser l'outil suivant: Eclipse Memory Analyzer Tool http://www.Eclipse.org/mat/ .

C'est très utile.

1
Sujith PS

Favori personnel pour quand jvisualvm est overkill ou que vous avez besoin de cli seulement: 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
0
Matt Fortier