sol*_*4me 19
metaspace还是Native Memory吗?
是的,Metaspace是Native Memory(进程内存)的一部分,受主机操作系统的限制
您可以使用它进行监控jmap -permstat PID.如果您的应用程序最终在元空间中分配大量内存,那么它将影响整个系统而不仅仅是JVM.这就是为什么它建议您使用-XX:MetaspaceSize显式设置应用程序的最大元空间大小
Java NIO API使用ByteBuffers作为I/O调用的源和目标,有两种形式:
- Heap Byte Buffer(包装一个byte []数组,在垃圾收集的Java堆中分配)
- 直接字节缓冲区(在Java堆外部分配的包装内存)
由于只有"本机"内存可以传递给操作系统调用,所以它不会被垃圾收集器移动,这意味着当你使用堆ByteBuffer进行I/O时,它会被复制到临时的直接ByteBuffer中.JDK为每个线程缓存一个临时缓冲区,没有任何内存限制(即无限制的缓存).因此,如果从多个线程调用具有大堆ByteBuffers的I/O方法,则您的进程可以使用大量额外的本机内存.
更新
RSS = OffHeap(映射文件,JVM内部代码(.bss段),线程堆栈,直接缓冲区)+ GC内部结构+堆+本地库使用和分配的结构(例如IO库)+ Metaspace + JVM + CodeCache的共享库
您可以在linux pmap -x上使用它来分析JVM进程的内存映射.此外,通过设置适当的MALLOC_CONF env变量,Jemalloc可以帮助在每个x GB/x kB内存分配/堆栈跟踪之后将配置文件写入磁盘.生成文件后,尝试使用Jeprof进行可视化.例如
jeprof --show_bytes --pdf `which w` jeprof.heap > sample.pdf
Run Code Online (Sandbox Code Playgroud)
为调用图生成PDF.
| 归档时间: |
|
| 查看次数: |
3759 次 |
| 最近记录: |