java能够经过java.nio.ByteBuffer.allocateDirect(capacity)直接运用non java heap(java堆外)的内存 。
一.运用意图:
1。拓荒数据缓冲区
2。能够打破jvm内存约束,操作更多的物理内存(不一样的jvm完成不一样,sun jvm会被约束,但能添加jvm能够操作的一倍内存,而jrockit基本上能够将物理内存悉数耗光)
二.运用难题:
经过ByteBuffer.allocateDirect()运用的内存不能够经过jvm关联内存东西:VisualVM等检查heap的内存占用,所以内存走漏也较难查找。
三. 测验如下:
Java代码
public class ByteBufferTest {
public static void main(String[] args) throws InterruptedException {
System.out.println(SystemRuntimeInfo.getMemoryInfo());
List list = new ArrayList();
for(int i = 0; i
list.add(ByteBuffer.allocateDirect(Integer.MAX_VALUE / 100)