今天在看netty源码时候又再次遇到了DirectByteBuffer,关于DirectByteBuffer的内存回收机制,在netty框架中被封装的面目全非,但其回收机制也是万变不离其宗,下面这几篇简单易懂的文章就介绍了DirectByteBuffer的概念极其内存回收方式,在这里和大家分享一下:
关键的几行代码也黏贴在这,旨在加深印象
public static void sleep(long i) {
try {
Thread.sleep(i);
} catch (Exception e) {
}
}
@Test
public void testDirectByteBufferDeallocation() {
/**
DirectByteBuffer构造方法是包私有的,只能通过工具方法:
public static ByteBuffer allocateDirect(int capacity)生成对象
*/
ByteBuffer byteBuffer = ByteBuffer.allocateDirect(1024 * 1024 * 1024);
System.out.println(byteBuffer.isDirect());
sleep(1000 * 60);
System.out.println("start clean");
clean(byteBuffer);
System.out.println("end clean");
sleep(1000 * 60);
}
public static void clean(final ByteBuffer byteBuffer) {
if (byteBuffer.isDirect()) {
((DirectBuffer) byteBuffer).cleaner().clean();
}
}
lhever
.---.
| | . __.....__ .----. .----. __.....__
| | .'| .-'' '. \ \ / /.-'' '.
| |< | / .-''"'-. `. ' '. /' // .-''"'-. `. .-,.--.
| | | | / /________\ \| |' // /________\ \| .-. |
| | | | .'''-. | || || || || | | |
| | | |/.'''. \\ .-------------''. `' .'\ .-------------'| | | |
| | | / | | \ '-.____...---. \ / \ '-.____...---.| | '-
| | | | | | `. .' \ / `. .' | |
'---' | | | | `''-...... -' '----' `''-...... -' | |
| '. | '. |_|
'---' '---'