日期:2014-05-20  浏览次数:20648 次

Java面试问题之五十四
问题:请问在Java中本地直接内存(Direct Memory)和堆内存(Java Heap)之间有何关系与区别,并尝试分析一下直接内存有什么作用。


答:根据Java虚拟机规范,堆内存(Heap Memory)和直接内存(Direct Memory)是Java虚拟机中两种基本的内存空间类型。堆内存是一个标准内存池,用于存放绝大多数对象的实例;直接内存则是一块由程序本身管理的一块内存空间,它的效率要比标准内存池要高,主要用于存放网络通信时数据缓冲和磁盘数据交换时的数据缓冲。   

DirectMemory容量可以通过 -XX:MaxDirectMemorySize指定,如果不指定,则默认为与Java堆的最大值(-Xmx指定)一样。但是,在OSX上的最新版本的JVM,对直接内存的默认大小进行修订,改为“在不指定直接内存大小的时默认分配的直接内存大小为64MB”,可以通过-XX:MaxMemorySize来显示指定直接内存的大小。