`
huxi
  • 浏览: 17683 次
  • 性别: 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
缺省选项; 在任何可能的情况下启用类数据共享.

 

分享到:
评论

相关推荐

    jre7虚拟机

    7. **改进的类数据共享**:JRE7通过改进类数据共享(Class Data Sharing,CDS)机制,提高了启动时间和内存占用,尤其是在服务器端应用上效果显著。 8. **异常链**:在处理异常时,JRE7能记录异常发生的顺序,方便...

    Java虚拟机规范(Java SE 7 中文版

    3. 类数据共享(Class Data Sharing, CDS):此功能允许JVM在启动时共享已经编译的类数据,减少启动时间和内存占用。 4. 并发与多线程:Java SE 7引入了Fork/Join框架,这是一种用于并行执行任务的高级框架,适用于...

    JAVA SE8 虚拟机规范

    4. **类加载优化**:包括类数据共享(Class Data Sharing)、动态链接优化等,以减少启动时间和内存占用。 5. **动态类型语言支持**:Java SE8引入了Lambda表达式,使得函数式编程风格成为可能。同时,对JSR 292...

    Java运行原理与Java虚拟机.pdf

    还有类数据共享(Class Data Sharing)、动态类文件加载等技术,进一步优化了Java程序的启动速度和运行效率。 总的来说,Java运行原理与Java虚拟机的紧密配合使得Java成为一种跨平台、安全且高效的语言。通过理解...

    Java面试题虚拟机片源码资料

    - 类数据共享(Class Data Sharing, CDS)减少启动时间。 - 字符串常量池的位置和优化。 - 使用String.intern()方法的注意事项。 7. **JVM字节码指令**: - 了解基本的字节码指令,如aload、istore、...

    JDK9-JSE-Java Virtual Machine Guide-67.pdf

    5. **类数据共享(Class Data Sharing,CDS)**:CDS允许JVM在启动时共享已经编译的类,减少内存占用并加快启动速度。JDK 9增强了这一功能,支持动态档案集(Archive Sharing),使得运行时也能受益于类数据共享。 ...

    JVM Spec PDF

    同时,JVM的类加载过程也更加高效,通过改进的类数据共享(Class Data Sharing)技术,可以在启动时分享已编译的类数据,加快应用启动速度。 JVM Spec PDF中还会详细阐述JVM的运行时数据区,包括堆内存(Heap)、...

    深入理解Java7核心技术与最佳实践

    另外,类数据共享(Class Data Sharing,CDS)功能使得启动时间得以优化,通过预加载类到共享存档,减少了应用程序的启动时间。 在I/O方面,NIO.2(New IO 2.0)提供了文件系统API的增强,支持异步文件操作和路径...

    java版本8,官网下载太麻烦

    此外,JVM还增强了动态编译(JIT)和类数据共享(Class Data Sharing),进一步提升了运行时性能。 总结来说,Java 8通过引入Lambda表达式、Stream API、日期和时间API的改进、Optional类以及优化的垃圾回收机制,...

    JVM详细概述与优化大全.zip

    2. **类加载优化**:避免过多的类加载,减少类装载器的内存占用,利用类数据共享(Class Data Sharing, CDS)技术来缓存已加载的类。 3. **代码优化**:通过JIT编译将热点代码编译为机器码,提高执行效率。使用...

    jvm优化学习资源学习及讲义说明

    9. **类数据共享**:理解CMS和G1收集器中的类数据共享(Class Data Sharing,简称CDS)功能,可以减少JVM启动时间。 10. **JVM性能指标**:学习如何分析和解读重要的性能指标,如吞吐量、响应时间、Full GC次数、...

    JDK 6 文档

    - **类数据共享(Class Data Sharing, CDS)**:允许在启动时分享已加载的类数据,减少了JVM的启动时间和内存占用。 - **动态代码生成优化**:JDK 6增强了Just-In-Time (JIT) 编译器,能够更好地识别并优化热点...

    jdk1.6下载

    - **类数据共享**:引入了Class Data Sharing (CDS)技术,允许JVM在启动时共享已加载类的数据,从而加快启动速度。 3. **安全强化** - **更强的加密功能**:升级了默认的加密算法,增强了安全性。 - **改进的...

    jdk-9.0.4_windows-x64_bin.zip

    6. 类数据共享(Class Data Sharing,CDS):这是一个性能优化特性,允许JVM在启动时共享已加载的类数据,从而减少启动时间和内存占用。 7. 多版本兼容性(JEP 238):Java 9支持在同一JRE中运行不同版本的Java应用...

    Java JDK 1.8 64位 Windows

    - 类数据共享(Class Data Sharing)和压缩类空间(Compressed Class Space)进一步减少了内存占用。 6. **开发工具**: - `jvisualvm`:集成在JDK中的多合一性能分析工具,包含CPU、内存、线程等监控功能。 - `...

    JDK1.6中文帮助文档二

    - **类数据共享(Class Data Sharing)**: 支持在启动时预加载类,减少启动时间。 - **JNI(Java Native Interface)**改进:提高了与本地代码交互的效率和安全性。 4. **库和API增强**: - **Swing组件更新**: ...

    jdk7 linux 64位.rar

    - 类数据共享(Class Data Sharing, CDS):允许JVM在启动时加载预先打包的类数据,提高启动速度。 了解这些知识点后,开发者可以更好地利用JDK 7在Linux 64位系统上构建和运行Java应用,享受到更高的性能和更丰富...

    Java SE Development Kit 13.0.2 x64.zip

    3. **JEPs(JDK Enhancement Proposals)**:Java 13包括了几个JEPs,如JEP 350(Dynamic CDS Archives),它允许在运行时创建类数据共享(Class Data Sharing)归档,从而在启动时提高性能。还有JEP 354(JVM ...

    java-jdk1.8-jdk-8u202-linux-x64.zip

    - 类数据共享(Class Data Sharing, CDS):可以优化启动时间,通过预先加载类数据到共享归档文件来减少JVM启动时的内存占用。 - 对JSON支持的增强:包括内置的JSON-P(Java API for JSON Processing)和JSON-B...

    Java语言规范和JVM规范(7、8、9)

    - 引入了JEP 243:Class Data Sharing,提升了启动性能。 这些规范文档对于深入理解Java平台的工作原理、编写高质量的代码以及优化应用程序性能具有重要意义。通过阅读和学习这些官方文档,开发者可以更好地掌握...

Global site tag (gtag.js) - Google Analytics