1垃圾回收调优简介

为了支持这种多样化的部署,Java HotSpot VM 提供了多个垃圾收集器,每个垃圾收集器都旨在满足不同的需求。Java SE 根据运行应用程序的计算机的类别选择最合适的垃圾收集器。但是,此选择可能并非对每个应用程序都是最佳的。具有严格性能目标或其他要求的用户、开发人员和管理员可能需要明确选择垃圾收集器并调整某些参数以达到所需的性能水平.

1.1 什么是垃圾收集器?

垃圾收集器 (GC) 自动管理应用程序的动态内存分配请求。
垃圾收集器通过以下操作执行自动动态内存管理:

  • 操作系统分配和归还内存。
  • 在应用程序请求时将该内存分发给应用程序。
  • 确定该内存的哪些部分仍在由应用程序使用。
  • 回收未使用的内存以供应用程序重用

Java HotSpot 垃圾收集器采用各种技术来提高这些操作的效率:

  • 将分代清除与年老代结合使用,将他们的精力集中在堆中最有可能包含大量可回收内存区域的区域上。
  • 使用多个线程使操作并行化,或者在后台与应用程序并发执行一些长时间运行的操作。
  • 尝试通过压缩活动对象来恢复更大的连续空闲内存

1.2 为什么垃圾收集器的选择很重要?

垃圾收集器的目的将应用程序开发人员从手动动态内存管理中解放出来。开发人员无需关注内存的分配与解除分配和关注已分配动态内存的生命周期。这完全消除了一些与内存管理相关的错误,但代价是一些额外的运行时开销。Java HotSpot VM 提供了一系列可供选择的垃圾收集算法。

**垃圾收集器的选择何时重要?**对于某些应用程序,答案永远不会。也就是说,应用程序可以在垃圾收集存在的情况下表现良好,并且暂停频率和持续时间适中。但是,对于一大类应用程序而言,情况并非如此,尤其是那些具有大量数据(数 GB)、多线程和高事务率的应用程序。

串行收集器通常适用于大多数小型应用程序,尤其是那些在现代处理器上需要大约 100 兆字节的堆的应用程序。其他收集器有额外的开销或复杂性,这是专门行为的代价。如果应用程序不需要备用收集器的特殊行为,请使用串行收集器。串行收集器 不是最佳选择的一种情况是运行在具有大量内存和两个或更多处理器的机器上的大型、多线程应用程序当应用程序在此类服务器级机器上运行时,默认选择垃圾优先 (G1) 收集器

技术咨询支持,可以扫描微信公众号进行回复咨询
在这里插入图片描述

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐