- 浏览: 801027 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
yuhanwm910731:
我现在需要实现复选(非级联选择)的树形下拉菜单,麻烦发给我一份 ...
extjs3.X支持树型的下拉控件 -
shine1200:
“所以咱们现在设置的虚拟路径“/message/upload/ ...
weblogic虚拟路径的配置和使用(2) -
icefireforest:
Fangrn 写道jx_dream 写道楼主,我最近在做树形下 ...
extjs3.X支持树型的下拉控件 -
cloudfile:
谢谢分享!
c++库c#调用开发时需要注意的一点 -
xuweilinbegin:
我也要一份哦:xuweilin15353@163.com,谢谢 ...
extjs3.X支持树型的下拉控件
GC 策略在 G1 还没成熟的情况下,目前主要有串行、并行和并发三种,对于大内存的应用而言,串行的性能太低,因此使用到的主要是并行和并发两种,具体这两种 GC 的策略在深入 JVM 章节中已讲解, 并行和并发 GC 的策略通过 -XX:+UseParallelGC 和 -XX:+UseConcMarkSweepGC 来指定,还有一些细节的配置参数用来配置策略的执行方式,例如: -XX:ParallelGCThreads 、 -XX:CMSInitiatingOccupancyFraction 等,新生代对象回收只可选择并行,在此就举例来看看两种 GC 策略在 Full GC 时的具体表现状况。
测试 GC 策略状况的代码如下:
/**
*
@param
args
*/
public
static
void
main(String[] args)
throws
Exception{
System.out.println(
"
ready to start
"
);
Thread.sleep(
10000
);
List
<
GCPolicyDataObject
>
cacheObjects
=
new
ArrayList
<
GCPolicyDataObject
>
();
for
(
int
i
=
0
; i
<
2048
; i
++
) {
cacheObjects.add(
new
GCPolicyDataObject(
100
));
}
System.gc();
Thread.sleep(
1000
);
for
(
int
i
=
0
; i
<
10
; i
++
) {
System.out.println(
"
Round:
"
+
(i
+
1
));
for
(
int
j
=
0
; j
<
5
; j
++
) {
System.out.println(
"
put 64M objects
"
);
List
<
GCPolicyDataObject
>
tmpObjects
=
new
ArrayList
<
GCPolicyDataObject
>
();
for
(
int
m
=
0
; m
<
1024
; m
++
) {
tmpObjects.add(
new
GCPolicyDataObject(
64
));
}
tmpObjects
=
null
;
}
}
cacheObjects.size();
cacheObjects
=
null
;
}
}
class
GCPolicyDataObject{
byte
[] bytes
=
null
;
GCPolicyRefObject object
=
null
;
public
GCPolicyDataObject(
int
factor){
bytes
=
new
byte
[factor
*
1024
];
object
=
new
GCPolicyRefObject();
}
}
class
GCPolicyRefObject{
GCPolicyRefChildObject object;
public
GCPolicyRefObject(){
object
=
new
GCPolicyRefChildObject();
}
}
class
GCPolicyRefChildObject{
public
GCPolicyRefChildObject(){
;
}
}
以 -Xms680M -Xmx680M -Xmn80M -XX:+UseConcMarkSweepGC -XX:+PrintGCApplicationStoppedTime -XX:+UseCMSCompactAtFullCollection -XX:+UseParNewGC -XX:CMSMaxAbortablePrecleanTime=5 参数执行以上代码,通过 jstat 观察到的 GC 状况如下:
共触发 39 次 minor GC ,耗时为 1.197 秒,共触发 21 次 Full GC ,耗时为 0.136 秒, GC 总耗时为 1.333 秒。
GC 动作造成应用暂停的时间为: 1.74 秒。
以 -Xms680M -Xmx680M -Xmn80M -XX:+PrintGCApplicationStoppedTime –XX:+UseParallelGC 参数执行以上代码,通过 jstat 观察到的 GC 状况如下:
共触发 119 次 minor GC ,耗时为 2.774 秒,共触发 8 次 Full GC ,耗时为 0.243 秒, GC 总耗时为 3.016 秒。
GC 动作造成应用暂停的时间为: 3.11 秒。
从上面的结果来看,由于 CMS GC 多数动作是和应用并发做的,采用 CMS GC 确实可以减小 GC 动作给应用造成的暂停,但也正因为是并发进行的,因此 CMS GC 需要耗费更多的 CPU ,因此对于 CPU 密集型应用而言, CMS 不一定是好的选择。
在采用 CMS GC 的情况下,尤其要注意的是 concurrent mode failure 的现象,这可以通过 -XX:+PrintGCDetails 来观察,当出现 concurrent mode failure 的现象时,就意味着此时 JVM 将继续采用 Stop-The-World 的方式来进行 Full GC ,这种情况下,采用 CMS 就没什么意义了,造成 concurrent mode failure 的原因主要是当 minor GC 进行时,旧生代所剩下的空间小于 Eden 区域 +From 区域的空间,要避免这种现象,可以采用以下三种方法:
l 调低触发 CMS GC 执行的阀值
CMS GC 触发主要由 CMSInitiatingOccupancyFraction 值决定,默认情况是当旧生代已用空间为 68% 时,即触发 CMS GC 。
在出现 concurrent mode failure 的情况下,可考虑调小这个值,提前 CMS GC 的触发,以保证旧生代有足够的空间。
l 扩大旧生代空间
调小新生代占用的空间或增大整个 JVM Heap 的空间可扩大旧生代空间,这对于避免 concurrent mode failure 现象可以提供很大的帮助。
l 调小 CMSMaxAbortablePrecleanTime 的值
CMS GC 需要经过较多步骤才能完成一次 GC 的动作,在 minor GC 较为频繁的情况下,很有可能造成 CMS GC 尚未完成,从而造成 concurrent mode failure ,这种情况下,减少 minor GC 触发的频率是一种方法,另外一种方法则是加快 CMS GC 执行时间,在 CMS 的整个步骤中, JDK 5.0+ 、 6.0+ 的有些版本在 CMS-concurrent-abortable-preclean-start 和 CMS-concurrent-abortable-preclean 这两步间有可能会耗费很长的时间,导致可回收的旧生代的对象很长时间后才被回收,这是 Sun JDK CMS GC 的一个 bug[1] ,如通过 PrintGCDetails 观察到这两步之间耗费了较长的时间,可以通过 -XX: CMSMaxAbortablePrecleanTime 设置较小的值,以保证 CMS GC 尽快完成对象的回收,避免 concurrent mode failure 的现象。
发表评论
-
提供IT系统运维支持、系统优化方案
2012-10-26 14:46 6提供IT系统运维支持、系统优化方案,有多个运维实施经验。 ... -
Java指定编码读写文件(UTF-8)
2010-11-30 14:00 3107有时我们需要程序动态生成jsp文件,采取系统默认的编码操作的文 ... -
was6.0发布struts2项目异常
2010-11-18 18:39 1984[10-11-18 18:31:33:609 CST] 000 ... -
利用spring提供的字符编码过滤器
2010-11-14 11:55 1968<!-- spring的字符集过滤器 --> ... -
简单的几句CSS布局口诀
2010-11-10 16:41 963简单的几句CSS布局口诀,就可以写出精简,标准的样式。 ... -
commons-email笔记
2010-11-10 14:38 1371import java.io.UnsupportedE ... -
如何解决 调用jar程序时出现 outofMemory的问题
2010-10-29 12:02 1200我们在调用 打包好的java程序时,如果程序要加载大量数据的话 ... -
关于Spring和WebLogic版本兼容的一点小提示
2010-09-30 16:31 2062首先 WebLogic 的各个版本和 JDK 绑定的很紧, 或 ... -
删除WebLogic 10的缓存
2010-09-30 16:07 4639在WebLogic 10上部署了一个应用,最近作了更新并重新部 ... -
weblogic如何强制先加载web-inf/lib下的jar
2010-09-30 16:05 4782方法1: 修改WEB-INF\weblogic.xml (如 ... -
用Log4j自动生成日志
2010-09-27 13:28 1637Log4j是Apache基金会的一 ... -
java smslib发送短信
2010-09-10 10:02 1631public class SendMessage { ... -
Spring定时器的两种实现方式
2010-09-01 21:07 1455有两种流行Spring定时 ... -
使用 Commons-Email 在邮件内容中直接嵌入图片
2010-08-31 20:25 1323我们在发送邮件的时候,如果使用HTML在邮件内容中嵌入图片,& ... -
Struts2中转换Date类型的问题
2010-08-29 09:43 1335Web开发会涉及到很多类型转换的情况。我们知道,页面中的一切值 ... -
java smslib 发送短信错误信息
2010-08-25 15:02 4245org.smslib.GatewayException: GS ... -
rxtx取代javax.comm实现Java跨平台设备端口通信
2010-08-24 08:53 2159From Rxtx <!-- start conte ... -
javascript汉字转拼音代码
2010-08-22 08:21 4573使用方法(1):pinyin.go('汉字'); //例:张家 ... -
关于IE等浏览器在下载JAR文件时的,将后缀更改为zip等问题及解决方案
2010-08-03 12:19 1208httpd.conf这个文件中的mime.types上面,打开 ... -
一句代码解决IE8兼容问题
2010-07-24 15:46 1582这篇文章就是寻求最简单的方法解决ie8兼容问题,当然这只是最简 ...
相关推荐
Java GC与性能调优文档 作者:高飞
大厂架构师-日均百万订单量的JVM优化与高级GC调优策略实战(5.8G) 〖课程介绍〗: 来自顶尖大厂的架构师级JVM优化与GC调优策略实战课程,是具备有尖端技术的优化课程。在课程内容上几乎不用过多的介绍,单是查阅目录就...
可见,无论使用多少堆外内存,对JVM内存的使用终究是绕不过去,既然绕不过去...本文就将会介绍HBase应用场景下CMS GC策略的调优技巧,后续还会针对另一业界开始使用的GC策略-G1GC策略在HBase应用场景下进行调优介绍。
来自顶尖大厂的架构师级JVM优化与GC调优策略实战课程,是具备有尖端技术的优化课程。在课程内容上几乎不用过多的介绍,单是查阅目录就会发现非常的强悍,课程从思路和实际案例的角度出发,非常全面的像同学们诠释了...
JVM体系结构与GC调优,内容涉及JVM的垃圾回收的各种策略和JVM的各种内存的结构的分配
本文描述了几种IBM JDK5的垃圾回收策略,几种策略的特点和原理,对于WAS6.1 GC调优有很大的帮助
包括调整内存参数、调整 GC 策略、使用 GC 日志分析工具等。在实际应用中,我们可以根据不同的场景和需求,采用不同的调优手段,从而达到最优的性能效果。此外,课程还介绍了如何进行 JVM 线程 dump 分析和内存 dump...
1. JVM调优 1.1 JVM调优总结(一)-一些概念 1.2 JVM调优总结(二)-一些概念 1.3 JVM调优总结(三)-基本垃圾回收算法 1.4 JVM调优总结(四)-垃圾...4.2 JVM内存管理:深入垃圾收集器与内存分配策略 4.3 深入理解JVM
书接上半部分,核心内容就在于介绍jvm方面的调优方案以及策略,这部分主要是介绍了堆内存方面的分区介绍、GC等内容,在应付面试以及平常工作中还是有点作用的!!!
它与默认的分代收集器工作策略类似。对象在新域中分配,即JRockit文档中的nursery。这种收集器最适合单cpu机上小型堆操作。 4.1.2.单空间并发收集器 该收集器使用完整堆,并与背景线程共同工作。尽管这种收集器可以...
浅谈jvm原理(概念,运行机制,基本架构,运行时数据区,类加载系统,垃圾回收算法,垃圾回收策略,gc参数,调优策略)
45 Numa 架构单实例和多实例优化策略 46 中断种类及分析方法 47 GC 回收器选择 48 年轻代与年老代的参数调优建议 49 GC 回收时常见的异常 410 CMS 回收是否等于 FULL GC? 411 判断 FULL GC 是否正常的标准 412 FULL...
FullGC问题之前在一些文章里面已经讲过它的来龙去脉,主要的解决方案目前主要有两方面需要注意,一方面需要查看GC日志确认是哪种FullGC,根据FullGC类型对JVM参数进行调优,另一方面需要确认是否开启了BucketCache的...
比方,JVM的堆大小,垃圾回收策略等等。 要进行JVM层面的调优。须要开发者对JVM的执行原理和基本内存结构有一定的了解。如,堆内存的结构,GC的种类等。然后,根据引用程序的特点。设置合理的JVM启动參数。
比方,JVM的堆大小,垃圾回收策略等等。 要进行JVM层面的调优。须要开发者对JVM的执行原理和基本内存结构有一定的了解。如,堆内存的结构,GC的种类等。然后,根据引用程序的特点。设置合理的JVM启动參数。
实践经验:理论知识之外,面试官可能会问到实际场景下的优化策略和性能调优方法。 面试占比和重要性: 占比:垃圾回收在Java面试中通常有较高的占比,可以占据总面试问题的10%-20%左右。 重要性:垃圾回收是Java...
包括JVM执行过程、虚拟机类加载机制、运行时数据区、GC、类加载器、内存分配与回收策略等,全套视频加资料高清无密码 第1讲 说在前面的话 免费 00:05:07 第2讲 整个部分要讲的内容说明 免费 00:06:58 第3讲...
• 熟悉JVM内存区域,常用引用类型,垃圾回收机制、算法以及常见的GC垃圾收集器(Serial、ParNew、Parallel Scavenge、Serial Old、Parallel Old、CMS、G1) • 熟悉常用IO模型(BIO、NIO、AIO),熟悉JVM类加载过程与...
提高线程的可管理性, 线程不能无限制的创建, 需要进行统一的分配, 调优和监控. 不适用线程池坏处: 频繁的线程创建和销毁会占用更多的CPU和内积. 频繁的创建和销毁会对gc产生比较大的压力. 线程太多,线程切换带来...
JVM参数,如何设置最优的jvm参数,heap size、GC机制等等 Map Reduce,我们应该选择什么样的sort、merge等算法? 消息队列,消息队列长度会怎么样?等等 必备的测试环境 必备的测试环境 ⼤数据测试不同