为什么很多java程序员都不愿意升级到最新的jdk?

妈她亲我 发布于 2014/11/29 21:50
阅读 5K+
收藏 4
java8发布有一段时间了,很多java程序员依旧使用jdk1.6或者1.7(我甚至还见过用1.5的),不愿意升级。我问过身边java的朋友和群的朋友为什么不升级,得到的回答大致如下:
1、为了稳定。
2、兼容性。
2、够用就行。


第一点我不太理解,为了稳定?这是怀疑Oracle的能力还是程序员对自己能力心虚?为何升级新版jdk后就会带来不稳定因素?
第二点我也不理解,新版jdk跟老版jdk在兼容性上会有问题?????这。。。。。。。
第三点我理解,因为程序员懒了,不想学新东西。




反观.NET这边,我在群里问过大家的项目都是什么版本的framework,回答都是4.0或者4.5的项目,连3.5的都没有。
这就蛮奇怪咧。


OSC的java程序员们,想必你们也是如此吧?来说一说?
加载中
1
南湖船老大
南湖船老大

    年轻人,你刚工作不久,做网站的吧,too young,too simple。    

    我11年在移动的时候,维护着一个庞大的移动客服系统,这个系统是01年就开始的,部分业务是tomcat4 jdk 1.4 oracle 8的,而且还在不断加功能,每推出一个业务就要加一点东西。而且这个系统一直都在工作,频繁的被使用。

    这说明了什么?有些项目的历史远比你想的要久,历史沉积的东西太多,历史包袱也不轻。关键是他们现在工作的很好,扩展性问题不大,性能问题也不大,我为啥要升级?升级能给我带来什么好处?升级的人力物力成本谁出?你以为升级就是下载的新软件丢上去啊,小伙子,too young,too simple!配套的软件(包括操作系统)和硬件也要升级的。有些老服务器的硬件跑新的软件已经很吃力了。

   单纯论代码本身,JDK的向下兼容性非常好,1.5的老代码放在1.7,1.8上没任何问题,但是就是没有必要升级。

  最后,楼主不是对兼容性很吃惊么,能找出个新版和老版不存在兼容性问题的语言么?

妈她亲我
妈她亲我
.NET framework的升级不会删除一些方法,只会把这个方法标记为已过时。同时给你一个连接,让你去学着用新方法,但如果你坚持用老方法,.net framework自然支持。
南湖船老大
南湖船老大
回复 @妈她亲我 : 你确定?虽然我不用NET,但一般语言升级,都会或多或少抛弃甚至删除一些API和方法。自己写的代码可以改下,但是库呢?队友的呢?
南湖船老大
南湖船老大
回复 @妈她亲我 : 到了2014年了,任何已经成熟语言和软件的新版本都不可能有大的性能突破了。能吸引升级的就是API了。那就得看API是否有吸引力。另一方面,还得看你的队友和对手。
妈她亲我
妈她亲我
就我目前的见识,.NET2.0的项目升级到4.0,不存在兼容性问题。
妈她亲我
妈她亲我
可能是我没说清楚,我说的“升级”是指新项目用新的jdk。
1
pseudo
pseudo
开发新项目用jdk1.8,编译出来的class文件只能在1.8或以上的jre下跑。服务器上的jre也要升级到1.8。升级不怕,但如果升级对以前的项目有影响怎么办?难道还在要jre1.8下对以前的项目再做次系统测试?虽然jdk称其具有较好的兼容性,但有时候也不能想当然啊。难道要在同一服务器上安装两个jre? 另外新jdk所谓的一些新特性只是对以前的代码做了封装。试想我多写几行代码就可以搞定为毛要重新安装大了好几十M的jdk。
0
Feng_Yu
Feng_Yu

Java繁杂庞大的体系决定的,java的升级不是平滑的,升级带来的后果就是以前的代码无法运行

再加上IDE这玩意也挑JDK版本的厉害,比如用openjdk运行idea还会弹出警告,用jdk7新引入的泛型写法(List<>,直接菱形写法)直接报警告,说是不兼容jdk6以下版本,让你设置编译级别之类的云云

妈她亲我
妈她亲我
回复 @Feng_Yu : 造成这些原因可能正如你所说:java不能平滑升级。可又是什么原因造成java不能平滑升级的呢?
Feng_Yu
Feng_Yu
回复 @妈她亲我 : 我觉得最主要的原因是每次升级都改动比较大。最致命的是直接废弃掉很多方法,再加上编译方式的改变,导致旧代码无法直接迁移。另外java现在有商业巨头oracle在维护,还有以前sun公司的拥护者不满oracle专政独权,从以前sun公司的分支中扯出来的openjdk维护,都值得信赖。
妈她亲我
妈她亲我
你说的这些,是否是因为java是开源的,没有人会对他负责而造成的?不像.NET有微软负责。
0
Feng_Yu
Feng_Yu

不能平滑升级,带来的后果就是往往不愿意升级,久而久之就成了今天这个局面了。

类似的还有python3不兼容python2,不能平滑升级。python3都出了这么多年了,可以看到现在生产环境依旧在跑Python2,大多数开发依旧使用python2,RHEL6/CentOS6操作系统上的软件仓库连python3都没有

妈她亲我
妈她亲我
回复 @CheckStyle : 额。。。。方向偏了,这应该是讨论java的问题。
CheckStyle
CheckStyle
回复 @妈她亲我 : 服务器EOL了,迁移到新的云平台上,我们决定换成最新的framework,下决心不背这技术债务了。
CheckStyle
CheckStyle
回复 @妈她亲我 : 我只从实战的管理经验来看,2.0的工程想平滑到4.0,真心不大现实。现在部门里有个系统,500多张表,N万行代码。给他们的目标是升级..快年底了,.NET team 的架构师大叔小伙儿在忙,每周给我report报告进度。不知道你说的“平滑”,是如何实现的?如果可以,不妨留个联系方式,我们可以出钱请你做兼职技术顾问
妈她亲我
妈她亲我
回复 @CheckStyle : 似乎是要修改web.config文件而已,不需要改动程序代码。不过为何你2.0的项目硬要用4.0来运行?又没有好处。
CheckStyle
CheckStyle
回复 @妈她亲我 : 很遗憾,其实是不能直接运行在4.0上的。4.0的CLR是全新的。我们才用运行时目标版本激活策略,多多少少改一些配置。公司内部大量2.0开发的内部应用,都在纠结这个问题
下一页
0
CheckStyle
CheckStyle
大型应用,哪儿有这么简单升级的说法?楼主是学生吧?10年前,我还维护过一段1981年写的C代码呢,一个文件上万行...用的库,根本不敢升
妈她亲我
妈她亲我
1、你没有回答。 2、没必要看不起学生吧,你不也是从学生过来的? 3、我不是学生。
0
景愿
景愿

新项目肯定是用最新的1.8u25~


景愿
景愿
回复 @乾坤摄 : 还好,跑了好久了,没发现任何问题
乾坤摄
乾坤摄
你们使用 有点超前呀,以现在jdk 和原来 jdk 版本的换算,现在的1.8u25 ,是 1.8u5版的jdk,这个比较新,没有经过10多次的升级,是不能保证,大部分的坑都没了的,一般我们选的版本都是13开始用的,这个出问题的概率就很小了
Feng_Yu
Feng_Yu
回复 @妈她亲我 : 我们用的是openjdk 7
妈她亲我
妈她亲我
我问的很多人,他们不管是新项目还是老项目,都用一个jdk。那就是jdk1.6。
0
乾坤摄
乾坤摄
这个是技术人员本身导致的,对于自己没有实际用的东西,很多技术人员都有一种先天的忌惮,他们总会说这个技术我们是在,n+个 项目中使用了,没有问题的,升级遇到的风险你来承担吗,其实拿jdk 来收,字节码的兼容还是能保证的,每个class编译后都版本信息的,jdk 的变得庞大也是为了保证,兼容的,就像我们项目用的是 jdk7 ,找的开源库是1.5编辑的也一点都没问题的。
妈她亲我
妈她亲我
赞同,我也觉得大部分程序员要么是懒,要么是对自己的能力心虚所以不敢升级到新的jdk。
0
梁金堂
梁金堂

java8 或许存在不稳定,不过我发现,有些是以前的代码写得不大严谨.在java8编译运行出错.例如,有些代码在java8编译运行抛出异常.

.NET立足于windows,所以很多都是与windows有关的,所谓升级更多的是为了windows的需要.

而java的人气很大.基本的实现已经都有了,还有很多的第三方library.所以升级对于java意义不大.

至于为什么.net的贪,java的却恋旧?我想原因在于,他们的产品的客户需求不一样,.net的为了实现而实现.所以对新API有需求,二来第三方支持的又少. 而java致力于高端客户需求,很多东西都可以自己实现,或者从第三方找到.java8引入新特性更多对于代码的编写,老程序员对其没什么兴趣.

妈她亲我
妈她亲我
你说的有点道理。
0
游客
游客
新项目用新的,老项目,还是老老实实旧的,小版本升到最新,仅此而已。升级到最新,作为一个开发者,所有功能你得验证一遍,还得重新测试,才敢部署。否则哪有那么简单的事。
妈她亲我
妈她亲我
态度谨慎固然重要,但是1+1=2这种都不太放心的话,那。。。。
0
淘气的小猴子
淘气的小猴子

我们项目还在用1.4的

车开源
车开源
1.4好用。 我觉得是否升级新版本这个要取决于升级之后给我带来了什么?所带来结果我相信对于每个人都不一样吧。
妈她亲我
妈她亲我
奇葩。
返回顶部
顶部