环境:JDK8
软件:idea2019
准备:设置测试类的堆内存VM options:-Xms20m -Xmx20m
名词解析:
ManagementFactory:是一个提供各种获取JVM信息的工厂类,使用ManagementFactory可以获取大量的运行时JVM信息,比如JVM堆的使用情况,以及GC情况,线程信息等,通过这些数据项可以了解正在运行的JVM的情况,以便做出相应的调整。
ManagementFactory.getMemoryPoolMXBeans()
Code Cache:(非堆),JVM生成的native code存放的内存空间。
metaspace:元空间(非堆),存储jvm中的元数据,包括byte code,class等信息。
Compressed Class Space:压缩类空间(非堆),实际是压缩的指针,目的是为了在 64bit 机器上使用 32bit 的原始对象指针,详细用法自行搜索。
PS Eden Space:伊甸区(堆内存)
PS Survivor Space:幸存区(堆内存)
PS Old Gen:老年区(堆内存)
对象内存的分配时机
现象一:两次输出Egen区内存一致,所以在运行时小于Egen区剩余空间的对象就已经分配好了内存?
现象二:两次输出Egen区内存一致,但是OldGen区增加了大约4MB,正好是allocation5的大小,所以大于Egen区剩余空间的对象是在运行时才给分配的内存?
小于Egen区剩余空间的对象,内存分配在Egen区;
大于Egen区剩余空间的对象,内存直接分配在OldGen区;
未完待续。。。



