JVM堆外内存随笔

JVM堆外内存

   1)java与io(file,socket)的操作都需要堆外内存与jvm内存进行互相拷贝,因为操作系统是不懂jvm的内存结构的(jvm的内存结构是自管理的),所以堆外内存存放的是操作系统可以操作的内存地址模型,可以拷贝数据到内核的空间。

 2)netty等网络通信组件为了减少jvm的内存到内核数据拷贝,所以把与网络相关的数据可以存放到堆外内存,减少一次内存的拷贝。

 3)堆外内存是不属于jvm管理的,但是堆外内存是当前jvm进程空间,而不是有的网络上所说的内核空间,内核地址操作系统的地址空间,不会分配给应用的,它的地址空间与jni的空间应该是一致的。

4)堆外内存的回收问题可以自己调用clear释放,或者jvm fullgc的时候也会释放,但是在jvm中只有通过PhantomReference可以感知到当前的对象是否被释放。

posted on 2018-03-17 10:58  rainbow.zhang  阅读(290)  评论(2编辑  收藏  举报