Java技术,IBM风格: 类共享

在 Java 虚拟机(JVM)进程之间共享已经装载的类,这种概念并不是新的。 例如,Sun 的 CDS 特性将系统类写到一个只读文件中,这个文件在内存中映射到 JVM。IBM z/OS 1.4.2 JVM 中的 Shiraz 特性使用一个主 JVM 填充类缓存 ,然后从 JVM 可以共享这个类缓存。

JVM 5.0 的 IBM 实现进一步发展了 这个概念,允许将所有 系统类和应用程序类存储在共享内存中一个一致的动态类 缓存中。在支持 JVM 的 IBM 实现的所有平台上都支持这个共享类 特性。这个特 性甚至支持与运行时字节码修改进行集成,这将在本文 后面 讨论。

共享 类特性是从头设计的,它是一个可以打开和关闭的选项,可以减少虚拟内存占用 并改进 JVM 启动时间。因此,它非常适合多个 JVM 运行相似代码的环境或者 JVM 常常重新启动的环境。

除了 JVM 及其类装载器中的运行时类共享支 持之外,还有一个公共的 Helper API,可以将类共享支持集成到定制的类装载器 中,本文将 详细 讨论这个问题。

它如何工作

我们先看看共享类 特性如何操作的技术细节。

启用类共享

启用类共享的方法是将 - Xshareclasses[:name=<cachename>] 添加到现有的 Java 命令行上。当 JVM 启动时,它寻找给定名称的类缓存(如果没有提供名称,那么选择一个默认 名称),并按照需要连接现有的缓存或创建一个新的缓存。

使用参数 - Xscmx<size>[k|m|g] 指定缓存的大小;这个参数只应用于 JVM 创建新缓 存的情况。如果省略这个选项,那么选择一个与平台相关的默认值(通常是 16MB )。注意,一些操作系统设置可能会限制可分配的共享内存量,例如 Linux 上的 SHMMAX 通常设置为大约 20MB。这些设置的细节可以在适当的用户指南的 Shared Classes 部分中找到(参见 参考资料 中的链接)。

类缓存

类缓存 是一个大小固定的共享内存区,它在使用它的 JVM 的生命周期之外仍 然持久地存在。一个系统上可以有任意数量的共享类缓存,这只受操作系统设置 的限制;但是一个 JVM 在它的生命周期中只能连接一个缓存。

JVM 并不拥有缓存,也没有主/从 JVM 的概念;实际上,任意数量的 JVM 都 可以并行地读写缓存。在两种情况下会删除缓存:使用 JVM 实用程序显式地销毁 它,或者操作系统重新启动时(缓存无法在操作系统重新启动时持久存在)。缓 存的大小无法增长,当它被填满时,JVM 仍然可以从其中装载类,但是不能再向 其中添加任何类。有许多用来管理活动缓存的 JVM 实用程序,后面的 “共享类 实用程序” 一节将讨论这些程序。

如何对类进行缓存?

当 JVM 装载一个类时,它先查看需要的类是否已经在缓存中存在。如果是这 样,那么它从缓存装载这个类。否则,它从文件系统装载这个类并将其写到缓存 中(在 defineClass() 调用中进行这一操作)。因此,不进行共享的 JVM 采用 以下类装载器查找次序:

类装载器缓存

父类装载器

文件系统

与其相反,进行共享的 JVM 采用以下次序:

类装载器缓存

父类装载器

共享缓存

文件系统

使用公共的 Helper API 在缓存中读写类,这个 API 已经集成到了 java.net.URLClassLoader 的 IBM 实现中。因此,任何扩展 java.net.URLClassLoader 的类装载器都会自动地获得类共享支持。

时间: 2024-09-02 19:57:01

Java技术,IBM风格: 类共享的相关文章

Java技术,IBM风格: IBM Developer Kit简介

针对 Java 平台 5.0 版本的 IBM Developer Kit 标志着显著的进步,它在语言特性和底层执行技术方面有重大改进.本文是一个分 5 部分的文章系列的第一篇,概述了 IBM 对它的虚拟机技术所做的一些主要改变和改进,包括传统的垃圾收集.共享类数据,以及在监视和调试工具及 API 方面的改进.但是,在讨论 IBM 实现的改进之前,我们先看看 Java 5.0 本身的改进. Java 5.0 的改进 自从引入 Java 2 平台以来,Java 2 Standard Edition(

Java技术,IBM风格: 监视和判断问题

随着时间的推移,IBM 为它的 Java 运行时实现开发了许多监视和问题诊断设施.利用这些工具,IBM 支持团队.Java 应用程序开发人员和生产操作人员可以诊断和解决在 Java 开发中遇到的问题. 本文讨论三种主要的设施,因为它们是在 Java 技术的 IBM 实现的最新版本中实现的:跟踪引擎.转储引擎和 DTFJ 工具 API.它们都有助于 Java 开发人员判断问题的根源. 跟踪引擎 在判断软件的问题时,跟踪信息是一种强大的工具:可以使用它有效地研究问题场景(比如功能性错误.竞争状态和性

Java技术_基础技术(0003)_类执行顺序详解+实例(阿里面试题)+详细讲解+流程图

Java技术_基础技术(0001)_后台模拟调用action Java技术_基础技术(0002)_中间件启动class加载顺序(以tomcat为例) Java技术_基础技术(0003)_类执行顺序详解+实例(阿里面试题)+详细讲解+流程图 Java技术_基础技术(0004)_eclipse远程调试tomcat 基础技术: 对于java类各个成员的执行顺序,现拿出阿里的面试题作为样例(例子非常好,是用心出的题),在这里重新说明一下java类执行顺序的原则. 源码下载(包含题.结果.分析过程) 一.

企业Java技术开发技巧2则

技巧 欢迎阅读本期的 Enterprise Java Technologies Tech Tips.下面你将获得使用企业 Java 技术和 API 的技巧,如 Java 2 Platform 和 Enterprise Edition (J2EE) 中的 Java 技术和技巧. 本文讨论: 自定义标记文件 和 JSP Pages 一同使用 Enterprise Beans 这些技巧是使用 Java 2, Enterprise Edition, v 1.4 SDK 开发的.您可以下载 SDK,网址为

Java技术实现数据库应用系统慨述

Java语言是Sun MicroSystems 公司于1995年正式命名并推出的一种面向对象的编程语言-OOP(abbr.Object Oriented Programming).Sun 公司说:Java 程序设计语言被设计成是 by programmers for programmers,其随着 Internet 的发展而广为流行.用它开发的系统"一次开发,到处运行"的特色以及程序开发设计时所体现出的面向对象的思想深深地触动着人们.它的语言简洁.集多种程序设计语言之大成,且面向对象.

Java技术_每天掌握一种设计模式(001)_设计模式概念及分类

Java技术_每天掌握一种设计模式(001)_设计模式概念及分类 Java技术_每天掌握一种设计模式(002)_使用场景及简单实例(创建型:单例模式) Java技术_每天掌握一种设计模式(003)_使用场景及简单实例(创建型:工厂方法) Java技术_每天掌握一种设计模式(004)_使用场景及简单实例(创建型:抽象工厂) Java技术_每天掌握一种设计模式(005)_使用场景及简单实例(创建型:建造模式) Java技术_每天掌握一种设计模式(006)_使用场景及简单实例(创建型:原型模式) 1.

java的md5加密类(zt)

加密 java的md5加密类 MD5算法是将数据进行不可逆加密的算法有较好的安全性,在国内如寿信的安全支付平台就采用此算法. 源代码如下/************************************************MD5 算法的Java BeanLast Modified:10,Mar,2001*************************************************/ import java.lang.reflect.*; /************

XML 和 Java 技术: 数据绑定的多种用法

xml|数据 除将 XML 用作一种简单数据格式之外,数据绑定是 XML 最流行的用法之一.即使刚刚入门的程序员也能在一种原生编程语言中使用 XML,并且在大多数情况下完全不需要任何的 XML 专门知识.本文并不是介绍解决方案,取而代之,Brett 介绍了一些讨论主题,鼓励您思考如何使用 XML 和数据绑定.欢迎在 XML 和 Java 技术讨论论坛上与别人一起分享您的想法. XML 用于业务而非技术 随着 XML 的日趋盛行,人们也越来越注重可用性.换句话说,程序员和管理者并不希望把 XML

2005年Java技术年度综述:融合与开放

2005年是Java10诞生10年,全世界的Java程序员通过不同的方式为Java庆祝生日,10年前还很幼稚的小东西,今天已经成为软件业的一个重要体系.在10年的发展历程中Java阵营诞生了许多杰出的思想,这些思想演化成众多的开发架构和开发工具,也因此导致Java技术派系众多,让架构师难于选择,应用系统复杂而且昂贵.为了这解决这个问题,Java专家们们提出一系列的新的技术规范,这些技术的目的就是使Java更简单,不仅仅是Java语言,还包括开发工具和框架.融合与开放成为2005年Java发展的主