2.一个bug导致的FGC(Kafka发送重试 + subList导致List越来越大)
电商平台一般都有几种模式:淘宝这种属于长距离电商,买的东西可能来自于全国各地。京东属于中距离电商,有京东物流,通过最近的仓库发货 ,速度会快点。在此基础上还有近...
注意-XX:MaxTenuringThreshold最大只能是15,因为在底层这个年龄值是用了一个4位的2进制来存储的。
堆内存的大小设置为128M是因为:G1本身的Region都要最小1M,总共就没有几个Region。如果设置成10MB这种值,不好做实验。
在对象分配过程中:如果TLAB不够,就会从Region中扩展新的TLAB。如果Region不够,就会从堆内存的自由分区拿空闲Region。如果自由分区不够,就会...
这个阶段是标记出"在并发标记阶段中没有被标记到的所有对象",这些对象主要就是程序还在运行时产生的一些新对象,会STW。
设置新生代最小值和最大值。注意,在G1里这个最大值最小值其实是可以不设置的。G1会自动计算出一个值:从5%的Region数量开始,慢慢增加到最大为60%的Reg...
G1设计了一套记忆集 + 位图 + 卡表 + DCQ + DCQS机制用来提升垃圾回收的效率
G1除了要考虑垃圾对象回收的效率外,还要考虑对象分配的效率。如果对象分配很慢,那即便对象垃圾回收效率很高,系统性能也不高。
1.G1垃圾回收器的分区(Region大小+G1分区+Region过大过小和计算)
2.Jetty服务器的NIO机制如何导致堆外内存溢出(S区太小 + 禁NIO的显式GC)
3.Metaspace区域内存溢出时应如何解决(OutOfMemoryError: Metaspace)
9.一个超大数据量处理系统的OOM(数据缓存本地 + 重试发送直到Kafka恢复)
2.百万级数据误处理导致频繁FGC(大数据量加载到内存处理 + String.split())
1.如何优化每秒十万QPS的社交APP的JVM性能(增加S区大小 + 优化内存碎片)
如果平时要对运行中的系统,检查其JVM的整体运行情况。比较实用的工具之一就是jstat,它可以轻易让我们看到当前JVM内:Eden区、S区、老年代的内存情况,以...
平时我们系统运行创建的对象,通常都优先分配在新生代中的Eden区。除非是大对象,大对象会直接进入老年代或者大对象专属Region区域。新生代有两块S区,默认Ed...
在堆内存中会放业务系统创建出来的各种对象,而且通常都会将堆内存划分为新生代和老年代两个内存区域。对象一般都会优先放在新生代中,如下图示:
Stop the World是最大的问题。无论是新生代GC还是老年代GC,都会或多或少产生STW现象,这对系统的运行是有一定影响的。
一般在之前多年里,如果没有最新的G1垃圾回收器的话,通常线上系统都是用ParNew垃圾回收器作为新生代的垃圾回收器。当然后来即使有了G1,很多线上系统还是用Pa...