对外内存
堆外内存是相对于堆内内存的一个概念,堆内内存是由JVM所掌控的Java进程内存,我们平时在Java中创建的对象都处于堆内内存中,并且他们遵 循JVM的内存管理机制,JVM会采用垃圾回收机制统一管理它们的内存,那么堆外内存就是存在于JVM管控之外的一块内存区域,因此,它不直接虚拟机被管控。
直接内存
NIO的Buffer提供了一个可以不经过JVM内存直接访问系统物理内存的类——DirectBuffer。 DirectBuffer类继承自ByteBuffer,但和普通的ByteBuffer不同,普通的ByteBuffer仍在JVM堆上分配内存,其最大内存受到最大堆内存的限制;而DirectBuffer直接分配在物理内存中,并不占用堆空间,其可申请的最大内存受操作系统限制
直接内存的回收原理
使用了unsafe对象完成直接内存的分配回收,并且回收需要主动调用freememory方法。
bytebuffer的实现类的内部,使用了cleaner来检测bytebuffer对象,一旦bytebuffer对象被垃圾回收,那么就会由referencehandler线程通过cleaner的clean方法调用freemermory来释放直接内存
堆外内存是指不被JVM直接管理的内存区域,主要涉及DirectBuffer类,它允许程序直接在物理内存中分配空间,避免了JVM堆的内存限制。直接内存的分配和回收使用unsafe对象进行,需要手动调用freememory方法进行释放。当ByteBuffer对象被垃圾回收时,其对应的直接内存将通过cleaner机制进行清理。
1795

被折叠的 条评论
为什么被折叠?



