当我们定义一个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类的运行时内存使用情况?
答案 0 :(得分:1)
有多种工具可以做到这一点。您可以使用JDK中的jvisualvm。另外,也有一些商业的。有关更多信息,请遵循此link。此外,您可以在jvisualvm上安装“ visual GC”插件,该插件可显示您在堆的不同部分进行的更改,例如:伊甸园,幸存者,旧时代,元空间。甚至可以执行GC的时间和加载类的时间。
要从Tools-> plugins在jvisualvm上安装插件。
答案 1 :(得分: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());
}
}
如果您想计算班级使用情况,则必须在班级运行之前和之后获取此参数,并比较数字