jvm内存细颗粒的划分及含义

3 篇文章 0 订阅

JVM区域细颗粒度划分

《深入jvm虚拟机》一书中对jvm内存区域分为,堆,元空间,栈,直接内存,程序计数器。
而事实上,jvm空间中的划分远远比这个要细。大致如下图。
在这里插入图片描述
所以Java进程占用的最大内存为:
old+eden+survivor_from+survivor_to+string_constant_pool+code_cache+metaspace+thread_stack+direct+mapped+jvm+native_memory

各个区域的含义及作用

堆内存大家都很熟悉了,无非是,新生代,老年代,字符串常量池.
重点说一下堆外内存:
一.code cache

代码缓存区域,用于jvm 将java代码编译成本地代码所存放的区域。主要用于JIT(即时编译器)编译的本地代码的存放。
可以使用:
1.–XX:+ PrintCodeCache JVM 来查看占用详情
2.使用UseCodeCacheFlushing=true来控制该区域的刷新
3.使用ReservedCodeCacheSize 来控制该区域的大小,默认为48M

二.compressd class space
打开UseCompressedClassPointer 选项后,class中的指针也用32位版本,而这些指针指向的空间就是compressd class space。
主要为了解决在64位虚拟机下指针空间浪费造成cpu 处理减少的问题,故压缩指针为32位的指针。
可以使用:1.-XX:+UseCompressedOops 启用压缩的对象指针。
2.XX:+UseCompressedClassPointers 启用压缩的类指针。
两者默认都处于打开状态,但可以手动关闭。
如果关闭压缩类指针,则将没有压缩类空间,并且该-XX:CompressedClassSpaceSize开关将被忽略。
默认大小是1G,但可以通过“CompressedClassSpaceSize”调整。如果引用太多包,可能会导致:java.lang.OutOfMemoryError: Compressed class space
调大-XX:CompressedClassSpaceSize即可。

查看jvm各部分内存
使用命令行选项启动JVM :-XX:NativeMemoryTracking=summary
jcmd VM.native_memory summary
可以查看得到信息如下:

Native Memory Tracking:

Total: reserved=2527378KB, committed=1253966KB
-                 Java Heap (reserved=1048576KB, committed=1048576KB)
                            (mmap: reserved=1048576KB, committed=1048576KB)

-                     Class (reserved=1109934KB, committed=69806KB)
                            (classes #13386)
                            (malloc=1966KB #17931)
                            (mmap: reserved=1107968KB, committed=67840KB)

-                    Thread (reserved=38152KB, committed=38152KB)
                            (thread #38)
                            (stack: reserved=37988KB, committed=37988KB)
                            (malloc=120KB #189)
                            (arena=43KB #72)

-                      Code (reserved=253208KB, committed=19924KB)
                            (malloc=3608KB #6317)
                            (mmap: reserved=249600KB, committed=16316KB)

-                        GC (reserved=6279KB, committed=6279KB)
                            (malloc=2343KB #270)
                            (mmap: reserved=3936KB, committed=3936KB)

-                  Compiler (reserved=166KB, committed=166KB)
                            (malloc=35KB #663)
                            (arena=131KB #5)

-                  Internal (reserved=2529KB, committed=2529KB)
                            (malloc=2497KB #17700)
                            (mmap: reserved=32KB, committed=32KB)

-                    Symbol (reserved=16920KB, committed=16920KB)
                            (malloc=14387KB #139329)
                            (arena=2533KB #1)

-    Native Memory Tracking (reserved=2864KB, committed=2864KB)
                            (malloc=9KB #110)
                            (tracking overhead=2855KB)

-               Arena Chunk (reserved=690KB, committed=690KB)
                            (malloc=690KB)

-                   Unknown (reserved=48060KB, committed=48060KB)
                            (mmap: reserved=48060KB, committed=48060KB)

未完待续

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值