如何动态判断Java程序的运行时内存使用情况?

问题描述 投票:0回答:2

当我们定义一个Java类时,我们可以在堆中获取Obeject的内存使用量,但是由于程序的未知行为,我们无法获得运行时内存使用量。如下面的类:

public class Sample{
   private int age;
   private String name;
   private static List scores = new ArrayList<Integer>();
   public static void main(String[] args){
     Scanner sc = new Scanner(System.in);
     while(sc.hasNext()){
       scores.add(sc.nextInt());
     }
   }
}

那么我们如何获得类Sample的运行时内存使用?

java jvm jmx
2个回答
1
投票

有多种工具可以做到这一点。你可以使用JDK中的jvisualvm。或者,也有一些商业的。有关更多信息,您可以关注此link。此外,您可以在jvisualvm上安装“visual GC”插件,它可以显示您在堆的不同部分进行更改,例如:Eden,幸存者,旧的gen,metaspace。即使执行GC和加载类的时间也是可追踪的。

从Tools-> plugins在jvisualvm上安装插件。


1
投票

你可以得到另一个java参数,如“Used Memory”,如下所示:

public class Sample{
   private int age;
   private String name;
   private static List scores = new ArrayList<Integer>();
   public static void main(String[] args){
     Scanner sc = new Scanner(System.in);
     while(sc.hasNext()){
       scores.add(sc.nextInt());
     }

        Runtime runtime = Runtime.getRuntime();

        System.out.println("Used Memory:" 
            + (runtime.totalMemory() - runtime.freeMemory()));

        System.out.println("Free Memory:" 
            + runtime.freeMemory());

        System.out.println("Total Memory:" + runtime.totalMemory());

        System.out.println("Max Memory:" + runtime.maxMemory());
   }
}

如果你想计算一个类的用法,你必须在运行之前和之后得到这个参数而不是类,并比较数字

© www.soinside.com 2019 - 2024. All rights reserved.