自从java出来以后,这个星球就有了各种JVM,但是java的标准只有一个,而各大JVM都有其独特的一面,开发兼容各大jvm的应用程序应注意以下问题:
1)加密解密要避免使用com.sun.crypto.provider的包,而应改用org.bouncycastle的包;
2)编码解码要避免使用sun的包,如:sun.misc.BASE64Encoder要改用apache的commons-codec-1.3.jar;
3)org.w3c.dom的包,虽然在openjdk的早期版本中没有包含,但仍可使用,因其开源,随处可取;
4)早期的ASM及spring中有bcel的引用,应改为使用apache的bcel;
5)IBM的j9vm中不包含任何以sun为包名起始的内容;
6)BM的j9vm与oracle或sun的hotspots虚拟机在内存管理及线程同步方面机制及其不同,在使用同步锁时要极为小心,反复测试。
多年来,Oracle一直在提醒开发者,调用sun.*包里面的方法是危险的。关于这点,读者可以阅读Oracle博客上的说明文章“为什么开发人员不应该调用‘sun’包”。总之,使用这些已弃用的特性很容易出问题。随着平台的变化,它们可能随时被转移、删除或者更改语义。
然而,如果你使用了感知调用者的行为,也无需失去信心。JDK增强提案(JEP176)呼吁提高JDK方法处理的实现的安全性,使用可以可靠地识别的感知调用者方法的机制代替现有的人工维护的方法列表。
|
所有评论仅代表网友意见