类数据共享---Class Data Sharing

概述

Class data sharing (CDS)减少了java应用程序的启动时间,特别是对小应用程序,并减少占用空间。当JRE是使用安装程序安装,安装程序从系统jar文件中加载一系列类文件到一个私有的内在表征,并且将此内在表征存入一个文件,叫做一个共享归档文件(shared archive)。如果没有使用JRE安装程序,这可以手动完成,如下所述。在随后的JVM调用期间,共享归档文件被内存映射,从而节省了加载这些类的成本,并允许这些类的大部分JVM元数据在多个JVM进程之间共享。

只有Java HotSpot Client VM和serial garbage collector支持类数据共享。

在java SE中包含CDS的主要动机是它减少了启动时间。CDS对于较小的应用程序产生更好的效果,因为它消除了固定成本:加载某些核心类的成本。应用程序相对于加载的核心类的数量越小,节省的启动时间产生的效果越大。

新JVM实例的占用的空间成本在两方面减少了。首先,共享归档文件的一部分(当前在5到6M字节之间)被映射为只读,因此在多个JVM进程之间共享。以前,在每个JVM实例中复制了这些数据。其次,由于共享存档以Java Hotspot VM使用的形式包含了类数据,原本这些会被用来访问 rt.jar中原始类信息的内存不再被需要。这些节省的内存允许更多的应用程序运行在相同的机器上。在windows上,通过各种工具测量出来的一个进程占用的空间可能会增长,因为大量的内存page被映射到进程的地址空间。这被减少的内存数量所抵消,原本减少的这部分内存用来保存rt.jar上的部分文件。减少使用空间仍然是一个高度优先事项。

共享归档文件再生

在某些情况下,系统管理员可能需要手动重新生成共享存档。如果Java SE包在网络上安装到与执行安装不同的体系结构的机器上,这(手动重新生成共享存档)通常仅在Solaris上才是必要的。无论如何,这些再生指令适用于所有支持的平台。

共享规定文件和JVM的共享类库在同一个位置。在Solaris, Linux, or Mac OS X平台上,它存储在jre/lib/[arch]/client/classes.jsa,在windows平台上,它存储在jre/bin/[client or server]/classes.jsa。如果这个文件存在,手动重新生成之前它需要被手动移除。

若要重新生成归档文件,请作为管理员登录;在网络化情况下,登录到与JavaSE安装相同的体系结构的机器上,并确保您有权写入安装目录。然后执行一下命令:

java -Xshare:dump 当生成存档时,将打印诊断信息。

手动控制类数据共享

当条件允许使用时类数据共享特性会自动启用。以下命令行选项主要用于诊断和调试目的,并且可能在将来的版本中更改或删除。

-Xshare:off

    禁用类数据共享

-Xshare:on

    需要启用类数据共享。如果由于各种原因无法启用,打印错误信息并退出

-Xshare:auto

    默认值,尽可能启用类数据共享。

原文地址为:https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值