-XX:+PrintGC
-XX:+PrintGCDetails
-XX:+PrintGCTimeStamps
-Xloggc:${LOG_DIR}/${APP_NAME}/GC_${APP_NAME}.log
配置参数 | 功能 |
---|---|
-Xms | 初始堆大小。如:-Xms512m |
-Xmx | 最大堆大小。如:-Xmx512m 堆中包括年轻代,老年代 初始化与最大只好保持一样 |
-Xmn | 年轻代大小。 (老年代 = 最大堆 - 年轻代) |
-XX:OldSize | 指定老年代大小 (也可以这样设置 老年代 = 最大堆 - 年轻代) |
-XX:NewRatio | 新生代老年代的比例,如 –XX:NewRatio=2,则年轻代整个堆空间的1/3,老年代占2/3 1:2 |
-XX:SurvivorRatio | 新生代中 Eden 与 Survivor 的比值。默认值为 8。即 Eden 占新生代空间的 8/10,另外两个 Survivor 各占 1/10 |
-XX:PermSize | 永久代(方法区)的初始大小 |
-XX:MaxPermSize | 永久代(方法区)的最大值 |
-XX:+PrintGCDetails | 打印 GC 信息 |
-XX:+HeapDumpOnOutOfMemoryError | 让虚拟机在发生内存溢出时 Dump 出当前的内存堆转储快照,以便分析用 |
-XX:MaxTenurinaThreHold | 新生代对象进入老年代的年龄设置,默认15 |
达到一定内存会触发GC
GC算法
复制整理算法(需要余出一片空间去存对象,回收之后堆内存空间连续)
标记算法(效率高,回收之后堆内存不连续,导致新的较大对象无法存入老年代,导致Full GC)
标记压缩(相当于标记算法回收资源之后,并将回收的不连续的空间压缩成整体,解决内存碎片问题,使内存空间连续)
新生代GC异常,有稍微大一点的对象在创建的时候,Eden没有足够的空间去存放这个对象,即内存未保证连续异常
新生代转移老年代,jvm都会去检查晋升到老年代的对象是否大于老年代剩余空间,如果大于老年代剩余空间 发生Full GC
老年代GC异常 Major GC
栈异常
栈溢出stackOverFlow(递归容易发生,影响比较严重,会让服务器变得卡)
方法区 永久代(公有,保存永久,例如类class,等于符号,感叹符号,方法信息,final修饰的值等)
堆 年轻代与老年代(线程私有,内容非常多,文章开头已经列出)
虚拟机栈 (保存局部变量)
垃圾收集器 (执行GC回收是有垃圾回收器执行的) GC特点 stop the world 即 停顿 合理利用收集器,减少停顿
串行回收器 -XX:UseSerialGC (单线程回收,设计是尽可能减少卡顿的时间)
并行回收器 -XX:UserParallerGC (多线程回收,设计是尽可能减少卡顿的时间,要求内存大于2G,可用的cpu大于2)