首页  

堆外内存使用实例     所属分类 java 浏览量 1485
堆外内存2种使用方式
使用Unsafe ,需要自己释放
使用 NIO ByteBuffe ,依赖full gc 回收

Unsafe unsafe = null;
		try{
			unsafe = Unsafe.getUnsafe();
		}catch(Throwable e){
			System.out.println("getUnsafe error,"+e);
		}
		// 反射获取
		Field f = Unsafe.class.getDeclaredField("theUnsafe");
        f.setAccessible(true);
        unsafe = (Unsafe) f.get(null);
 
long address = unsafe.allocateMemory(1024);
unsafe.putInt(address, 7);
unsafe.putInt(address+4, 8);
System.out.println(unsafe.getInt(address)); 
unsafe.freeMemory(address);



ByteBuffer buffer = ByteBuffer.allocateDirect(1024);
buffer.putChar('a');
buffer.putInt(3);
buffer.getInt();


完整代码

https://gitee.com/dyyx/hellocode/blob/master/src/dyyx/test/UnsafeTest.java

https://gitee.com/dyyx/hellocode/blob/master/src/dyyx/test/DirectBufferTest.java

        

参考资料 unsafe要点 DirectByteBuffer申请与释放 java堆外内存回收机制 netty线程模型和零拷贝机制 NIO JMX BufferPool内存监控

上一篇     下一篇
sql优化建议

jvm codecache 相关整理

JVM MemoryUsage中init,committed,used,max说明

redis优化要点

devops简介及工具链

jenkins简介