`
huxi
  • 浏览: 17106 次
  • 性别: Icon_minigender_1
  • 来自: cc
社区版块
存档分类
最新评论

虚拟机改进之类数据共享(Class Data Sharing)

阅读更多

在已经安装的SUN JRE Client目录中有一个classes.jsa文件,这个文件只在client模式中存在,server中是不存在。

http://openjdk.java.net/groups/hotspot/docs/HotSpotGlossary.html



类数据共享特性的目标是为了减少应用程序的启动时间和内存占用。安装进程从系统 jar
文件中把一组类加载到私有的内部表示,然后把那个表示转储到“共享存档”文件。在后续的 JVM
调用期间,那个共享存档映射在内存中,从而减少了加载那些类的开销,并允许在多个 JVM 进程间共享这些类的许多 JVM 元数据。有关更多信息,
概述
  
类数据共享(CDS)是为了减少Java应用程序启动时间而在J2SE5.0增加的新特性,尤其对于较小的应用程序。当使用Sun提供的安装程序安装
JRE在32位平台上的时候,安装程序从系统jar文件中加载一套类到一个私有的内部表示,并且把该表示存放在一个叫做“shared
archive”的文件中。类数据共享在Microsoft Windows 95/98/ME中不被支持。如果没有使用Sun
JRE安装程序,可以按照以下的说明进行手动设置。在JVM的并发调用中,上述共享文档是内存映射的,节省了那些类文件的加载成本,并且允许在多个JVM
进程之间共享这些类的许多JVM元数据。
    在J2SE5.0中,类数据共享仅仅对Java HotSpot Client VM进行支持,并且仅仅只对串行垃圾收集器。
    在5.0发布版本中包含CDS的主要目的是减少启动时间。CDS能够对比较小的应用程序比较好的作用,因为它除去一项固定成本:某些核心类的加载成本。应用程序相对于它使用核心类越小的话,能够节省更多的启动时间。
  
能够通过两种方式来减少新建JVM实例的开销。首先,一部分的共享档案,当前通常是5-6M,进行了只读映射,因此能够在多个JVM进程之间进行共享。前
面的那些数据会复制到每个虚拟机实例。其次,因为共享档案使用一种Java Hotspot
VM使用的那种结构来容纳类数据,所以不再需要额外的内容开销在rt.jar中访问原始类信息。这些开销节省使得可以在同一个机器上并行运行更多的应用程
序。在Microsoft
Windows,关于一个进程的初始,使用多个工具进行测试后,可能会出现增长的情况,因为有大量的页面文件被映射到进程的地址空间。这部分的开销通过对
rt.jar占有所需内存的减少来弥补的。减少初始开销保持高的优先级。
重建共享档案
    在有些情况下,系统管理员可能需要重新生成共享档案。仅仅针对Solaris平台上典型情况:当J2SE程序包是通过网络安装到一台机器上,并且安装源和执行安装的机器是两个不同的体系的时候。这些重建指令适用于所有支持平台。
  
共享档案文件是与虚拟机VM的共享库相关联的。在Unix平台,它用jre/lib/[arch]/client/classes.jsa这个文件储存,
在Microsoft Windows
平台以jre/bin/client/classes.jsa文件储存。如果这个文件已经存在的话,在重新生成之前必须先手动删除。
    如果要重新生成档案文件,以管理员身份登陆;在网络环境下,在用J2SE安装机器同一体系平台的机器上登陆,同时确保你能具有对安装目录的写权限。然后执行以下命令:
java -Xshare:dump
关于档案生成情况的信息也会打印出来。
手动控制类数据共享
    当使用条件满足的时候,类数据共享特性会自动生效。以下的命令行选项主要用来提示信息和调试目的的,在以后的发布版本里可能会改变活着取消。
-Xshare:off
禁用类数据共享.
-Xshare:on
需要启用类数据共享. 如果因为某些原因不能启用的话,将打印输出一个错误信息并退出.
-Xshare:auto
缺省选项; 在任何可能的情况下启用类数据共享.

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics