JVM 1.6 GC
JVM调优是一门艺术。

JVM调优的重点是减少Major GC的次数,因为Major GC会暂停程序比较长的时间。如果Major GC的次数比较多,意味着应用程序的JVM内存参数需要调整。
JVM内存分配策略
1 对象优先分配在Eden区
2 大对象直接进入年老代
如何监视GC
1.概览监视gc。
jmap -heap [pid] 查看内存分布
jstat -gcutil [pid] 1000 每隔1s输出java进程的gc情况
2.详细监视gc。
在jvm启动参数,加入-verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:./gc.log。
输入示例:
[GC [ParNew: 11450951K->1014116K(11673600K), 0.8698830 secs] 27569972K->17943420K(37614976K), 0.8699520 secs] [Times: user=11.28 sys=0.82, real=0.86 secs]
表示发生一次minor GC,ParNew是新生代的gc算法,11450951K表示eden区的存活对象的内存总和,1014116K表示回收后的存活对象的内存总和,11673600K是整个eden区的内存总和。0.8699520 secs表示minor gc花费的时间。
27569972K表示整个heap区的存活对象总和,17943420K表示回收后整个heap区的存活对象总和,37614976K表示整个heap区的内存总和。
[Full GC [Tenured: 27569972K->16569972K(27569972K), 180.2368177 secs] 36614976K->27569972K(37614976K), [Perm : 28671K->28635K(28672K)], 0.2371537 secs]
表示发生了一次Full GC,整个JVM都停顿了180多秒,输出说明同上。只是Tenured: 27569972K->16569972K(27569972K)表示的是old区,而上面是eden区。
-XX:NewRatio
设置Young与Old的大小比例,-server时默认为1:2,如果太小,会使大对象直接分配到old去,增大major collections的执行次数。
-XX:SurvivorRatio
设置Eden与Survivor的比例,默认为8:1,Survivio大了会浪费,如果小了的话,会使一些大对象在做minor gc时,直接从eden区到达old区,让old区的gc频繁,这个参数保持默认就好了,一般情况下,对性能影响不大。
随便写个代码oom下,就都了解了。
Java HotSpot(TM) Client VM (25.45-b02) for windows-x86 JRE (1.8.0_45-b14), built on Apr 10 2015 10:46:40 by "java_re" with MS VC++ 10.0 (VS2010)
Memory: 4k page, physical 8294668k(3869072k free), swap 9605388k(1961212k free)
CommandLine flags: -XX:InitialHeapSize=16777216 -XX:MaxHeapSize=62914560 -XX:+PrintGC -XX:+PrintGCDetails -XX:+PrintGCTimeStamps -XX:-UseLargePagesIndividualAllocation
0.157: [GC (Allocation Failure) 0.157: [DefNew: 1431K->512K(4928K), 0.0023910 secs]0.159: [Tenured: 176K->687K(10944K), 0.0024891 secs] 1431K->687K(15872K), [Metaspace: 118K->118K(4480K)], 0.0051050 secs] [Times: user=0.03 sys=0.00, real=0.00 secs]
0.162: [Full GC (Allocation Failure) 0.162: [Tenured: 687K->666K(40960K), 0.0023773 secs] 687K->666K(45952K), [Metaspace: 118K->118K(4480K)], 0.0026923 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
Heap
def new generation total 18432K, used 765K [0x04e00000, 0x06200000, 0x06200000)
eden space 16384K, 4% used [0x04e00000, 0x04ebf450, 0x05e00000)
from space 2048K, 0% used [0x05e00000, 0x05e00000, 0x06000000)
to space 2048K, 0% used [0x06000000, 0x06000000, 0x06200000)
tenured generation total 40960K, used 666K [0x06200000, 0x08a00000, 0x08a00000)
the space 40960K, 1% used [0x06200000, 0x062a68e8, 0x062a6a00, 0x08a00000)
Metaspace used 120K, capacity 2248K, committed 2368K, reserved 4480K
强引用,不进行垃圾回收。
软引用,在内存紧张的时候回收。
弱引用,只能生存到下次垃圾收集时候。
虚引用,垃圾收集时候会收到系统通知。
参考
http://www.cnblogs.com/ggjucheng/p/3977384.html
JVM 1.6 GC的更多相关文章
- JVM内存管理------GC算法精解(五分钟教你终极算法---分代搜集算法)
引言 何为终极算法? 其实就是现在的JVM采用的算法,并非真正的终极.说不定若干年以后,还会有新的终极算法,而且几乎是一定会有,因为LZ相信高人们的能力. 那么分代搜集算法是怎么处理GC的呢? 对象分 ...
- JVM内存管理------GC简介
为何要了解GC策略与原理? 原因在上一章其实已经有所触及,就是因为在平时的工作和研究当中,不可避免的会遇到内存溢出与内存泄露的问题.如果对GC策略与原理不了解的情况下碰到了前面所说的问题,很多时候会让 ...
- JVM系列二:GC策略&内存申请、对象衰老
JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类 现在比较常用的是分代收集(generatio ...
- JVM学习之GC常用算法
出处:博客园左潇龙的技术博客--http://www.cnblogs.com/zuoxiaolong,多谢分享 GC策略解决了哪些问题? 既然是要进行自动GC,那必然会有相应的策略,而这些策略解决了哪 ...
- jvm系列:Java GC 分析
Java GC就是JVM记录仪,书画了JVM各个分区的表演. 什么是 Java GC Java GC(Garbage Collection,垃圾收集,垃圾回收)机制,是Java与C++/C的主要区别之 ...
- JVM基础系列第14讲:JVM参数之GC日志配置
说到 Java 虚拟机,不得不提的就是 Java 虚拟机的 GC(Garbage Collection)日志.而对于 GC 日志,我们不仅要学会看懂,而且要学会如何设置对应的 GC 日志参数.今天就让 ...
- 【转载】JVM系列二:GC策略&内存申请、对象衰老
JVM里的GC(Garbage Collection)的算法有很多种,如标记清除收集器,压缩收集器,分代收集器等等,详见HotSpot VM GC 的种类 现在比较常用的是分代收集(generatio ...
- 触发JVM进行Full GC的情况及应对策略
堆内存划分为 Eden.Survivor 和 Tenured/Old 空间,如下图所示: 从年轻代空间(包括 Eden 和 Survivor 区域)回收内存被称为 Minor GC,对老年代GC称为M ...
- JVM架构和GC垃圾回收机制
深入理解系列之JDK8下JVM虚拟机(1)——JVM内存组成 https://blog.csdn.net/u011552404/article/details/80306316 JVM架构和GC垃圾回 ...
- java面试题之----JVM架构和GC垃圾回收机制详解
JVM架构和GC垃圾回收机制详解 jvm,jre,jdk三者之间的关系 JRE (Java Run Environment):JRE包含了java底层的类库,该类库是由c/c++编写实现的 JDK ( ...
随机推荐
- UI: 标题栏
TitleBarDemo.xaml <Page x:Class="Windows10.UI.TitleBarDemo" xmlns="http://schemas. ...
- 线性回归 Linear Regression
成本函数(cost function)也叫损失函数(loss function),用来定义模型与观测值的误差.模型预测的价格与训练集数据的差异称为残差(residuals)或训练误差(test err ...
- 【Codeforces720D】Slalom 线段树 + 扫描线 (优化DP)
D. Slalom time limit per test:2 seconds memory limit per test:256 megabytes input:standard input out ...
- Hbase集群master.HMasterCommandLine: Master exiting
2016-12-15 17:01:57,473 INFO [main] impl.MetricsSystemImpl: HBase metrics system started 2016-12-15 ...
- 【poj1694】 An Old Stone Game
http://poj.org/problem?id=1694 (题目链接) 题意 一棵树,现在往上面放石子.对于一个节点x,只有当它的直接儿子都放满石子时,才能将它直接儿子中的一个石子放置x上,并回收 ...
- wpf *和auto的区别
Auto 表示自动适应显示内容的宽度, 如自动适应文本的宽度,文本有多长,控件就显示多长. * 则表示按比例来分配宽度. <ColumnDefinition Width="3*&quo ...
- USB Keyboard Recorder
catalogue . 引言 . Device Class Definition for Human Interface Devices (HID) . USB HID Report Descript ...
- 【原创】风讯DotNetCMS V1.0~V2.0 SQL注入漏洞
文章作者:rebeyond 注:文章首发I.S.T.O信息安全团队,后由原创作者友情提交到乌云-漏洞报告平台.I.S.T.O版权所有,转载需注明作者. 受影响版本:貌似都受影响. 漏洞文件:use ...
- cnblog中添加数学公式支持
在博客中使用数学公式,是一件相对麻烦的事儿,大量的截图和插入图片不仅耗费极大的精力,而且影响写作体验. 虽然对于公式显示已经有多种解决办法,但大多数需要安装插件.而MathML这一雄心勃勃的网页数学语 ...
- 1 web.xml配置详解
<?xml version="1.0" encoding="UTF-8"?> <web-app xmlns:xsi="http:// ...