来自Java的内存主机和内存参数xms和xmx之间的关系

Wes*_*lor 10 java linux memory memory-management

我有以下主机的内存详细信息:

$free -m
             total       used       free     shared    buffers     cached
Mem:          7872       7579        292         17        483       3983
-/+ buffers/cache:       3112       4759 
Swap:         2047         14       2033
Run Code Online (Sandbox Code Playgroud)

我有一个使用params运行的java应用程序 -Xms200m -Xmx200m,有人可以解释一下为什么VCZ是3800076而RSS是241304(这更像是Java参数)

ps -aux命令:

66345     6773  0.2  2.9 3800076 241304 ?      Sl   Apr1  12:06 /apps/myapps/myapp1/java/bin/java -Xms200m -Xmx200m
Run Code Online (Sandbox Code Playgroud)

apa*_*gin 17

Java进程使用的内存(由操作系统看到)不仅限于Java堆.还应该计算更多的内存区域:

  • 元空间(类元数据所在的位置);
  • 代码缓存(JIT编译方法的存储和所有生成的代码);
  • 直接ByteBuffers;
  • 内存映射文件,包括由JVM映射的文件,例如类路径上的所有JAR文件;
  • 线程堆栈;
  • JVM代码本身以及Java Runtime加载的所有动态库;
  • 其他内部JVM结构.

使用NativeMemoryTracking JDK功能获取JVM使用的内存区域的详细分类:

java -XX:NativeMemoryTracking=detail -XX:+UnlockDiagnosticVMOptions -XX:+PrintNMTStatistics
Run Code Online (Sandbox Code Playgroud)

  • 请你加入对https://docs.oracle.com/javase/8/docs/technotes/guides/troubleshoot/tooldescr007.html的引用.然后我会upvote :-P (2认同)