快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-17

可用系统内存(只适用于 UNIX)。 在 UNIX 上,缓存放在共享内存中,JVM 将一个配置文件写到 /tmp/javasharedresouces,从而让所有 JVM 能够根据名称 找到共享内存区域。

可用虚拟地址空间。 因为进程的虚拟地址空间在共享类缓存和 Java 堆之间 分享,所以增加 Java 堆的大小会减小可以创建的共享类缓存。

一个示例

为了实际演示类共享的好处,本节提供一个简单的图形演示程序。这个程序的 源代码和二进制代码可以从 下载 一节获得。

这个演示程序搜索 jre\lib 目录并打开每个 JAR,在找到的每个类上调用 class.forName()。这会将大约 12,000 个类装载到 JVM 中。演示程序报告 JVM 花了多长时间装载这些类。显然,这是个有点儿不自然的示例,因为这个测试只 进行类装载,但是它确实展现了类共享的好处。我们来运行这个应用程序并看看 结果。

类装载的性能

从 下载 一节下载 shcdemo.jar。

使用清单 10 中的命令,在不启用类共享的情况下两次运行这个测试,从而对 系统磁盘缓存进行 “预热”:

清单 10. 对磁盘缓存进行预热

C:\j9vmwi3223\sdk\jre\bin>java -cp C:\shcdemo.jar ClassLoadStress

当出现图 1 所示的窗口时,按下按钮。应用程序将装载类。

图 1. 按下按钮

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

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

时间:2011-05-20 IBM Ben Corrie

装载类之后,应用程序报告它装载了多少个类以及花费的时间,见图 2:

图 2. 结果

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

您会注意到,应用程序每次运行时都可能会快一点儿;这是由于操作系统优化 造成的。

现在在启用类共享的情况下运行这个演示程序,见 清单 11。会创建一个新的 缓存,所以这次运行显示了填充新缓存所花费的时间。应该将缓存的大小指定为 大约 50MB,从而确保能够存储所有的类。清单 11 给出命令行和一些输出示例。

如图 3 所示,这次运行花费的时间应该比前几次略微长一点儿,因为演示程 序要填充共享类缓存。还可以使用 printStats(见清单 12)来查看共享类缓存 中存储的类的数量:

图 3. 冷缓存的结果

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

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

时间:2011-05-20 IBM Ben Corrie

清单 12. 查看缓存类的数量

C:\j9vmwi3223\sdk\jre\bin>java - Xshareclasses:name=demo,printStats Current statistics for cache "demo": base address = 0x41D10058 end address = 0x44F0FFF8 allocation pointer = 0x44884030 cache size = 52428712 free bytes = 6373120 ROMClass bytes = 45563864 Metadata bytes = 491728 Metadata % used = 1% # ROMClasses = 12212 # Classpaths = 3 # URLs = 0 # Tokens = 0 # Stale classes = 0 % Stale classes = 0% Cache is 87% full Could not create the Java virtual machine.

现在,用同样的 Java 命令行再次启动这个演示程序。这一次,它应该会从共 享类缓存中读取类,见 清单 13。

可以清楚地看到类装载时间方面的显著改进。同样,由于操作系统优化,每次 运行这个演示程序时都应该会看到性能略微提高。运行这个测试所用的是一个单 处理器的 1.6 GHz x86 兼容笔记本,运行的操作系统是 Windows XP:

图 4. 热缓存的结果

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

还可以测试许多不同的情况。例如,可以使用 javaw 命令并启动多个演示程 序,让它们一起装载所有的类,从而观察并行性能。

在真实的场景中,通过使用类共享获得的 JVM 启动时间收益取决于应用程序 装载的类数量:HelloWorld 这样的简单程序体现不出很大的收益,但是大型 Web 服务器得到的收益肯定很大。无论如何,这个示例说明对类共享进行实验是非常 容易的,所以您可以轻松地测试受益的程度。

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

时间:2011-05-20 IBM Ben Corrie

虚拟内存占用

在多个 JVM 中运行

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