JVM 虚拟机:数据共享

JVM虚拟机概述

JVM的实现与HotSpot热点

自适应编译器:使用标准解释器来启动应用程序。当应用程序运行时,将分析代码以检测性能瓶颈或热点。Java HotSpot VM 编译代码中性能关键部分以提高性能,但不编译很少使用的代码(大多数应用程序)。Java HotSpot VM 使用自适应编译器来决定如何使用内联等技术优化已编译的代码。

快速内存分配和垃圾回收:Java HotSpot 技术为对象提供快速内存分配,并提供快速、高效、一流的垃圾回收器。

线程同步:Java HotSpot 技术提供了一种线程处理功能,该功能旨在扩展以用于大型共享内存多处理器服务器。

数据共享 CDS (class data sharing)

在 Java SE 中包含 CDS 的主要动机是减少启动时间。相对于应用程序使用的核心类数,应用程序越小,节省的启动时间就越大。
CDS 功能有助于减少多个 Java 虚拟机 (JVM) 之间的启动时间和内存占用。

java12 cds存档与jdk二进制文件一起预打包
默认的 CDS 归档是在 JDK 构建时通过运行 ,使用 G1 GC 和 128M Java 堆创建的。它使用内置时生成的默认类列表,其中包含选定的核心库类。默认 CDS 存档驻留在以下位置:-Xshare:dump

在 Windows 平台上,共享存档存储在

/bin/server/classes.jsa

在这里插入图片描述
默认情况下,默认 CDS 存档在运行时处于启用状态。指定禁用默认共享存档。在创建和使用定制的共享归档文件时,对转储时间和运行时使用相同的 Java 堆大小。

Xshare:off

JVM启动,共享归档文件将进行内存映射,
(有关内存映射可以阅读Linux板块 kernel内存管理部分),以允许在多个 JVM 进程之间共享这些类的只读 JVM 元数据。由于访问共享存档比加载类更快,因此缩短了启动时间。
ZGC、G1、串行和并行垃圾回收器支持类数据共享。共享 Java 堆对象功能(类数据共享的一部分)仅支持 64 位非 Windows 平台上的 G1 垃圾回收器。

新版 JVM 实例占用的空间成本已通过以下两种方式降低:

  1. 同一主机上的共享归档文件的一部分被映射为只读,并在多个 JVM 进程之间共享。否则,此数据将需要在每个 JVM 实例中复制,这将增加应用程序的启动时间。

  2. 共享归档文件包含 Java Hotspot VM 使用的类数据。否则将不使用访问运行时模块化映像中的原始类信息所需的内存。这些内存节省允许在同一系统上同时运行更多应用程序。在 Windows 应用程序中,由各种工具测量的进程的内存占用量可能会增加,因为更多的页面映射到进程的地址空间。此增加被减少的内存量(在 Windows 内部)抵消,该内存量是保存运行时模块化映像上的部分所需的。

应用程序类数据共享

为了进一步减少启动时间和占用空间,引入了应用程序类数据共享 (AppCDS),它将 CDS 扩展到包括应用程序类路径中的选定类。

AppCDS 包括:

运行时映像中的平台类
运行时映像中的应用程序类
类路径中的应用程序类
模块路径中的应用程序类

此功能允许将应用程序类放置在共享驱动器中。公共类元数据在不同的 Java 进程之间共享。AppCDS 允许内置的系统类装入器、内置的平台类装入器和自定义类装入器来装入存档的类。当多个 JVM 共享同一个归档文件时,将节省内存并缩短整体系统响应时间。

DCDS 存档

Dynamic CDS Archive (DCDS)

动态 CDS 存档扩展了AppCDS, 以允许在 Java 应用程序退出时动态归档类。它通过消除为每个应用程序创建类列表的试运行来简化 AppCDS 的使用。存档的类包括默认 CDS 存档中不存在的所有已装入的应用程序类和库类。

创建DCDS命令:

java -XX:ArchiveClassesAtExit=<dynamic archive> -cp <app jar> MyApp

重新生成共享存档:

java -XX:ArchiveClassesAtExit=<dynamic archive>
java -XX:SharedClassListFile=<class_list_file> -Xshare:dump

手动控制类数据共享:

默认情况启用
-Xshare:off
-Xshare:on

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Michael_chemic

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值