Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:内存使用问题_Java - Fatal编程技术网

Java:内存使用问题

Java:内存使用问题,java,Java,我已将最大内存设置为该值 java -Xmx280m -jar ... 内存使用信息代码(单击按钮): 程序显示以下输出(2次单击+新选项卡等): 然而,当我查看Linux(Centos 7)系统监视器时,它显示了这个java进程的330mb。如何解释?JVM内存由以下部分组成: 堆内存,它是Java对象的存储 非堆内存,Java使用它来存储加载的类和其他元数据 JVM代码本身、JVM内部结构、加载的探查器代理代码和数据等 可以使用进程启动期间传递的标志配置这些部件: 您指定的280兆字节

我已将最大内存设置为该值

java -Xmx280m -jar ...
内存使用信息代码(单击按钮):

程序显示以下输出(2次单击+新选项卡等):


然而,当我查看Linux(Centos 7)系统监视器时,它显示了这个java进程的
330mb
。如何解释?

JVM内存由以下部分组成:

  • 堆内存,它是Java对象的存储
  • 非堆内存,Java使用它来存储加载的类和其他元数据
  • JVM代码本身、JVM内部结构、加载的探查器代理代码和数据等
可以使用进程启动期间传递的标志配置这些部件:


您指定的280兆字节是为Java程序的堆保留的。VM和其他东西也使用内存,因此命令行和进程列表中的数字永远不会相同。

这是一个很大的区域,这些区域用于JVM完成的内存管理。有关更多信息,请阅读垃圾收集算法。
    int mb = 1024*1024;
    //Getting the runtime reference from system
    Runtime runtime = Runtime.getRuntime();
    System.out.println("##### Heap utilization statistics [MB] #####");
    //Print used memory
    System.out.println("Used Memory:"
        + (runtime.totalMemory() - runtime.freeMemory()) / mb);
    //Print free memory
    System.out.println("Free Memory:"
        + runtime.freeMemory() / mb);
    //Print total available memory
    System.out.println("Total Memory:" + runtime.totalMemory() / mb);
    //Print Maximum available memory
    System.out.println("Max Memory:" + runtime.maxMemory() / mb);
Used Memory:41
Free Memory:123
Total Memory:165
Max Memory:249
Used Memory:67
Free Memory:97
Total Memory:165
Max Memory:249