Jvm之DirectMemory(堆外内存)大揭秘

最近在读周志明老师所著《深入了解JVM虚拟机。。》一书,在谈到DirectMemory时,我产生了许多疑问,书中只是简单的提了它并不是JVM运行时数据区的一部分,所以我很费解。

因为据我所了解,一个进程运行在操作系统下,比如32位的操作系统,那么它的虚拟内存空间一定是4G,而进程用户空间一般只能用2G,包括JVM进程也是如此。

我带着这个疑问看了许多博客,查了许多资料,未果,只是看好多文章画了一个简单的内存图,标识出一片是堆内,一片是堆外,拜托,这还有画出来吗?谁没这点概念,完全没讲到问题的本质!

在纠结这个问题的时候,我灵光一闪,想到了学习内核时所接触到的虚拟内存空间的概念!!!

其实最终答案就是文件内存映射,C++程序员对此是相当的熟悉的,文件内存映射的原理其实就是在内核加载了其文件,这样就能直接通过引用或者指针来操作这份本不该属于自己用户空间的内存。

谈到这里,其书中的概念变的深刻清晰了,为什么说DirectMemory不在JVM运行时数据区呢?因为运行时数据期指的就是用户空间了,那么DirectMemory(堆外内存)其实就是放在操作系统内核中了。

这里先说到这,有时间我会研究一下JVM源码,证明这篇文章的正确性。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值