jcmd报告的“内部”中是否包含直接字节缓冲区?
(更新)
ByteBuffer.allocateDirect内部调用
Unsafe.allocateMemory,该调用由NMT在“内部”部分中
计数
(以
mtInternal常数表示)。
相反,MappedByteBuffers(由获取
FileChannel.map)没有反映在NMT报告中,尽管从操作系统的角度来看它们肯定会影响进程使用的内存量。
jcmd报告的“代码”中除代码缓存外还有什么?
维护已编译代码和生成的运行时存根的辅助VM结构:哈希表,代码字符串,适配器指纹等。与CodeCache本身相比,它们都很小。这些结构构成报告中的“
malloc”部分,而CodeCache进入“ mmap”部分。
是否有一种很好的方法来限制jcmd报告的“代码”部分。
关闭分层编译(
-XX:-TieredCompilation)可能会减少“代码”使用的内存量,只是因为生成的代码会少很多。但是请确保您了解什么是分层编译以及它可能会对性能产生什么影响。



