拷贝/清理阶段
年轻代与老年代同时回收.
老年代内存回收会基于他的活跃度信息.
G1收集器相对于CMS收集器的优点
G1在压缩空间方面有优势
G1通过将内存空间分成区域(Region)的方式避免内存碎片问题
Eden, Survivor, Old区不再固定、在内存使用效率上来说更灵活
G1可以通过设置预期停顿时间(Pause Time)来控制垃圾收集时间避免应
用雪崩现象
G1在回收内存后会马上同时做合并空闲内存的工作、而CMS默认是在
STW(stop the world)的时候做
G1会在Young GC中使用、而CMS只能在O区使用
jvm小工具
jps 打印Hotspot VM进程 VMID、JVM参数、main()函数参数、主类
名/Jar路径
jstat 查看Hotspot VM 运行时信息 类加载、内存、GC[可分代查看]、JIT编译
jinfo 查看和修改虚拟机各项配置
jmap heapdump: 生成VM堆转储快照、查询finalize执行队列、Java堆和永久代详细
信息
jstack 查看VM当前时刻的线程快照: 当前VM内每一条线程正在执行的方法堆栈集合
javap 查看经javac之后产生的JVM字节码代码
jcmd 一个多功能工具, 可以用来导出堆, 查看Java进程、导出线程信息、 执行
GC、查看性能相关数据等
jconsole 可以查看内存、线程、类、CPU信息, 以及对JMX MBean进行管理
jvisualvm 可以监控内存泄露、跟踪垃圾回收、执行时内存分析、CPU分析、线程分
析…
java.lang.StackOverflowError
递归调用,容易导致栈溢出
java.lang.OutOfMemoryError:Java heap space
堆空间不足导致Java heap spacke
java.lang.OutOfMemoryError:Direct buffer memory
nio磁盘不足导致direct buffer memory
java.lang.OutOfMemoryError:GC overhead limit exceeded
频繁垃圾回收,却没有释放空间,导致Gc overhead limit execpte