我为一个Java应用程序运行了“jcmd VM.native_memory详细信息”,输出如下:
Total: reserved=4741MB, committed=3506MB
- Java Heap (reserved=2350MB, committed=2350MB)
(mmap: reserved=2350MB, committed=2350MB)
- Class (reserved=1676MB, committed=751MB)
(classes #151986)
( instance classes #144245, array classes #7741)
(malloc=24MB #383379)
(mmap: reserved=1652MB, committed=727MB)
( Metadata: )
( reserved=628MB, committed=626MB)
( used=613MB)
( free=13MB)
( waste=0MB =0.00%)
( Class space:)
( reserved=1024MB, committed=100MB)
( used=92MB)
( free=8MB)
( waste=0MB =0.00%)
- Thread (reserved=214MB, committed=26MB)
(thread #219)
(stack: reserved=213MB, committed=25MB)
(malloc=1MB #1316)
...
OMIT SOME LINES HERE
...
- Internal (reserved=10MB, committed=10MB)
(malloc=10MB #9058)
- Symbol (reserved=44MB, committed=44MB)
(malloc=41MB #560526) --> isn't malloc function backed up by arena under glibc?
(arena=2MB #1) --> what does this line mean?
- Native Memory Tracking (reserved=19MB, committed=19MB)
(malloc=1MB #7348)
(tracking overhead=18MB)
- Shared class space (reserved=17MB, committed=17MB)
(mmap: reserved=17MB, committed=17MB)
- Arena Chunk (reserved=6MB, committed=6MB). --> What does this block suggest?
(malloc=6MB)
- Module (reserved=3MB, committed=3MB)
(malloc=3MB #18535)以符号块为例,malloc和竞技场有什么区别?java应用程序是使用glibc在Linux上运行的,所以我认为(也许我错了)它实际上是负责内存管理的领域。但是,为什么下面还有一条分隔行,记录按竞技场分配的内存?
竞技场块块是什么意思?你能指点我一下吗?谢谢。
发布于 2022-07-05 22:27:34
这与滑翔竞技场无关。
在HotSpot中,Arena是一种用于快速本地内存分配的结构,对特定模式进行了优化:
来自竞技场的
竞技场分配的一个典型用例是JIT编译。当JIT编译器工作时,它会分配许多小对象(例如IR图形节点)。这些对象仅由一个编译器线程在本地使用。这些临时对象的生存期很短:当方法的编译完成时,包含所有这些对象的整个竞技场立即被删除。
Arena由分配给常规malloc的大块组成。竞技场内部的分配是一个简单的指针增量。当竞技场耗尽空闲空间时,将创建一个新块。
在上面的NMT报告中,(arena=2MB #1)表示符号区域有一个包含一个2MB块的竞技场。
Arena Chunk部分总结了所有的活动竞技场。
https://stackoverflow.com/questions/72847871
复制相似问题