Java技术,IBM风格: 类共享 - 编程入门网
可用系统内存(只适用于 UNIX)。 在 UNIX 上,缓存放在共享内存中,JVM 将一个配置文件写到 /tmp/javasharedresouces,从而让所有 JVM 能够根据名称 找到共享内存区域。 可用虚拟地址空间。 因为进程的虚拟地址空间在共享类缓存和 Java 堆之间 分享,所以增加 Java 堆的大小会减小可以创建的共享类缓存。 一个示例 为了实际演示类共享的好处,本节提供一个简单的图形演示程序。这个程序的 源代码和二进制代码可以从 下载 一节获得。 这个演示程序搜索 jre\lib 目录并打开每个 JAR,在找到的每个类上调用 class.forName()。这会将大约 12,000 个类装载到 JVM 中。演示程序报告 JVM 花了多长时间装载这些类。显然,这是个有点儿不自然的示例,因为这个测试只 进行类装载,但是它确实展现了类共享的好处。我们来运行这个应用程序并看看 结果。 类装载的性能 从 下载 一节下载 shcdemo.jar。 使用清单 10 中的命令,在不启用类共享的情况下两次运行这个测试,从而对 系统磁盘缓存进行 “预热”: 清单 10. 对磁盘缓存进行预热
当出现图 1 所示的窗口时,按下按钮。应用程序将装载类。 图 1. 按下按钮 Java技术,IBM风格: 类共享(7)时间:2011-05-20 IBM Ben Corrie装载类之后,应用程序报告它装载了多少个类以及花费的时间,见图 2: 图 2. 结果 您会注意到,应用程序每次运行时都可能会快一点儿;这是由于操作系统优化 造成的。 现在在启用类共享的情况下运行这个演示程序,见 清单 11。会创建一个新的 缓存,所以这次运行显示了填充新缓存所花费的时间。应该将缓存的大小指定为 大约 50MB,从而确保能够存储所有的类。清单 11 给出命令行和一些输出示例。 如图 3 所示,这次运行花费的时间应该比前几次略微长一点儿,因为演示程 序要填充共享类缓存。还可以使用 printStats(见清单 12)来查看共享类缓存 中存储的类的数量: 图 3. 冷缓存的结果 Java技术,IBM风格: 类共享(8)时间:2011-05-20 IBM Ben Corrie清单 12. 查看缓存类的数量
现在,用同样的 Java 命令行再次启动这个演示程序。这一次,它应该会从共 享类缓存中读取类,见 清单 13。 可以清楚地看到类装载时间方面的显著改进。同样,由于操作系统优化,每次 运行这个演示程序时都应该会看到性能略微提高。运行这个测试所用的是一个单 处理器的 1.6 GHz x86 兼容笔记本,运行的操作系统是 Windows XP: 图 4. 热缓存的结果 还可以测试许多不同的情况。例如,可以使用 javaw 命令并启动多个演示程 序,让它们一起装载所有的类,从而观察并行性能。 在真实的场景中,通过使用类共享获得的 JVM 启动时间收益取决于应用程序 装载的类数量:HelloWorld 这样的简单程序体现不出很大的收益,但是大型 Web 服务器得到的收益肯定很大。无论如何,这个示例说明对类共享进行实验是非常 容易的,所以您可以轻松地测试受益的程度。 Java技术,IBM风格: 类共享(9)时间:2011-05-20 IBM Ben Corrie虚拟内存占用 在多个 JVM 中运行 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |