JVM简单整理
基本概念
JVM指的是Java虚拟机,一般直接运行于操作系统之上,与硬件无直接交互。
结构布局图
堆内存结构
一般堆内存包含3个区,分别是新生区,养老区,永久区。新生区又分为伊甸区和幸存者1/2区,在jdk8后,永久区被修改成元空间。
其中里面的对象分配,首先是在伊甸区通过GC回收后,幸存下来的对象就被分配到幸存者1/2区,之后继续回收,幸存的对象再到养老区,这样一步一步下来。
堆内存调优
一般项目启动时,堆的内存默认分配为物理内存的1/64,可以通过代码去修改。
-Xms 初始分配堆内存
-Xmx 最大分配堆内存
其他的一些代码功能
-XX:+PrintGcDetails 打印GC回收明细
-XX:+HeapDumpOnOutOfMemoryError 在出现OOM异常时生成Dump分析
出现OOM异常时,也可以在Eclipse装MAT插件,通过hprof文件分析异常原因。