今天看啥  ›  专栏  ›  占小狼的博客

JVM堆外内存如何被回收,你知道么?

占小狼的博客  · 公众号  ·  · 2018-01-26 08:05
占小狼 转载请注明原创出处,谢谢!堆外内存JVM启动时分配的内存,称为堆内存,与之相对的,在代码中还可以使用堆外内存,比如Netty,广泛使用了堆外内存,但是这部分的内存并不归JVM管理,GC算法并不会对它们进行回收,所以在使用堆外内存时,要格外小心,防止内存一直得不到释放,造成线上故障。堆外内存的申请和释放JDK的 ByteBuffer类提供了一个接口 allocateDirect(intcapacity)进行堆外内存的申请,底层通过 unsafe.allocateMemory(size)实现,接下去看看在JVM层面是如何实现的。可以发现,最底层是通过 malloc方法申请的,但是这块内存需要进行手动释放,JVM并不会进行回收,幸好 Unsafe提供了另一个接口 freeMemory可以对申请的堆外内存进行释放。堆外内存的回收机制如 ………………………………

原文地址:访问原文地址
快照地址: 访问文章快照