所以Java团队引入了类数据共享机制 (Class Data Sharing ,简称 CDS) 的概念,通过把一些核心类在每个JVM间共享,每个JVM只需要装载自己的应用类即可。好处是:启动时间减少了,另外核心类是共享的,所以JVM的内存占用也减少了。 历史版本 JDK5引入了Class-Data Sharing可以用于多个JVM共享class,提升启动速度,最早只支持syst...
java-Xshare:dump-XX:+UseAppCDS-XX:SharedClassListFile=helloworld.lst-XX:SharedArchiveFile=helloworld.jsa-cptarget/helloworld.jar 如果使用Oracle JDK 10,使用如下命令 java-Xshare:dump-XX:+UnlockCommercialFeatures-XX:+UseAppCDS-XX:SharedClassListFile=helloworld.lst-XX:SharedArchiveFile=helloworld.jsa-cp...
这里我们用到三个启动参数:-Xshare:off(禁止共享类数据),-XX:DumpLoadedClassList(记录所有被装载的类),-XX:+AppCDS(-XX:DumpLoadedClassList默认只包含启动类装载器装载的类,该参数会把系统类装载器和平台类装载器也包括进来)。运行下面的命令: /Library/Java/JavaVirtualMachines/jdk-10.jdk/Contents/Home/bin...
为G1 垃圾收集器引入并行 Full GC。 JEP 310: Application Class-Data Sharing Java 之前就引入了类数据共享机制,Class data sharing (CDS) ,以减少 Java 程序的启动时间,降低内存占用。简单来说,Java 安装程序会把 rt.jar 中的核心类提前转化成内部表示,转储到一个共享的文件中(shared archive)。多个 Java 进...
首先介绍一下 CDS,CDS 全名为 Class Data Sharing,目的是减少Java编程语言应用程序的启动时间,特别是较小的应用程序,并减少内存占用。实现思路是通过JVM调用期间,将共享的归档文件被映射到内存中,从而节省了加载这些类的成本,并允许多个 JVM 进程共享这些类的大部分 JVM 元数据。
在HotSpot VM中用ClassLoader表示类加载器,可以使用ClassLoader::load_class()加载磁盘上的字节码文件,但是类加载器的相关数据却是存放在ClassLoaderData,简称CLD。源码中很多CLD字样指的就是类加载器的数据。每个类加载器都有一个对应的CLD结构,这是一个重要的数据结构,如图2-1所示。
Java 1.5 introduces class data sharing:https://java.sun.com/j2se/1.5.0/docs/guide/vm/class-data-sharing.html This looks a lot like .Net's ngen concept, except it only works on core classes(for .net's equivalence, mscorlib.dll). ...
VM 初始化(图中红色)和 Class loading(图中蓝色)的开销为冷启动的根因。阿里巴巴实现了两类改造:一类为改良型技术,调整优化现有 Java 的框架和运行模型,另外一类为革新型的技术,摆脱原有 Java 框架另起炉灶。 EagerAppCDS 改良型技术中,阿里巴巴主要实现了基于传统 CDS(Class Data Sharing)的 EagerAppCDS。传统 CD...
CDS(Class Data Sharing):CDS是一种优化启动时间和内存占用的技术。在CDS中,类的元数据存储在共享存档中,该存档可以被多个Java虚拟机实例共享。加载类时,JVM可以从共享存档中找到类的元数据,而不是通过常规的类加载过程。CDS主要用于改善系统类加载性能。
アプリケーション・クラス・データ共有(AppCDS)は、CDS(https://docs.oracle.com/javase/8/docs/technotes/guides/vm/class-data-sharing.htmlを参照)を拡張して標準拡張ディレクトリのクラスを有効化し(システム・プロパティjava.ext.dirsで指定。https://docs.oracle.com/javase/8/docs/...