GC优化

JVM--JVM finalize实现原理与由此引发的血案

大城市里の小女人 提交于 2020-01-08 14:58:27
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 原创内容,转载请注明出处 本文由一桩因为使用了JAVA finalize()而引发的血案入手,讲解了JVM中finalize()的实现原理和它的陷阱所在,希望能够对广大JAVA开发者起到一点警示作用。除此之外,本文从实际问题出发,描述了解决问题的过程和方法。如写模拟程序来重现问题,使用jmap工具进行分析等,希望对大家提供借鉴。 本文分三个章节,先介绍实际项目中遇到的问题,随后介绍了问题重现和分析方法,最后对问题的元凶,override finalize()的实现原理和陷阱进行了讲解和介绍。篇幅较长,可以分开独立阅读。 阅读本文前请确保自己的JVM的GC原理有足够理解,否则看起来会非常艰难。看过本文后若对finalize()仍有疑惑,或有不同意见,欢迎提出和指正。 DDB Proxy的一桩血案 入职没多久,接手一个分布式数据库(分库分表MySQL)的SQL Proxy(以下简称Proxy),在对它进行测试的过程张发现一些带limit的语句跑着跑着会引发整个代理服务器的TPS骤降。当时遇到这个问题毫无头绪,跟着一些人的建议检查了GC日志,结果发现TPS骤降的时候,Proxy进程正好开始频繁的full gc,full gc将近每3秒一次,一次维持2秒左右,TPS从2000直接降到100

成为Java GC专家系列

随声附和 提交于 2019-11-27 20:00:55
成为Java GC专家(1):深入浅出Java垃圾回收机制 成为Java GC专家(2):如何监控Java垃圾回收机制 成为Java GC专家(3):如何优化Java垃圾回收机制 成为Java GC专家(4):Apache的MaxClients参数及其对Tomcat执行Full GC的影响 成为Java GC专家(5):Java应用性能调优的原则 成为Java GC专家(6):JDBC连接池如何影响垃圾回收 JVM调优总结(一)-- 一些概念 JVM调优总结(二)-一些概念 JVM调优总结(三)-基本垃圾回收算法 JVM调优总结(四)-垃圾回收面临的问题 JVM调优总结(五)-分代垃圾回收详述1 JVM调优总结(六)-分代垃圾回收详述2 JVM调优总结(七)-典型配置举例1 JVM调优总结(八)-典型配置举例2 JVM调优总结(九)-新一代的垃圾回收算法 JVM调优总结(十)-调优方法 JVM调优总结(十一)-反思 JVM调优总结(十二)-参考资料 推荐阅读: 高吞吐低延迟Java应用的垃圾回收优化 JVM调优总结(1):基本垃圾回收算法 JVM调优总结(2):调优方法 Java垃圾回收精粹 深入理解JVM内幕 来源: oschina 链接: https://my.oschina.net/u/1169289/blog/698422

面向GC的Java编程

瘦欲@ 提交于 2019-11-27 16:09:49
Java程序员在编码过程中通常不需要考虑内存问题,JVM经过高度优化的GC机制大部分情况下都能够很好地处理堆(Heap)的清理问题。以至于许多Java程序员认为,我只需要关心何时创建对象,而回收对象,就交给GC来做吧!甚至有人说,如果在编程过程中频繁考虑内存问题,是一种退化,这些事情应该交给编译器,交给虚拟机来解决。 这话其实也没有太大问题,的确,大部分场景下关心内存、GC的问题,显得有点“杞人忧天”了,高老爷说过: 过早优化是万恶之源。 但另一方面, 什么才是“过早优化”? If we could do things right for the first time, why not? 事实上 JVM的内存模型 ( JMM )理应是Java程序员的基础知识,处理过几次JVM线上内存问题之后就会很明显感受到,很多系统问题,都是内存问题。 对JVM内存结构感兴趣的同学可以看下 浅析Java虚拟机结构与机制 这篇文章,本文就不再赘述了,本文也并不关注具体的GC算法,相关的文章汗牛充栋,随时可查。 另外,不要指望GC优化的这些技巧,可以对应用性能有成倍的提高,特别是对I/O密集型的应用,或是实际落在YoungGC上的优化,可能效果只是帮你减少那么一点YoungGC的频率。 但我认为, 优秀程序员的价值,不在于其所掌握的几招屠龙之术,而是在细节中见真著 ,就像前面说的,