Atitit.提升api兼容性的方法 v3 q326
Atitit.提升api兼容性的方法 v3 q326
1. Atitit.兼容性的“一加三”策略
“通过移除陈旧代码降低编译器维护成本,Java9 javac 将不再支持Java 1.5以及更早的代码。JDK9的“一加三”策略意味着该版本的javac会支持1.9/9, 1.8/8, 1.7/7和1.6/6 中的选项。该策略会在JDK10中延续。”
标题是我对新闻的解读。以下是我的理解。
这意味着,许多java最初的设计不合理会修改了。
将带来许多源代码级的不兼容性。
一些表达式,可能在早期编译结果false,以后可能变成true了。
比如String的==
也意味着Integer i = new Integer(0);Integer j = new Integer(0);
i==j以后也可能是true了。
作者:: ★(attilax)>>> 绰号:老哇的爪子 ( 全名::Attilax Akbar Al Rapanui 阿提拉克斯 阿克巴 阿尔 拉帕努伊 ) 汉字名:艾龙, EMAIL:1466519819@qq.com
转载请注明来源: http://www.cnblogs.com/attilax/
2. 2. 扩展表模式
3. 3. 同时运行模式
网上冲浪,用户用的最多的当然是浏览器,而Windows中内置的IE浏览器却着实让用户用的不爽,于是呼,在国内许多双核浏览器便大行其道。这 不,微软也觉得不好意思了,在Windows 10中新增加了一个浏览器-Spartan,这款整合了微软自家 Cortana 数字助理的新浏览器有桌面和移动两个版本,并深度融合了 Bing 搜索服务,让用户的搜索体验更加无缝。
它将集成OneNote功能,方便用户进行记录,标注与分享,支持PDF文件显示,此外还有阅读模式等等的特性有消息称它将支持Chrome扩展程序。全新游览器开发代号“斯巴达”。
不过消息显示,新老浏览器初期将会共存,一方面是避免突然切换造成兼容性问题,另一方面也可以给用户更灵活的选择,直到微软确定新浏览器足以取代IE,才会彻底转换过去。
3.1. 3.1. 完美的后向兼容性
3.2. 3.2. 虚拟机模式
3.3. 3.3. 版本兼容性模式
、
4. 4. 向前兼容(为升级预留足够余地)
5. 5. “向前兼容”理念
所 以对于已经处于垄断地位的公司,要居安思危,更是要敢于革自己的命,方能迎来更长久的成功。比如早期的英特尔公司虽然在存储领域占有垄断地位,但是其看到 CPU市场更长久的未来,毅然投入到CPU的研发之中,才有了今天的成功。但是同样是英特尔公司,在CPU方面抱着“向前兼容”理念,让Atom芯片背着 枷锁而跳舞,在全球嵌入式芯片的市场,让ARM的芯片独领风骚。同样微软在移动操作系统领域,背着兼容Windows操作风格的负担,让微软的移动操作系 统远远落后于专为移动设备而设计的iOS和安卓系统。相反谷歌却是让人称道,其在保持自己在搜索领域优势的基础上,不仅成功推出了安卓操作系统,目前又在 机器人、智能汽车、可穿戴设备等领域提前布局。
6. 6. 专门处理的软件列表
我首先是从一个流行的游戏-模拟城市的开发者那边听到这样的事情的。他说模拟城市有个很致命的bug:它在释放完内存之后便立刻重新使用内存。在DOS环境下,这样的做法幸好不会是个什么问题。但是,在Windows下面,一个程序释放的内存,很可能会立即被另一个程序获取并使用,所以这样的做法是绝对不允许的。Windows开发团队的测试人 员测试了若干个流行的应用程序,并且搞定了它们,但是模拟城市一直出现问题。他们将问题反映给了开发人员。后者将模拟程序给研究了个彻底,找出问题的根 源,并添加了特殊的代码去检查模拟城市是否有运行,如果有运行的话,便将内存管理器运行为特殊模式,在此模式下,程序能够使用释放过的内存。
这并不是什么稀罕的事情。Windows的测试团队是庞大的,而他们最重要的责任就是要确保所有人都可以顺利的升级他们的操作系统,不管他们安装了哪些应用软件,无论这些应用软件是否使用了不公开的旧系统接口还是依赖有问题的系统资源。实际上,如果你去查阅Windows注册表中的软件兼容性部分,你会发现里面有很长的一个被专门处理的软件列表。新版Windows会专门模拟一些旧系统中的bug使得这些软件可以正常运作。
7. 新api vs 修改旧的api
最好是增加新的api。。这样不用调整老的api..添加测试工作...
当然一些很小的的调整可以直接调整老的api
8. Threadlocal
它还有一些类似的方式用来使用,就是在框架级别有很多动态调用,调用过程中需要满足一些协议,虽然协议我们会尽量的通用,而很多扩展的参数在定义协 议时是不容易考虑完全的以及版本也是随时在升级的,但是在框架扩展时也需要满足接口的通用性和向下兼容,而一些扩展的内容我们就需要 ThreadLocal来做方便简单的支持。
简单来说,ThreadLocal是将一些复杂的系统扩展变成了简单定义,使得相关参数牵连的部分变得非常容易,以下是我们例子说明:
9. ref
Java中ThreadLocal无锁化线程封闭实现原理 – 码农网.htm
atitit.提升兼容性最佳实践 p825.doc - attilax的专栏 - 博客频道 - CSDN.NET.htm