JVM内存分析系列(十三)内存实践理解

java堆
包括
新生代:eden,survival(from),survival(to)
老年代:

java方法区
Hot Spot JVM里方法区就是永久代

Direct Memory
可以通过 -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);


线程堆栈
可以通过-Xss调整,内存不足时抛出StackOverFlowError(纵向无法分配,即:无法分配新的栈帧)或OutofMemoryError:unable to create new native thread(横向无法分配,即无法建立新的线程)

socket缓存区
每个socket链接都有Receive和Send两个缓存区,分别占大约37KB和25KB的内存。链接多的话,这块内存占用也比较可观。如果无法分配,则可能会抛出IOException:Too many open files异常。

JNI代码
如果代码中使用JNI调用本地库,本地库使用的内存也不在堆中。

虚拟机和GC
虚拟机本身和GC的代码执行也要消耗一些内存。

猜你喜欢

转载自phl.iteye.com/blog/2008041
今日推荐