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 收集器。它们的性能特征迥异,下一章将围绕每种垃圾收集器的特质进行深入讨论。虽然存在差异,不过它们也有不少共性,本章会针对这些共性概述垃圾收集器是如何工作的。

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或者开源站点。虽然还有其他开源和商业工具,但为方便起见,本章关注的主要是

Java性能调优02——性能测试方法

性能测试的4项原则原则1:测试真实应用第1条原则就是,应该在产品实际使用的环境中进行性能测试。性能测试大体上可以分为3种,每种都有其优点和不足,只有适用于实际应用的才能取得最好的效果。微基准测试微基准测试用来测量微小代码单元的性能,包括调用同步方法的用时与非同步方法的用时比较,创建线程的代价与使用线

Java性能调优01 —— 基础

JVM调优标志除了少数例外,JVM主要接受两类标志:布尔标志和附带参数的标志。布尔标志采用以下语法:-XX:+FlagName表示开启,-XX:-FlagName表示关闭。(即:【+】号代表开启,【-】号代表关闭)附带参数的标志采用以下语法:-XX:FlagName=something,表示将标志f
Your browser is out of date!

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

×