2018优就业人保合作
400-650-7353
首页 > IT培训教程 > 常见问题 > 什么是堆外内存?你知道吗?

什么是堆外内存?你知道吗?

2018-06-15 14:15:53 来源:互联网 手机端入口

什么是堆外内存?你知道吗?今天优就业来给大家科普一下。

Java 开发者一般都知道堆内存,但却未必了解堆外内存。事实上,除了堆内存,Java 还可以使用堆外内存,也称直接内存(Direct Memory)。

顾名思义,堆外内存是在 JVM Heap 之外分配的内存块,并不是 JVM 规范中定义的内存区域,堆外内存用得并不多,但十分重要。

什么是堆外内存?你知道吗?

读者也许会有一个疑问:既然已经有堆内存,为什么还要用堆外内存呢?这主要是因为堆外内存在 IO 操作方面的优势。

举一个例子:在通信中,将存在于堆内存中的数据 flush 到远程时,需要首先将堆内存中的数据拷贝到堆外内存中,然后再写入 Socket 中;

如果直接将数据存到堆外内存中就可以避免上述拷贝操作,提升性能。类似的例子还有读写文件。

目前,很多 NIO 框架 (如 netty,rpc) 会采用 Java 的 DirectByteBuffer 类来操作堆外内存,DirectByteBuffer 类对象本身位于 Java 内存模型的堆中,由 JVM 直接管控、操纵。

但是,DirectByteBuffer 中用于分配堆外内存的方法 unsafe.allocateMemory(size) 是个一个 native 方法,本质上是用 C 的 malloc 来进行分配的。

分配的内存是系统本地的内存,并不在 Java 的内存中,也不属于 JVM 管控范围,所以在 DirectByteBuffer 一定会存在某种特别的方式来操纵堆外内存。

优就业热门推荐:

【IT培训班】来这里,做不一样的程序员大牛

【Java培训班】跟着技术大神学技术

【Java培训教程】技术在手 高薪无忧

免责声明:本文来源于网络,由网友提供或网络搜集,仅供个人交流学习参考使用,不涉及商业盈利目的。如有版权问题,请联系本站管理员予以更改或删除。谢谢合作!

关键词: Java教程

相关推荐

 
 
咨询中心
优就业微信扫一扫
微信扫一扫

400-650-7353

加入官方微博