培训的时候,涉及到了jvm的内存结构,觉得自己有必要在这方面深入。今天花了3个小时看了看相关的内容。
本文转自
概念
Java的堆内存分为三部分
- 新生代(New Generation) – 新创建的对象(又分为S0,S1和Eden)
- 旧生代 (Old Generation) – 经过多次垃圾回收没有被回收的对象或者大对象
-
持久代 (Permanent Generation) – JVM使用的内存,包含类信息等
Java的垃圾回收分为两种
-
Minor GC
回收新生代中的对象,代价低,速度快
-
Full GC(公司内部邮件中的full gc的意思就是这个概念,不能太多,因为full gc会造成耗时厂,会产生应用程序暂停这个很不爽的地方)
回收旧生代和持久代中的对象,代价高,速度慢
配置
通过指定Java命令行参数可以改变内存和垃圾回收的行为。最常见的有
-Xmx1024m: 指定最大的堆大小为1024m
-Xms1024m: 指定初始化堆大小为1024m,设为跟最大的堆大小,可避免JVM动态调整
-XX:NewRatio=3: 指定新生代和旧生代的比例为1:3,比例越大,新生代越小,Minor GC调用越频繁,Full GC调用越不频繁。
-verbose:gc : 在控制台打印GC信息
-XX:+PrintGCDetails:显示更详细的GC信息
-Xloggc:gc.log :输出gc LOG到文件
另外java visul VM和visual gc很重要。