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