因为Jvm无法管理堆外内存,所以如何回收呢?
首先是堆外内存如何申请的呢?
通过unsafe中的allocateMomory方法,参数为size(申请的堆外内存大小),并返回内存地址base;
清除时,创建Cleaner对象,调用Cleaner.creat(this(当前堆外内存Buffer),内存释放器。)
内存释放器Deallocator 的底层是有个run方法,调用unsafe.freeMemory去释放空间
Java堆外内存管理与释放
本文探讨了Java中如何通过Unsafe类申请堆外内存,并使用Cleaner进行清理。堆外内存通过unsafe.allocateMemory(size)分配,释放则借助于Cleaner创建的Deallocator,其底层调用unsafe.freeMemory进行释放。
因为Jvm无法管理堆外内存,所以如何回收呢?
首先是堆外内存如何申请的呢?
通过unsafe中的allocateMomory方法,参数为size(申请的堆外内存大小),并返回内存地址base;
清除时,创建Cleaner对象,调用Cleaner.creat(this(当前堆外内存Buffer),内存释放器。)
内存释放器Deallocator 的底层是有个run方法,调用unsafe.freeMemory去释放空间
1万+
5451

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