[b]java堆[/b]
包括
新生代:eden,survival(from),survival(to)
老年代:
[b]java方法区[/b]
Hot Spot JVM里方法区就是永久代
[b]Direct Memory[/b]
可以通过 -XX:MaxDirectMemorySize调整大小
用法
[b]线程堆栈[/b]
可以通过-Xss调整,内存不足时抛出StackOverFlowError(纵向无法分配,即:无法分配新的栈帧)或OutofMemoryError:unable to create new native thread(横向无法分配,即无法建立新的线程)
[b]socket缓存区[/b]
每个socket链接都有Receive和Send两个缓存区,分别占大约37KB和25KB的内存。链接多的话,这块内存占用也比较可观。如果无法分配,则可能会抛出IOException:Too many open files异常。
[b]JNI代码[/b]
如果代码中使用JNI调用本地库,本地库使用的内存也不在堆中。
[b]虚拟机和GC[/b]
虚拟机本身和GC的代码执行也要消耗一些内存。
包括
新生代:eden,survival(from),survival(to)
老年代:
[b]java方法区[/b]
Hot Spot JVM里方法区就是永久代
[b]Direct Memory[/b]
可以通过 -XX:MaxDirectMemorySize调整大小
用法
Field unsafeField = sun.misc.Unsafe.class.getDeclaredFields()[0];
unsafeField.setAccessible(true);
sun.misc.Unsafe unsafe = (sun.misc.Unsafe) unsafeField.get(null);
unsafe.allocateMemory(1024 * 1024);
[b]线程堆栈[/b]
可以通过-Xss调整,内存不足时抛出StackOverFlowError(纵向无法分配,即:无法分配新的栈帧)或OutofMemoryError:unable to create new native thread(横向无法分配,即无法建立新的线程)
[b]socket缓存区[/b]
每个socket链接都有Receive和Send两个缓存区,分别占大约37KB和25KB的内存。链接多的话,这块内存占用也比较可观。如果无法分配,则可能会抛出IOException:Too many open files异常。
[b]JNI代码[/b]
如果代码中使用JNI调用本地库,本地库使用的内存也不在堆中。
[b]虚拟机和GC[/b]
虚拟机本身和GC的代码执行也要消耗一些内存。