- 浏览: 1591326 次
- 性别:
- 来自: 杭州
-
文章分类
最新评论
-
jsrgzhangzhiyong:
关于null值的转换还是感觉不太友好,就像 mapstruct ...
我也造了个轮子:BeanMapping(属性拷贝) -
he037:
a417930422 写道引用使用EPHEMERAL会引出一个 ...
基于zookeeper的分布式lock实现 -
seancheer:
qianshangding 写道首先节点启动后,尝试读取本地的 ...
zookeeper学习记录三(session,watcher,persit机制) -
雪夜归人:
您好,我想咨询一下,开源的canal都能支持mysql的哪些版 ...
Canal BinlogChange(mysql5.6) -
zhoudengyun:
copy 一份做记录,后续学习,请知悉
阿里巴巴开源项目: 基于mysql数据库binlog的增量订阅&消费
1. 杂类
http://www.oracle.com/technetwork/java/faq-140837.html
* -XX:+UseParallelGC : 和传统的新生代GC一样,只是可以进行并行标记处理。 可通过-XX:ParallelGCThreads指定并发线程数,默认值:-XX:ParallelGCThreads =<#cpus < 8 ? #cpus : 3 + ((5 * #cpus) / 8) >
The new parallel garbage collector is similar to the young generation collector in the default garbage collector but uses multiple threads to do the collection. By default on a host with N CPUs, the parallel garbage collector uses N garbage collector threads in the collection. The number of garbage collector threads can be controlled with a command line option (see below). On a host with a single CPU the default garbage collector is used even if the parallel garbage collector has been requested. On a host with 2 cpus the Parallel garbage collector generally performs as well as the default garbage collector and a reduction in the young generation garbage collector pause times can be expected on hosts with more than 2 cpus.
* XX:+UseParNewGC: 和UseParallelGC类似,也是并行处理,但实现技术还是不同,据说在新生代的火车模型上有更少的停顿时间。
* -XX:+ DisableExplicitGC : 禁用system.gc()调用
Don't call System.gc(). The system will make the determination of when it's appropriate to do garbage collection and generally has the information necessary to do a much better job of initiating a garbage collection. If you are having problems with the garbage collection (pause times or frequency), consider adjusting the size of the generations.
* -XX:+AggressiveOpts 加快编译
* -XX:+UseBiasedLocking 锁机制的性能改善。
* -Xss=256k
-Xss 是线程栈的大小, 这个参数需要严格的测试, 一般小的应用, 如果栈不是很深, 应该是128k够用的, 不过,我们的应用调用深度比较大, 还需要做详细的测试。 这个选项对性能的影响比较大。 建议使用256K的大小.
2. CMS介绍
文章:http://www.iteye.com/topic/473874
-XX:+CMSParallelRemarkEnabled : 在和UseParNewGC一起使用的情况下,尽量减少mark的时间
-XX:+UseConcMarkSweepGC : 指定在Old Generation使用concurrent gc
-XX:+UseCMSCompactAtFullCollection : 在使用concurrent gc的情况下,防止memory fragmention
-XX:CMSInitiatingOccupancyFraction=n : 指示在old generation在使用了n%的后,触发cms gc
-XX:+UseCMSInitiatingOccupancyOnly : 指示只有在old generation在使用了初始化的比例后启动cms gc
公司参数列表记录:
-server -Xmx2g -Xms2g -Xmn256m -XX:PermSize=128m -Xss256k -XX:+DisableExplicitGC -XX:+UseConcMarkSweepGC -XX:+CMSParallelRemarkEnabled -XX:+UseCMSCompactAtFullCollection -XX:LargePageSizeInBytes=128m -XX:+UseFastAccessorMethods -XX:+UseCMSInitiatingOccupancyOnly -XX:CMSInitiatingOccupancyFraction=70
3. G1介绍
http://www.oracle.com/technetwork/java/javase/tech/g1-intro-jsp-135488.html
jdk 1.6.14中首次引入了G1.
G1的特点描述:
- 并发性和并行性。 充分利用系统硬件资源,多核多CPU的资源,通过多线程并发和并行技术,尽量减少“stop-the-world”,也就是系统停顿时间。
- 代收集。 和普通的GC收集器一样,区分young对象和old对象为不同的收集策略。针对young区关注的是存活的对象,因为young大多数都是需要被GC回收的。
- 压缩。 不同于CMS收集,G1垃圾收集器一直都会对heap区做压缩,避免内存碎片的产生。
- 可预测性。G1相比于CMS针对GC的“stop-the-world”的有更好的可预测性,主要归功于G1的压缩避免内存碎片对GC pause time的影响,G1还有相应的预测模型,通过许多方式,尽量去满足一个pause time的预期。
- G1没有严格的young,old区的划分,它将整个heap区当作是一个连续的物理内存块进行处理。这样G1可以很方便,很灵活的进行对象的拷贝和移动。
- G1同样有from/to的survivors regoins
- G1和CMS一样会有 concurrent marking phase,通过并发从root对象进行存活对象进行标记,但是它与CMS相比,没有concurrent sweeping phase处理
- -XX:+UnlockExperimentalVMOptions -XX:+UseG1GC (开启使用G1 GC)
- -XX:MaxGCPauseMillis =50 (for a pause time target of 50ms)
- -XX:GCPauseIntervalMillis =200 (for a pause interval target of 200ms)
-XX:+G1YoungGenSize=512m
(for a 512 megabyte young generation) 这里搞不明白,是G1重新划分新生代?还是仅仅只是在GC中划分的区域。-
-XX:SurvivorRatio=6 调整surivor regoins的大小
-XX:+G1ParallelRSetUpdatingEnabled -XX:+G1ParallelRSetScanningEnabled 不知道干吗的,先记着
4. gc相关调试参数:
打印GC时间参数: -verbose:gc -XX:+PrintGCTimeStamps -XX:+PrintGCDetails -Xloggc:/home/test/logs/gc.log
49.414: [GC [PSYoungGen: 10480K->0K(524160K)] 11272K->792K(2097024K), 0.0002270 secs] [Times: user=0.00 sys=0.00, real=0.00 secs]
详细暂停时间参数: -XX:+PrintGCApplicationConcurrentTime -XX:+PrintGCApplicationStoppedTime
5. GC算法组合
GC的算法
复制(Copying)
标记-清除(Mark-Sweep)
标记-清除-整理(Mark-Sweep-Compact)
三种垃圾收集器
Serial GC
Parallel GC/Parallel Old GC
Concurrent Mark-Sweep GC (CMS)
GC算法组合:
![](http://dl.iteye.com/upload/attachment/347104/94ee0f80-85d2-3b01-8d82-e9efe64ea1bb.jpg)
说明:
- UseSerialGC:"Serial" + "Serial Old"
- UseParNewGC:"ParNew" + "Serial Old"
- UseConcMarkSweepGC:"ParNew" + "CMS" + "Serial Old". "CMS" is used most of the time to collect the tenured generation. "Serial Old" is used when a concurrent mode failure occurs.
- UseParallelGC:"Parallel Scavenge" + "Serial Old"
- UseParallelOldGC:"Parallel Scavenge" + "Parallel Old"
如果GC算法参数搭配不合理,会出现类似错误:
Could not create the Java virtual machine.
发表评论
-
yugong QuickStart
2016-03-05 01:52 0几点说明 a. 数据迁移的方案可参见设计文档,oracl ... -
阿里巴巴开源项目: 阿里巴巴去Oracle数据迁移同步工具
2016-03-05 18:29 6432背景 08年左右,阿里巴巴开始尝试MySQL的相关 ... -
愚公performance
2016-03-02 17:29 0性能测试 全量测试 场景1 (单主键, ... -
yugong AdminGuide
2016-03-02 16:40 0环境要求 操作系统 数据库 迁移方案 部署 ... -
Tddl_hint
2014-01-27 13:52 0背景 工作原理 Hint格式 direct模 ... -
tddl5分库规则
2014-01-26 14:41 0背景 工作原理 构建语法树 元数据 基于 ... -
tddl5优化器
2014-01-22 15:12 0背景 工作原理 构建语法树 元数据 抽象语 ... -
Canal BinlogChange(mariadb5/10)
2014-01-20 17:25 4508背景 先前开源了一个 ... -
asynload quickstart
2013-10-08 22:49 0几点说明: 1. asyncload是做为一个j ... -
网友文档贡献
2013-09-18 15:50 01. Otter源代码解析系列 链接:http://e ... -
Manager配置介绍
2013-09-16 13:00 0通道配置说明 多种同步方式配置 a. 单向同步 ... -
canal&otter FAQ
2013-09-05 17:30 0常见问题 1. canal和 ... -
阿里巴巴开源项目:分布式数据库同步系统otter(解决中美异地机房)
2013-08-22 16:48 40317项目背景 阿里巴巴B2B公司,因为业务的特性 ... -
Otter AdminGuide
2013-08-19 11:06 0几点说明 otter系统自带了manager,所以简化了一 ... -
Otter高可用性
2013-08-17 23:41 0基本需求 网络不可靠,异地机房尤为明显. man ... -
Otter数据一致性
2013-08-17 23:39 0技术选型分析 需要处理一致性的业务场景: 多地修改 ( ... -
Otter扩展性
2013-08-17 22:20 0扩展性定义 按照实现不同,可分为两类: 数据处理自定 ... -
Otter双向回环控制
2013-08-17 21:37 0基本需求 支持mysql/oracle的异构数据库的双 ... -
Otter调度模型
2013-08-17 20:13 0背景 在介绍调度模型之前,首先了解一下otter系统要解 ... -
Otter Manager介绍
2013-08-16 11:16 0背景 otter4.0发布至 ...
相关推荐
因为本文档是作者花费数月时间,查阅GC相关的国内外众多资料并加以思路清晰的条目化而形成。因为篇幅所限,可能有部分知识点没有完全展开,但是对于GC领域的核心知识点几乎全部涵盖,很难在其他书籍和文档中涉及如此...
jvmgc过程介绍(jpg)
JVM GC垃圾回收.pdf
JvmGC收集器 在 Java 虚拟机中,GC(Garbage Collection)收集器是 JVM 的一个重要组件,它负责回收 Java 应用程序中的垃圾对象,从而维持应用程序的性能和可靠性。JvmGC 收集器是 JVM 中的三个主要 GC 收集器之一...
Java虚拟机(JVM)的垃圾收集(Garbage Collection, GC)是Java程序运行时管理内存的关键机制。它自动地识别并释放不再使用的对象,从而避免了程序员手动管理内存可能导致的内存泄漏问题。理解JVM的GC对于优化Java...
《JVM和GC详解及调优》是一本深入解析Java虚拟机(JVM)和垃圾收集(Garbage Collection,简称GC)的专业书籍,对于Java开发者来说,是进阶提升的必备资料。书中详尽地阐述了JVM的工作原理,以及如何进行有效的性能...
JVM(Java Virtual Machine)的垃圾收集器(GC,Garbage Collector)扮演着核心角色,负责自动管理应用程序的内存,防止内存泄漏和性能问题。MAT(Memory Analyzer Tool)是由Eclipse基金会提供的一个强大的分析工具...
Java 应用程序的JVM(Java虚拟机)性能优化是一个关键领域,而垃圾收集(GC)作为内存管理的一部分,其频率对系统性能有直接影响。GC的频率反映了系统的内存使用情况和健康状况。通常,GC分为两种主要类型:Scavenge...
Java虚拟机(JVM)是Java程序运行的基础,它的垃圾收集器(GC)是自动管理内存的核心机制。在Java应用程序中,尤其是对于大型系统或高并发环境,进行JVM GC调优是提升性能、减少系统停顿时间的关键步骤。"用于测试...
HPjmeter由惠普公司开发,它提供了一种可视化的方式来理解JVM性能,特别是与垃圾收集相关的活动。在Java应用程序中,GC是内存管理的关键部分,其性能直接影响应用的响应时间和稳定性。 【描述】"hpjmeter jar 包"是...
"jvmgc日志分析工具"专为解析和可视化JVM生成的GC日志而设计,帮助开发者识别内存瓶颈,调整内存设置,以及诊断可能的性能问题。 GC日志是JVM在运行过程中记录的关于垃圾收集活动的详细信息,包括垃圾收集的起始...
JVM与GC调优课程视频 〖课程介绍〗: JVM与GC调优课程视频 〖课程目录〗: 1.笔记/ ├── 第1篇-字节码篇.png?x-oss-process=style/pnp8 ├── 第2篇-类的加载篇.png?x-oss-process=style/pnp8 ├── 第3篇-运行时...
本文将深入探讨JVM参数及其与Java垃圾收集相关的知识。 一、JVM参数详解 JVM参数可以分为三类:启动参数(-X),标准参数(-XX),以及非公开(实验性)参数(-XX:)。这些参数允许开发者对JVM的行为进行精细调整...
Java虚拟机(JVM)垃圾回收(GC)是Java语言内存管理的核心机制,负责回收Java堆内存中不再使用的对象所占的空间。在JVM GC原理和heapsize调优的学习和实践过程中,需要理解多个关键概念和操作步骤,下面详细展开: ...
- **可重置JVM**:IBM JVM提供了可重置功能,允许在不重启整个JVM的情况下重置某些状态,如GC相关统计信息。 ##### 4. 详细的GC日志输出 - **详细的GC日志**:IBM JVM支持输出详细的GC日志信息,帮助开发者监控和...
总之,熟悉JVM内存划分和GC机制,以及掌握相关监控工具和参数配置,对于避免内存泄漏、提升Java程序的性能和稳定性至关重要。通过实战操作,分析和优化HotSpot JVM GC的工作,是每个Java开发者必须面对和解决的问题...
### JVM_GC调优详解 #### 一、JVM体系结构概览 Java虚拟机(JVM)作为Java程序的运行环境,其内部结构复杂且高效。为了更好地理解JVM_GC调优,我们首先来了解一下JVM的基本组成部分。 1. **类装载器子系统(Class ...
在实际调优过程中,我们通常会先使用默认配置运行应用,然后根据监控数据和日志信息找出问题,调整相关参数,再通过工具验证优化效果,如此反复迭代,直至找到最佳的JVM配置。这需要对JVM内部机制有深入理解,并具备...
### JVM_GC_调优总结 #### 一、GC(Garbage Collection)概述 **1.1 GC的概念** - **定义**: GC(Garbage Collection),即垃圾收集器,用于跟踪内存中的对象,并自动回收那些不再被其他对象引用的对象,释放这...