Java 内存管理

  • 内存分配区域
  • 新生域内存管理
  • 年老域内存管理
    • 世界暂停事件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进行处理,非常感谢!

上一篇 2016年10月18日
下一篇 2016年10月19日

相关推荐