分类目录:GC

以下是分类 GC 下的所有文章

ThreadLocal的实现

ThreadLocal实际上是一个Map,Map的key是线程对象,而值是一个自定义的需要存储的对象。 另外一方面,ThreadLocal使用的Map是WeakHashMap,WeakHashMap能够在key被GC回收的时候,收到一个消息,随后将对应的Value从Map中删除,以防Map里面的数据内存泄露。 大家都知道对象引用分为强引用、弱引用、软引用、幻影引用。软引……

G1相关

Serial – 客户端设备使用 CMS – 面向响应时间优化 Parallel GC – 面向吞吐量优化 java7,java8 server模式 – 默认ParallelGC java9 – 默认G1 G1最早是用来替换CMS的,但是由于java7,java8默认是ParallelGC,网上大部分文章使用G1与ParallelGC来对比,应该和CMS对比才对 G1最早出现在Java7……

如何查看线上的Java进程使用的GC收集器类型

使用下面的命令可以查看是否使用了指定类型GC收集器,结果中有+号则使用这种收集器,否则有-号表示没有使用这个收集器。 并行: jinfo -flag UseParallelGC 13727jinfo -flag UseParallelOldGC 13727(fallback to 串行) 并发: jinfo -flag UseParNewGC 13727(fallback to 串行)jinfo -flag UseConcMarkSweepGC 137……

GC堆最大最小内存随笔

今天公司里面又有人讨论Xms和Xmx设置成一样好呢?还是不一样好呢?这是一个老生常谈的问题,当然,也有很多人知道设置成同样的值会更好些,可是又不知道为什么,还有些人尽管告诉他们设置成一样的好,他们也不太相信,为了能更容易说服一些在技术上比较倔强的人,在网上随便搜索了一下资料,总结如下: Xms和Xmx应该设置……

【转载】Tomcat7连接数异常导致超时问题的排查

原文出处:http://blog.2baxb.me/archives/1309?from=timeline&isappinstalled=0 1.摘要 前几天线上tomcat出了一次诡异的超时问题,在此记录下来。每次问题的排查都很痛苦,而定位原因之后再回想整个过程又常常有“当时如果看了那个其实早就能知道了”之类的懊恼,看来问题排查流程的标准化还有很长的路要走。 2.现象和……

【未完待续】Java后台线上服务优化小记

最近,一直负责开发公司内部的Restful服务框架,并与公司的代码审核和CI上线流程进行整合,整合的过程中需要开发线上Restful服务的启动脚本,于是,发现一些线上的服务配置没有进行过优化,因此,简单的做了下压测,尝试和对比,对线上服务进行了简单的优化,优化过程记录如下: 1. 原先GC堆的大小设置为-Xms128m -Xmx1g,……

【转载】【经典】经典GC系列文章

本文为转载的系列文章,个人认为非常经典,如果你真的想了解GC,一定读完这五篇文章。 JVM系列一:JVM内存组成及分配 JVM系列二:GC策略&内存申请、对象衰老 JVM系列三:JVM参数设置、分析 JVM系列四:生产环境参数实例及分析【生产环境实例增加中】 JVM系列五:JVM监测&工具 下文为其中的第三篇,包括所有的GC参数以……

使用CMS垃圾收集器产生的问题和解决方案

在之前的一篇文章《CMS vs. Parallel GC》里通过实验的方式对比了并行和并发GC的优缺点,在文章结尾提到,CMS并行GC是大多数应用的最佳选择,然而, CMS并不是完美的,在使用CMS的过程中会产生2个最让人头痛的问题: 1. promotion failed 2. concurrent mode failure 第一个问题promotion failed是在进行Minor GC时,Su……

CMS vs. Parallel GC

GC策略在G1收集器还没有成熟,并且没有得到广泛应用的情况下,目前主要有串行,并发(CMS)和并行(Parallel)三种,其中串行主要应用在客户端的实例中,在CPU资源比较稀缺的情况下,适合使用串行GC,这样可以避免过多的线程切换浪费系统资源,从而可以达到较高的性价比,但是对于高并发的服务器系统,并发和并行垃圾收集策略……

JVM GC调试工具

1. JConsole 2. Visual VM 3. Eclipse MAT 4. JProfiler – http://www.ej-technologies.com/products/jprofiler/overview.html 5. Yourkit – http://yourkit.com/ – 需要使用jvm agent, 非开源有破解 – 参考更多介绍:http://zhwj184.iteye.com/blog/764575

GC参数列表

默认的GC收集器 启动模式 新生代GC方式 旧生代和持久带GC方式 client 串行 串行 server ParNew CMS GC参数列表 参数名称 含义 默认值 -Xms 初始堆大小 物理内存的1/64(<1GB) 默认(MinHeapFreeRatio参数可以调整)空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制. -Xmx 最大堆大小 物理内存……

Hotspot JVM GC算法和垃圾收集器

垃圾回收算法 引用计数 – 不能识别循环以来,MS COM Smart Pointer使用,或者教学上使用。 拷贝(Copy-Stop) – Jvm新生代使用,适合朝生夕灭的对象。 标记清除(Mark-Sweep) – CMS老年带默认使用 标记整理(Mark-Sweep-Slide Over) – CMS 老年代通过配置可以使用,适合大对象,生命周期长的对象。 ……

让GC日志打印可读的时间戳

1<code>-XX:+PrintGCTimeStamps -----&gt; -XX:+PrintGCDateStamps 很多线上Java服务器使用-XX:+PrintGCTimeStamps选项打印GC时间,这个选项记录的是Jvm启动时间为起点的相对时间,也就是JVM启动后的毫秒数,可读性较差,不利于定位问题,使用-XX:+PrintGCDateStamps记录的是系统时间,可以结合业务情况或者用……

如何强制JVM执行GC?

在一些业务场景下,用户难以忍受Full GC所带来的长时间响应停顿,这种情况下可以选择在非业务时间手工执行GC,以免老年代过大而导致Full GC执行后stop-the-world时间过长,还有一些情况下,我们需要手工的执行GC,来观察GC的回收情况,从而来排查线上的内存问题,因此,我们需要找到一个简单方便的方法来手工调用GC,今天……