Java性能调优11——堆内存最佳实践(下)

关于内存管理,要大篇幅讨论的第二个主题是对象生命周期管理。在很大程度上,Java 会尽量减轻开发者投入到对象生命周期管理上的精力:开发者在需要的时候创建对象,当不再需要这些对象时,它们会走出作用域,并由垃圾收集器释放。 有些情况下,正常的生命周期并不是最优的。有些对象创建的成本很高,而管理这些对象的生命周期可以改进应用的效率,即便以让垃圾收集器多做些工作为代价。本节将探索正常的生命周期何时应该有所改变,以及如何改变,手段可以是重用对象,或者是维护指向这些对象的特殊引用。

Java性能调优10——堆内存最佳实践(上)

前面详细探讨了如何调优垃圾收集器,以使其尽可能不影响程序。调优垃圾收集器非常重要,但是应用更好的编程实践往往可以获得更好的性能。本章就探讨一些在 Java 中使用堆内存的最佳实践方法。 这里有两个相互冲突的目标。第一个一般规则是,有节制地创建对象并尽快丢弃。使用更少的内存,这是提升垃圾收集器效率的最好方法。相反,频繁地重建某类对象会导致整体性能变得更糟(即便 GC 的性能有所改进)。然而,如果重用那些对象,程序的性能则有可能会得到改善。对象的重用方式有很多种,包括线程局部变量、特殊的对象引用以及对象池。重用对象意味着这些对象会长期存活,而且会影响垃圾收集器,但如果能合理利用,整体性能就会得到改进。

Java性能调优09——垃圾回收优化(下)

新生代垃圾收集时,有的对象可能还处于活跃期。这些对象中,有些是刚创建的新对象,这些对象还会存活相当长的一段时间,还有一些只有短暂的生命周期。我们以第 5 章中讨论过的计算 BigDecimal 的循环为例。如果 JVM 在循环的中段启动垃圾回收,这些超短寿(very-short-lived)的 BigDecimal 对象面临的局面就变得非常尴尬:它们刚被创建,因此不能被回收释放;但是它们的生命周期又非常短,无法满足晋升到老年代的条件。 这就是新生代被划分成一个 Eden 空间和两个 Survivor 空间的原因。这种布局让对象在新生代内有更多的机会被回收,不再局限于只能晋升到老年代(最终填满老年代)。

Java性能调优08——垃圾回收优化(中)

调优特定收集器最要紧的信息是启动垃圾收集器后 GC 日志中的数据。从本章开始,我们会从 GC 的日志输出角度详细分析每种垃圾收集算法的行为;分析 GC 日志能帮助我们更好地理解垃圾收集算法是如何工作的,以及怎样调节参数能让它们工作得更好。

Java性能调优07——垃圾回收优化(上)

现代 JVM 的类型繁多,最主流的四个垃圾收集器分别是:Serial 收集器(常用于单 CPU 环境)、Throughput(或者 Parallel)收集器、Concurrent 收集器(CMS)和 G1 收集器。它们的性能特征迥异,下一章将围绕每种垃圾收集器的特质进行深入讨论。虽然存在差异,不过它们也有不少共性,本章会针对这些共性概述垃圾收集器是如何工作的。

算法、数据结构、竞赛——OI Wiki

编程竞赛发展多年,难度越来越高,内容越来越复杂,而网上资料大多零散,初学者往往并不知道如何系统地学习相关知识,需要花费大量时间摸索。 为了方便热爱编程竞赛的小伙伴更好地入门,2018 年 7 月份,OI Wiki 迁移至 GitHub。随着 OI Wiki 的内容不断完善,越来越多的小伙伴参与其中。 OI Wiki 致力于成为一个免费开放且持续更新的知识整合站点,大家可以在这里获取关于 编程竞赛 (competitive programming) 有趣又实用的知识,我们为大家准备了竞赛中的基础知识、常见题型、解题思路以及常用工具等内容,帮助大家更快速深入地学习编程竞赛。 目前,OI Wiki 的内容还有很多不完善的地方,知识点覆盖不够全面,存在一些低质量页面需要修改。OI Wiki 团队以及参与贡献的小伙伴们正在积极完善这些内容。 关于上述待完善内容,请参见 OI Wiki 的 Issues 以及 迭代计划。 与此同时, OI Wiki 源于社区,提倡 知识自由,在未来也绝不会商业化,将始终保持独立自由的性质。

Java性能调优06——JIT编译器

即时(Just-In-Time,JIT)编译器是Java虚拟机的核心。对JVM性能影响最大的莫过于编译器,而选择编译器是运行Java程序时首先要做的选择之一——无论你是Java开发人员还是最终用户。幸运的是,在绝大多数情况下,只需要对编译器做一些基本的调优。本章将深入介绍编译器。首先介绍编译器的工作

Java性能调优05——Java性能调优工具箱(下):Java任务控制

JMC是源自JRockitJVM的一套监控和管理工具,Oracle在2013年发布JAVA7u40(Java7Update40)时将其包含在JDK中,在JDK11前的版本不需要额外下载。该工具主要由三个组件构成:Java进程浏览器、JMX控制台和JavaFlight记录器。最早JMC只在商业版中有,

Java性能调优04——Java性能调优工具箱(中):Java监控和性能分析工具

Java监控工具要想深入了解JVM自身,需要使用Java的监控工具。JDK自带以下所列工具。jcmd用来打印Java进程所涉及的基本类、线程和VM信息。它适用于脚本,可以像这样执行:%jcmdprocess_idcommandoptional_argumentsjcmdhelp可以列出所有的命令。j

Java性能调优03——Java性能调优工具箱(上):操作系统的工具和分析

性能分析过程中的一切都要能可视化,从而了解应用内部及应用所在的环境发生了什么。可视化的关键全在于工具,所以性能调优也完全在于工具。有许多工具可以提供Java应用的执行信息,当然全部介绍一遍是不现实的。最重要的工具多数都来自JDK或者开源站点。虽然还有其他开源和商业工具,但为方便起见,本章关注的主要是
Your browser is out of date!

Update your browser to view this website correctly. Update my browser now

×