java堆外内存

来源:互联网 发布:三明治板的刚度矩阵 编辑:程序博客网 时间:2024/06/03 21:22

除了Java堆和永久代之外,下面这些也会占用较多内存,这些所有的内存总和受到操作系统进程最大内存的限制。
a.Direct Memory:可通过-XX:MaxDirectMemorySize调整大小,内存不足时抛出OutOfMemoryError或者OutofMemoryError:Direct buffer memory
b.线程堆栈:可通过-Xss调整大小,内存不足时抛出StackOverFlowError(纵向无法分配,即无法分配新的zhanzhen,或者OutOfmemoryError:unable to create new native thread(横向无法分配,即无法建立新的线程))。
c.Socket缓存区:每个Socket连接都Receive和send两个缓冲区,分别占用大约37kb和25kb内存,连接多的话这块内存占用也很大。如果无法分配,则可能抛出IoException:Too many open files异常;
d.JNI代码:如果代码中使用JNI调用本地库,那本地库使用的内存也不在堆中;
e.虚拟机和GC:虚拟机、GC的代码执行也是要消耗一定的内存;
参考《深入理解java虚拟机》

0 0