堆外内存
前传
查看GC参数
-verbose:gc -XX:HeapDumpPath=. -Xloggc:gc.log -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCDateStamps -XX:+UseGCLogFileRotation -XX:+DisableExplicitGC -XX:+PrintTenuringDistribution
堆外内存
Direct Memory
堆内存有JVM自己管理,而堆外内存只有 full gc触发时才会被GC,所以我们需要手动做适当的内存回收工作。
回收机制
受GC控制
DirectByteBuffer
代码实例
public class NonHeapTest {
public static void clean(final ByteBuffer byteBuffer) {
if (byteBuffer.isDirect()) {
((DirectBuffer)byteBuffer).cleaner().clean();
}
}
public static void sleep(long i) {
try {
Thread.sleep(i);
}catch(Exception e) {
/*skip*/
}
}
public static void main(String []args) throws Exception {
ByteBuffer buffer = ByteBuffer.allocateDirect(1024 * 1024 * 200);
System.out.println("start");
sleep(5000);
clean(buffer);//执行垃圾回收
// System.gc();//执行Full gc进行垃圾回收
System.out.println("end");
sleep(5000);
}
}
****
Last updated
Was this helpful?