加入收藏 | 设为首页 | 会员中心 | 我要投稿 汽车网 (https://www.0577qiche.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 教程 > 正文

Java SE 6 HotSpot虚拟机垃圾收集优化

发布时间:2023-04-01 11:16:48 所属栏目:教程 来源:
导读:Java SE 6 HotSpot虚拟机垃圾收集优化

1.简介

Java™平台标准版(Java SE™)被用于各种应用程序,从台式机上的小程序到大型服务器上的Web服务。为了支持这种多样化的部署范围,Java HotSpot™
Java SE 6 HotSpot虚拟机垃圾收集优化

1.简介

Java™平台标准版(Java SE™)被用于各种应用程序,从台式机上的小程序到大型服务器上的Web服务。为了支持这种多样化的部署范围,Java HotSpot™虚拟机实现(Java HotSpot™VM)提供了多个垃圾收集器,每个垃圾收集器旨在满足不同的需求。这是满足大型和小型应用程序需求的重要部分。但是,需要高性能的用户,开发人员和管理员要负担额外的步骤,即选择最能满足其需求的垃圾收集器。在J2SE™5.0中,迈出了消除这一负担的重要一步:根据运行应用程序的计算机的类别选择垃圾收集器。

垃圾收集器的这种 更好的选择通常是一种改进,但绝不是总是每种应用程序的最佳选择。具有严格性能目标或其他要求的用户可能需要显式选择垃圾回收器并调整某些参数以实现所需的性能水平。本文档提供了有助于完成这些任务的信息。首先,在串行世界级收集器的上下文中描述了垃圾收集器的一般功能和基本调整选项。然后介绍其他收集器的特定功能以及选择收集器时要考虑的因素。

Amdahl观察到,大多数工作负载无法完美并行化。某些部分始终是顺序的,不能从并行性中受益。Java™平台也是如此。特别是,Sun Microsystems的J2SE 1.4之前的Java平台虚拟机不支持并行垃圾收集,因此,垃圾收集对多处理器系统的影响相对于其他并行应用程序会增加。

2.人机工程学

J2SE 5.0中引入了此处称为人体工程学的功能 。人体工程学的目标是通过选择以下选项来提供良好的性能,而很少或不需要调整命令行选项。

在JVM启动时,而不是使用固定的默认值。该选择假定运行应用程序的计算机的类别是有关应用程序特征的提示(即,大型应用程序在大型计算机上运行)。除了这些选择之外,还有一种简化垃圾回收的简化方法。使用并行收集器,用户可以为应用程序指定最大暂停时间和所需吞吐量的目标。这与指定获得良好性能所需的堆大小相反。目的是特别提高使用大堆的大型应用程序的性能。标题为“ 5.0 Java虚拟机中的人体工程学”的文档中介绍了更通用的人体工程学。

3.世代

J2SE平台的优势之一是,它使开发人员免受内存分配和垃圾回收的复杂性的困扰。但是,一旦垃圾回收成为主要瓶颈,就值得了解此隐藏实现的某些方面。垃圾收集器对应用程序使用对象的方式进行了假设,这些反映在可调整的参数中,可以调整这些参数以提高性能,而又不牺牲抽象的功能。

如果无法从正在运行的程序中的任何指针访问对象,则该对象被视为垃圾。最简单的垃圾回收算法只是简单地遍历每个可到达的对象。剩下的所有对象都被视为垃圾。这种方法所花费的时间与活动对象的数量成正比,这对于维护大量活动数据的大型应用程序是不允许的。

从J2SE 1.2开始,虚拟机合并了许多不同的垃圾收集算法,这些算法使用分代收集进行组合 。当幼稚的垃圾收集检查堆中的每个活动对象时,分代收集利用大多数应用程序的经验观察到的属性,以最大程度地减少回收未使用(“垃圾”)对象所需的工作。这些观察到的特性中最重要的是 弱代假设,该假设指出大多数物体只能存活很短的时间。

有些对象的寿命更长,因此分布向右延伸。例如,通常有一些在初始化时分配的对象,这些对象一直存在,直到进程退出。在这两个极端之间的是在某些中间计算过程中存在的对象,在这里将其视为初始峰右边的肿块。一些应用程序的外观分布非常不同,但是令人惊讶的是,大量应用程序具有这种总体形状。通过关注大多数对象“早逝”这一事实,可以进行有效的收集。

为了针对这种情况进行优化,内存是分代管理的 ,或者是拥有不同年龄对象的内存池。当世代填满时,垃圾收集会在每个世代中发生。绝大多数对象分配在专用于年轻对象(年轻一代)的池中 ,并且大多数对象在那里死亡。当年轻一代填满时,会导致 少量收集只收集年轻一代;不回收其他世代的垃圾。假设弱的世代假设成立并且年轻一代中的大多数对象都是垃圾并且可以回收,则可以优化次要集合。首先,这种收集的费用与所收集的有生命物体的数量成正比;可以很快收集到充满死亡物体的年轻一代。通常,在每个次要收集过程中,来自年轻一代的尚存对象的一部分会移交给有权的 一代。最终,保有权的一代将填满并且必须被收集,从而导致 大量的收集,其中收集了整个堆。主要集合的持续时间通常比次要集合的持续时间长得多,因为涉及的对象数量很多。

(编辑:汽车网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章