`
totoxian
  • 浏览: 1083256 次
  • 性别: Icon_minigender_2
  • 来自: 西安
文章分类
社区版块
存档分类
最新评论

IBM JDK JVMTI对redefineclass的增强

阅读更多
最近有同事在实现Harmony的instrument包,用到了IBM VME的jvmti,发现该jvmti实现的redefineclass方法严重"违反"specification的"bug",并且IBM JDK 5也有同样的表现。大家都知道instrument允许应用程序在runtime动态修改class在内存中的bytecode,这是java 5的一个重要增强,这个feature是通过jvmti实现的,但是jvmti目前对此还有很多的限制,Java 5 JVMTI的文档对redefineclass方法有这样的固定:

" The redefinition may change method bodies, the constant pool and attributes. The redefinition must not add, remove or rename fields or methods, change the signatures of methods, change modifiers, or change inheritance. These restrictions may be lifted in future versions. "

如果应用试图做这些被禁止的操作,会得到一个UnsupportedOperationException,这一点对于我手头的Java 6 rc b65版本也依然成立(是老了点...可怜可怜下载Sun JDK需要approval的可怜人吧...)。但是在IBM JDK里面,这个限制是不存在的,也就是说,你可以在runtime任意修改class的bytecode, 增删改方法signature和field都可以(还没试过更改继承结构,不过想来也是可以的),尽管有很多AOP框架可以做这个事情,但是原理上JVM直接提供的支持效率会好很多(还没有测试过,有空对比一下AspectJ),脑子里立刻浮现出无数很cool的应用吧,嘿嘿。为了确认这是个有意为之的增强,我还专门到J9的内部站点上raise了一个bug,结果得到的答复果然是: 这是一个intended value add。后来又私下了解了一下,才知道hot code swapping是J9的一个重要卖点,但是奇怪的是为什么JavaOne2006上有关IBM JDK的presentation并没有提到这一点呢?呵呵。

对了,如果要禁止这个增强,也就是说得到遵守specification的行为,可以在启动JVM的使用加上-Xfuture参数,诡异,难道不应该叫-Xnofuture么? ;-)

Update: 犯乐观主义错误了,测试过了,更改类继承结构是不行的...:(
分享到:
评论

相关推荐

    IBMJDK1.6linux.zip

    IBM JDK 1.6是IBM公司为Java开发者提供的一个针对Linux 64位操作系统的Java开发工具包。这个版本的JDK是Java平台标准版(Java SE)的一部分,主要用于开发和运行Java应用程序、Web应用程序以及企业级应用。IBM JDK与...

    IBMJDK1.6版本sdk

    IBMJDK1.6版本sdk

    IBM JDK1.6 安装版

    IBM JDK1.6 安装版

    ibm jdk1.6 ibm 64

    IBM Webpshere 8.5.0ND版自带的商业JDK,版本信息如下: java version "1.6.0" Java(TM) SE Runtime Environment (build pwa6460_26sr2ifix-20120419_02(SR2+IV19661)) IBM J9 VM (build 2.6, JRE 1.6.0 Windows ...

    ibmjdk1.6.0.rar

    IBM JDK 1.6是IBM公司为Java开发者提供的一个Java Development Kit版本,它与Oracle的JDK相似,但包含了IBM特有的优化和功能。这个版本在2007年发布,支持Java SE 6规范,提供了运行Java应用程序和开发Java应用程序...

    ibmjdk1.6版本

    【IBM JDK 1.6版本详解】 IBM JDK(Java Development Kit)是IBM公司提供的Java运行环境和开发工具集,主要用于支持Java应用程序的开发、编译、调试和运行。这个特定的版本,即“ibmjdk1.6”,是针对Windows操作...

    ibm jdk策略文件,解决加解密限制

    IBM JDK是一个由IBM提供的Java实现,它有自己的安全策略,可能会与Oracle JDK有所不同。 在"ibm jdk策略文件,解决加解密限制"这个主题中,我们关注的是IBM JDK 5.0版本中的加密限制问题。默认情况下,IBM JDK可能...

    IBM jdk 6

    IBM jdk 6 ,IBM 的 java 开发工具包

    ibm_JDK.rar

    IBM JDK的核心特性之一是其对Java平台的优化,特别是对于大型企业级应用的支持。IBM JDK提供了针对IBM AIX、Linux、Windows等操作系统平台的定制化实现,确保在这些平台上运行的Java应用程序能获得最佳性能。例如,...

    ibm_jdk1.7.0_x64.zip

    IBM JDK 1.7 for Windows x64 是IBM公司针对Java Development Kit (JDK)的一个特定版本,专门设计用于64位的Windows操作系统。这个版本的JDK是Java编程语言和平台的重要组成部分,它提供了开发和运行Java应用程序所...

    IBMJDK1.5linux.zip

    首先,IBM JDK 1.5在兼容性方面进行了加强,确保了与Oracle JDK 1.5的源代码兼容性,这意味着开发者可以在IBM JDK环境下编写和运行已经在Oracle JDK上测试过的Java程序。同时,IBM JDK也针对Linux 64位架构进行了...

    IBM_jdk1.5_Guide.zip_IBM jdk 1.5_aix_ibm java1.5_ibm jdk1.5 wind

    IBM JDK 1.5,全称为IBM Java Development Kit 1.5,是IBM公司为AIX操作系统提供的一个Java运行环境,特别针对AIX平台进行了优化和定制。在AIX系统中进行开发工作时,IBM JDK 1.5扮演着至关重要的角色,因为它提供了...

    ibm jdk 1.7 64

    IBM JDK 1.7 64位是在AIX操作系统环境下使用的Java开发工具包,它针对64位架构进行了优化,提供了高效能的Java运行环境。AIX(Advanced Interactive eXecutive)是IBM公司开发的一种UNIX操作系统,常用于大型企业级...

    IBM_JDK_V8.rar

    2. **安全性增强**:IBM JDK提供了强化的安全特性,以保护应用程序免受恶意攻击。这包括更安全的加密算法、安全管理器的增强以及对最新安全漏洞的快速响应。 3. **内存管理**:IBM的垃圾收集器经过优化,能更有效地...

    IBM JDK 垃圾收集及存储分配技术

    ### IBM JDK 垃圾收集及存储分配技术详解 #### 一、概述 IBM JDK(Java Development Kit)作为Java运行环境的重要组成部分,其垃圾收集(Garbage Collection, GC)及存储分配技术对于优化应用程序性能至关重要。...

    ibm jdk diagnostic reference

    IBM JDK诊断参考指南是针对IBM Developer Kit和Runtime Environment,Java技术版的第6版的诊断指南文档。这份指南包括了Java虚拟机(JVM)的基础知识,以及如何使用IBM JDK进行Java应用的诊断。 首先,文档提到...

    ibm jdk1.5 fou linux

    IBM JDK 1.5 for Linux 是IBM公司针对Java Development Kit (JDK)的一个特定版本,专为Linux操作系统设计。在Java开发和运行环境中,JDK是核心组件,它包含了Java虚拟机(JVM)、编译器、类库以及其他工具,使得开发者...

    ibm版jdk1.8 for linux x64

    ibm版本的jdk1.8 for linux x64,已测试可用,安装无需root权限

    IBM-jdk7-win64

    而IBM JDK则是IBM对这个标准的实现,它提供了与Oracle JDK相似的功能,但可能包含一些特定的性能优化和增强特性,尤其在大规模企业级应用中表现突出。 IBM JDK 7是基于Java 7版本的,Java 7(又称为Java SE 7)是...

    ibm JDK5.0 for linux

    ibm JDK5.0 for linux 这个东西很难下的,

Global site tag (gtag.js) - Google Analytics