Java同享类[Java编程]
本文“Java同享类[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
要真正彼此断绝 Java 利用程序,实质上需求多个 JVM,但是启动本钱和内存占用使这种方法不那么抱负.而同享类可以同时办理这两个问题.在多 JVM 环境中,同享类通过将一组核心系统类装载到同享内存中,可以在多个 JVM 中同享这些类.这些同享类放到内存的一个同享区域中,它们在这里对全部 JVM 都是保持一致的.后果,同享类只需求在第一次利用时装载到内存中,这消除了在今后每次 JVM 调用时装载它们的固定本钱,并削减了每个 JVM 中的内存占用.
IBM 在 z/OS 平台上实现了同享类技术.Apple Computer Inc. 在 Mac OS X 上实现了名为 Java Shared Archive(JSA)的一种同享类,而 Sun 在 J2SE 1.5 版中引入了基于 JSA 技术的 Class Data Sharing (CDS).让我们解析一下这些实现是若何工作的.
IBM 的实现
自 J2SE 1.3.1 以来,IBM 就在 z/OS 平台上供应了同享类技术的实现.这种实现是通过让一个主(或称 master) JVM 将核心系统类装载到同享内存完成的,那么这毕竟是什么意思呢?
分化堆
内存分为同享堆和 Java 堆.主 JVM 将系统堆(即同享堆)分配到同享内存中,这里是安排系统类的地方.系统堆在主 JVM 的生存周期中一向存在,并且不会遭到垃圾汇集(GC)的影响.每一个后续(大概 worker)JVM 附加到这个系统堆上,如图 1 所示,并为自己的 Java 堆分配非同享内存,它会受垃圾汇集的影响.Java 堆包含特定于每一个 worker JVM 运行的利用程序的非同享类和全部实例化的对象.
图 1. 同享类分化堆
同享类装载器
每个 worker JVM 都可以通过将类放到同享类装载器的 classpath 中而将它们装载到同享堆中.同享类与普通类的装载方法一样——利用 parent-delegation 情势.
层次构造中的每一个类装载器查抄其缓存,肯定这个类能否已经装载.假如还没有装载,那么类装载器就向其父类装载器传送一个查抄装载恳求,这样一向上溯到层次构造顶部的 primordial 大概 bootstrap 类装载器.假如没有在任何缓冲区中发现这个类,那么每一个类装载器城市试图从自己的存储库中装载这个类,假如成功,就返回这个类.不然,它将恳求传送给层次构造中下面的装载器.这种模子保证了首先查抄最受信任的存储库,并避免信任程度低的代码通过采取与核心 API 成员相同的名字替换受信任的核心 API 类.
假如类是 primordial 类大概定义的类装载器是同享类装载器,那么类对象将在同享堆中成立,并且类标志为同享类.图 2 显示了 bootstrap 类装载器位于类装载器层次构造的顶部,并负责装载核心 API 中的类.这些类是信任程度最高的.扩大类装载器装载 extensions 目录中的尺度扩大 JAR 文件中的类.同享利用程序类装载器可以用于同享用户大概利用程序类.
图 2. 类装载器层次构造
以上是“Java同享类[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |