快速业务通道

Java共享类 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-18
上注册的)不用装载它就可以访问这个类。

图 5. Namespace 跨 JVM 共享

Java共享类 - 编程入门网

Java共享类(3)

时间:2011-02-28 IBM Lakshmi Shankar

保护域

类装载器有一个或者多个代码源对象(从其中装载类的 JAR 文件或者目录)。这些对象用于创建保护域,它被传递给 defineClass() 方法调用。使用共享类的其他 JVM 将需要这个信息,但是不能共享保护域,因为它们包含本地信息。为了解决这个问题,将代码源放到系统堆中。打包信息也需要共享。

竞争条件

由于 JVM 会读取和写入共享数据,需要有一种方法处理竞争条件。最简单的方式是使用全局块。不过,出于性能和伸缩性的原因,应当谨慎地使用它们。

一种避免锁住所有 JVM 的方法是使用开放式原子更新(optimistic atomic updates)。例如,在装载一个类时,类装载器将检查其 namespace (在检查其自己的本地类缓存后)。如果不能找到这个类,那么它就会装载它。装载后,它会自动检查其他 JVM 没有装载这个类,然后更新 namespace。

全局与本地数据

类中有些信息(如名字)在所有 JVM 中都是一样的,而另一些信息要求是本地的,如装载这个类的类装载器。 每个 JVM 都需要有装载这个类时需要它生成的那一部分的本地副本,如图 6 所示。JVM 中类的阴影区域是本地副本。系统中类的非阴影区域是全局部分。

图 6.共享全局数据与共享本地数据

Java共享类 - 编程入门网

共享类时偶尔会出现的一个问题是,当一个 JVM 更新一个类时(比如通过修改静态字段),所有其他 JVM 都会看到这种改变。这种操作是不希望的,它会造成不可预料的结果。为了保证隔离性,每个 JVM 都有每个共享类的所有静态字段的副本。

JIT 编译代码

当属于共享类的代码由即时(just-in-time,JIT) 编译器编译时,它是自动共享的。这意味着不管由哪个 JVM 编译代码,所有 JVM 都会获得性能上的好处(而只有一个承担 JITing 的开销)。

启动器程序

IBM 的实现需要一个启动器(launcher),以便控制 JVM 的创建。这个启动器必须由用户以本机代码编写。如清单 1 显示了一个示例启动器的伪代码:

清单 1. 启动器伪代码

{    create Master JVM (and store returned token*);    while(work to do) {      create a Worker JVM passing in token from Master JVM;      do work on Worker JVM;      terminate Worker JVM;    }    terminate Master JVM; } * token returned from the Master JVM is the address of the shared heap.

Java共享类(4)

时间:2011-02-28 IBM Lakshmi Shankar

Apple 的实现

Apple 的共享类技术实现是 Mac OS X 中的 Java 共享档案(Java shared archive,JSA)。

实质上,JSA 是一个内存映射到共享内存的文件,可以让多个进程(即多个 JVM )访问它。安装了 Java Runtime Environment (JRE) 后,用系统 JAR 文件中的类创建 JSA。这些核心类的内部表示存储在文档中。这个数据是静态的,因此永远也不会改变,这意味着可以共享这些类而不会有任何隔离问题。它还意味着这些类永远不会被垃圾收集。因为 Apple JVM 使用一般性 GC,因此必须保护这些类不被收集。这种保护是通过引入 immortal 对象的概念来实现的,JSA 中的所有类都指定为 immortal。

这种技术在默认情况下是可用的,使用它不需要编写任何特殊的程序——如 IBM 的实现所需要的启动器。这种实现的另一个好处是系统重启后也可以享受它的好处,不局限于特定 JVM 的生存周期。不过,它的缺点是局限于一组核心类,没有提供共享应用程序类或者 JIT 代码的能力。

Sun 的实现

Sun 的共享类技术的实现称为类数据共享(Class Data Sharing,CDS),是 J2SE 1.5 中的新功能。CDS 基于 Apple 的 JSA 实现。

与 JSA 类似

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号