繁体   English   中英

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

[英]How to judge a Java program's runtime memory usage dynamically?

定义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的运行时内存使用情况?

有多种工具可以做到这一点。 您可以使用JDK中的jvisualvm。 另外,也有一些商业的。 有关更多信息,请单击此链接 此外,您可以在jvisualvm上安装“ visual GC”插件,该插件可显示您在堆的不同部分进行的更改,例如:伊甸园,幸存者,旧时代,元空间。 甚至可以执行GC的时间和加载类的时间。

要通过工具->插件在jvisualvm上安装插件。

您可以像这样获得另一个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());
   }
}

如果您想计算班级使用情况,则必须在班级运行之前和之后获取此参数,并比较编号

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM