jvm实际占用内存大于堆堆内+堆外推测

Posted 好大的月亮

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了jvm实际占用内存大于堆堆内+堆外推测相关的知识,希望对你有一定的参考价值。

概述

在linux中使用ps查询实际占用内存和jvm的堆内+堆外比较发现不相等。

rss实际占用内存,vsz虚拟内存

ps -p 6705 -o vsz,rss

使用arthas统计jvm的堆内+堆外

比较结果发现
实际600MB > (jvm堆内+堆外)319MB

但是有一点是可以知道的,就是这些内存的确被jvm所属进程使用了。

JAVA应用占用内存组成

JAVA进程内存 =
JVM进程内存+
heap内存+
永久代内存+
本地方法栈内存+
线程栈内存 +
堆外内存 +
socket 缓冲区内存+
元空间

在之前统计的基础上:

heap+元空间+code_cache+compressed_class_space+direct+mapped最后再加上线程栈内存top查询的res实际占用内存数量就差不多了.

在jdk5之后每个线程栈差不多1M
统计jvm线程数

cat /proc/pid/status

查看打出来的thread那一行就可以看到线程数了

以上是关于jvm实际占用内存大于堆堆内+堆外推测的主要内容,如果未能解决你的问题,请参考以下文章

jvm学习DirectByteBuffer堆外内存浅析

jvm调优四:netty堆外内存泄露

java堆外内存详解(又名直接内存)和ByteBuffer

java堆外内存详解(又名直接内存)和ByteBuffer

HBase实战 | 排查HBase堆外内存溢出

JVM技术专题 深入分析回顾堆外内存使用和分析「分析篇」