快速业务通道

Java技术,IBM风格: 类共享 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17
ut enabled] JVMSHRC158I Successfully created shared class cache "cache1" JVMSHRC166I Attached to cache "cache1", size=16777176 bytes Hello JVMSHRC168I Total shared class bytes read=0. Total bytes stored=1176392

verboseIO 选项将每个类装载请求的一个状态行输出到缓存。为了理解 verboseIO 输出,应该了解类装载器的层次结构,这样才能看出哪些类是由非引 导类装载器装载的。在寻找类时,每个类装载器必须沿着层次结构向上委托请求 ,直到到达引导装载器。在输出中,每个类装载器被赋予一个惟一的 ID,引导装 载器的 ID 总是 0。

注意,有时候即使类已经被缓存了,verboseIO 仍然显示从磁盘装载类并存储 到缓存中,这是正常的。例如,从应用程序类路径中的每个 JAR 装载的第一个类 总是从磁盘装载并存储,无论它是否在缓存中存在。

在 清单 8 中,第一部分演示缓存的填充,第二部分演示缓存类的读取:

verboseHelper 子选项(见 清单 9)是一个高级选项,提供来自 Helper API 的状态输出。设计它是为了帮助使用 Helper API 的开发人员了解 Helper API 的操作方式。关于此输出的更多细节见 JVM 诊断指南(参见 参考资料 中的链接 )。

Java技术,IBM风格: 类共享(5)

时间:2011-05-20 IBM Ben Corrie

运行时字节码修改

运行时字节码修改正在成为将功能加入 Java 类的流行方法。可以使用 JVM Tools Interface(JVMTI)钩子执行运行时字节码修改(参见 参考资料 中的链 接);另外,类装载器还可以在定义类之前替换类字节码。这给类共享带来了额 外的挑战,因为一个 JVM 可能缓存经过修改的字节码,共享同一个缓存的另一个 JVM 不应该装载它们。

但是,由于 IBM 共享类实现的动态性质,使用不同修改方式的多个 JVM 可以 安全地共享同一个缓存。实际上,如果字节码修改的开销很大,那么对经过修改 的类进行缓存有很大的好处,因为变换只需要执行一次。惟一的要求是字节码修 改应该是确定性的且可预测的。修改并缓存一个类之后,就不能再修改它。

可以使用 -Xshareclasses 的 modified=<context> 子选项共享经过修 改的字节码。上下文是一个用户定义的名称,它在缓存中创建一个分区,这个 JVM 装载的所有类都存储在这个分区中。要使用这个修改版字节码的所有 JVM 都 应该指定这个上下文名称,这样就会从这个缓存分区装载类。如果使用同一个缓 存的 JVM 没有指定 modified 子选项,就会按一般方式寻找并存储类。

潜在的陷阱

如果 JVM 注册了 JVMTI 代理来修改类字节码,而且没有 使用 modified 子 选项,那么仍然可以安全地管理其他一般 JVM 或使用其他代理的 JVM 之间的类 共享,但是由于要进行额外的检查,会有一点儿性能开销。因此,使用 modified 子选项总会提高效率。

注意,只有在 JVMTI 代理存在的情况下,JVM 才能意识到将进行字节码修改 。因此,如果定制的类装载器在定义类之前修改类字节码,但是没有使用 JVMTI 和 modified 子选项,那么就假设定义的类是未修改的,其他 JVM 就无法正确地 装载它们。

关于共享经过修改的字节码的更详细信息,请参考 JVM 诊断指南(参见 参考 资料)。

使用 Helper API

IBM 提供了共享类 Helper API,使开发人员能够将类共享支持集成到定制的 类装载器中。只有未扩展 java.net.URLClassLoader 的类装载器才需要 Helper API,因为扩展 java.net.URLClassLoader 的类装载器会自动继承类共享支持。

对 Helper API 的全面介绍超出了本文的范围,但是这里给出一个一般性概述 。如果想详细了解 Helper API,在 下载 一节中可以找到完整的 Javadoc,诊断 指南(参考资料)也提供了更多信息。

Helper API:概述

所有 Helper API 类都在 com

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号