- 内存分配区域
- 新生域内存管理
- 年老域内存管理
- 世界暂停事件Stop the World Event
- 持久域Permanent Generation
- 方法域Method Area
- 内存池Memory Pool
- 运行时常量池 Runtime Constant Pool
- 栈内存Stack Memory
- 堆内存调节器Heap Memory Switches
- 垃圾回收器
- GC类型
- GC监测
- jstat命令行监测内存
- jvisualvm可视化监测
- 内存和GC调整
- 参考链接
弄清JVM(Java Virtual Machine)的内存管理模型对了解java GC工作原理是很有必要的。最近正好看到一篇文档写的不错,介绍了Java内存管理的处理方式,包括JVM内存分配各个区域的含义,以及如何监测协调GC工作。翻译后在此记录。
原文传送门
内存分配区域
jstat命令行监测内存
JDK提供了jstat命令用了监测JVM内存使用情况以及GC运行状态。
其使用规则如下:
jstat -gc
进程id可以通过ps命令查看到
192:~/Documents/eclipse_workspace/DemoTestJava $ ps -eaf | grep java
501 2538 1956 0 11:41下午 ttys000 0:02.50 /usr/bin/java -Xmx20m -Xms10m -Xmn3m -XX:PermSize=2m -XX:MaxPermSize=4m -XX:+UseSerialGC -cp bin/ com.azhengye.test.Test
501 2540 1613 0 11:41下午 ttys001 0:00.00 grep java
有了进程 ,在用jstat命令查看详细的内存使用情况,每隔1s打印一次内存情况。
jstat -gc 2538 1s
内存和GC调整
这一步轻易不要走,程序运行的优化更多的注意了应该放在软件实现上。除非很明显的定位到程序运行受到了GC的拖累,或者确实需要调整内存的分配情况才能让程序运行起来最佳。
下面是几点调整建议:
- 主线GC运行太过频繁,可以尝试增大年老域内存。
- OOM问题,可以适当增加堆内存大小。
- 采用不同的GC策略,监测程序运行情况,选取最合适的。
参考链接
了解CMS(Concurrent Mark-Sweep)垃圾回收器
Java 8新特性探究(9):跟OOM:Permgen说再见吧
Java8 Demos and Samples
文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92564 人正在系统学习中
声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!