【Java二十周年】我比Java大10岁

原创 2015年04月23日 16:06:02

      

     1991年,我7岁,刚刚步入学堂不到半年。而计算机在那个年代也是一个新奇的事物。可就在那样的环境中,Java已经有了萌芽。那一年,SUN公司启动绿色计划,打算发展一种可以在任何消费电子产品上运行的软件。但由于C++自身有很多不足,所以项目组决定自行开发一种新的语言Oak。最初,Oak应用于机顶盒,但是在当时市场不成熟的情况下,项目失败了。但Oak却得到了SUN领导的赏识,于是:

      1995年3月23日,在对Oak进行小规模改造后Java语言诞生了,并广泛应用于互联网领域。

一年后,在1996年,我很顺利得从小学毕业了。不过这不是重点,重点是在同一年里,Java也从SUN公司“小学毕业”。在那一年里,SUN首次对外发布了JDK1.0。当然这个时候,Java还很薄弱。大部分类库都不完善。支持Java运行的虚拟机是一款叫做Classic VM的虚拟机。

      光阴如梭,一晃6年过去了,在2002年,我进入大学学习。在同一年里,JDK 1.4发布了。在新的JDK中,彻底淘汰了古老的Classic VM虚拟机,使用Hotspot作为其默认虚拟机。也就是现在最常用的Java虚拟机。然后,此时,虽然我已经接触了VB 6.0、Pascal等语言,但对Java还是相当陌生的。

      大学里的学习是相当密集的。虽然前后接触了不少编程语言。但正式接触Java还是从大三开始。那时学校里安排了Java的必修课。由此,我和Java就此结缘。但那时,我并不喜欢Java。从我的眼光看,一门在控制台输出“Hello World”都要敲老长一段命令的语言能有什么前途?就如同现在大部分人抨击Java那罗里吧嗦的语法一样,那时,我更倾向于C的强大、VB的简明。

      虽然满肚子不喜欢Java,但作为一门必须课,是绝对不能怠慢的。否则文凭难保。为了学好Java。我买了一本《Java程序设计方法与实例》的书,这就是我第一本Java的书籍。这本书可以说并没有什么名气。和《Thinking in Java》之类的大牛比起来,可以说是弱爆了。但我对这本书的评价很高,因为它足够简单,明了。能够让初学者看得懂。而我却特别不喜欢《Thinking in Java》,说实话打开《Thinking in Java》这本砖头书,我就立马想睡觉。并不是因为里面的内容不好,而是语言文字实在太别扭了。

      2004年,也就是在我努力学习Java的这一年里。JDK 1.5发布了。不得不说,这个版本加入了很多引人注目的特性。大大简化了开发。比如,泛型,虽然Java对泛型的支持只停留在Java语言层面,但有总比没有好。这让我们可以更加愉快地阅读代码。此外,自动装箱和拆箱也省略了好多机械式的代码。注解可以让我们给类、字段或者方法附加新的活力。枚举使得Java可以写出更加优雅的代码。增强的for循环,让我们的程序更为简练。总之,我认为JDK 1.5绝对是一个里程碑意义的版本。它带给我们太多的惊喜。

      经过了2年的Java学习,在2006年,我光荣的本科毕业了。我的毕业设计是与设计模式相关的课题。由于一次偶然的机会,我接触到了设计模式,之后,就顺理成章得将它作为我的本科毕业论文。如果说设计模式是从建筑学中诞生的,是在C++中由GoF引入软件行业的,那它就是在Java中发扬光大的。很少有Java程序员不知道设计模式。那个时候,我手捧着阎宏的《Java与模式》,将那些设计模式和设计原则视为神一样的存在,神圣而不可侵犯的艺术巅峰。不知道现在还有多少人保持着我当时的想法。《Java与模式》虽然和《Thinking in Java》一样厚实,但是我并不会把它当做砖头,因为它的确带给我很多启发。

      就在我本科毕业的那年(2006年),JDK6 beta发布了。在JDK 6并没有像JDK 5那样带来翻天覆地的变化。但是带来的改进也是很可观的。比如,对脚本语言的整合支持、编译器API的访问等。这些对语言的灵活性都有了很大的提高。但对我来说,我认为最为重要的改进是对synchronize的性能优化。在JDK 1.5中,synchronize关键的性能比较差。这导致我们不得不弃用synchronize,而使用ReentrantLock来改善程序的性能。但这显然是很麻烦的。因为synchronize真是太好用了。而这个问题在JDK 6中得以解决。

      而就在这一年里,Java开源并建立了OpenJDK。这是绝对是有历史意义的重大事件。现在,在各大Linux发行版本中,默认安装的都是OpenJDK。其重要性也就不言而喻了。而此时,我也有幸开始了我的研究生学习生涯。

      2008年,我正热火朝天的干着我的硕士毕业设计。这是一个基于P2P平台的多Agent框架。当然了,这是用Java做的。从底层的P2P网络到上层的应用都是使用Java实现的。为了能让Agent做到在多个网络节点中迁移,执行,我开始涉足和关注一些Java中相对底层的技术。比如动态类加载、字节码等等。可以说,在这个时候,我才真正开始关注Java技术。很可惜,也许当时大数据和分布式计算并没有像现在这么火,也许是我太孤陋寡闻,无法意识到分布式计算的前景,这个分布式执行框架在我完成毕业设计后,也就长眠于我的硬盘中了。现在回想起来,还真是有些可惜。

      就在这一年,Oracle收购了BEA并将JRockit虚拟机收入囊中。但我对此却毫无感觉。

      2009年3月,我顺利从取得了硕士学位,并开始了我的第一份工作。很有幸,这也是一份与Java打交道的工作。而就在这一年,Oracle宣布收购SUN。这对我来说,对于每一个Java程序员和社区来说,都是一颗重磅炸弹。一个崇尚开源和自由的产品,居然被一家无情的商业化公司收购。这对于Java来说是好还是坏呢?同样令人担忧的,还有MySQL的前途。

     我很幸运进了一家氛围良好的公司。在老一辈工程师的带领下,我才能有更多的成长。在工作的几年中,也遇到了不少Java性能相关的问题。此时,我才开始涉足有关Java虚拟机的一些内部机制,比如GC、内存分布等。可以说,大部分与此相关的知识是在工作中不断积累的。

     2011年,JDK 7发布了。但是,非常遗憾的是,我们的应用还停留在JDK 6中。我相信,到目前为止,大部分既存系统可能使用的都是JDK 6。但版本迁移是一件大事,因为贸然进行大版本的改变,会给商业产品带来很高的风险,也意味着测试人员要进行更多的测试。因此,除非有非常强烈的需求,否则,大版本的迁移是非常谨慎的。那JDK 7究竟给我们带来了什么呢?当然有一些语法上的增强和改变,比如,支持字符串的switch、二进制整数的表示、支持多重异常捕获以及try-with-resources语句进行资源管理。以及引入了NIO2。更为重要的是正式启用了G1回收器。实际上G1在JDK6中就已经给出,但只是作为一个实验性产品。此外,根据我的测试,JDK 7较JDK 6相比,性能也有一定幅度的提升。

     同时,JDK6中令人恼火的String内存泄露也在JDK中被完美解决。因为JDK7重新实现了java.lang.String类。让它更加安全。字符串常量池也从JDK 6中的Perm区移到了堆中。这也是为将来彻底消灭Perm区做的一点小准备吧!

     在动态语言编程盛行的今天,Java也与时俱进,虽说臃肿的身躯被一些人指指点点,但是任何变化都是需要时间的,在JDK 7中,Java虚拟机引入了新的指令invokedynamic。用于支持动态调用。从此,动态语言在Java虚拟机上就能更好的工作了。

     2014年,JDK 8发布。毫无疑问,JDK 8最引入注意的就是对函数式编程的支持。我们可以看到,Java正在尽可能将自己变的更加完美,从此,Java也可以使用很少的语句做很多的事情了(但这究竟是好是坏还需要时间的检验)。函数式编程这个亮点实在是太亮了,以至于我们很容易忽视JDK 8带来的其它改进。比如,在JDK 8中,我们熟悉的Perm区被完全移除,取而代之的是称为元数据区的直接内存空间。同时JDK 8中还为并发做了很大的增强,比如加入了LongAdder类。这是一个性能完爆AtomicLong的并发工具类。这你能想象吗?

     追随Java这么多年,是不断的积累和学习让我得以和Java一起成长,这是我的幸运。Java不是完美的,就如同没有任何事物是完美的。但这并不妨碍我们去热爱一门技术,为了记录多年以来我对Java的所学、所思、所想,于是《实战Java虚拟机——JVM故障诊断与性能优化》诞生了,它出版时正值2015年,这一年,我30岁,Java 20岁,我比Java大10岁。

喜欢java,喜欢JVM的可以一起加Q群探讨:397196583。


【Java二十周年】爱上Java无法自拔

不知不觉之中,java都已经20岁了。刚好是一个正值青春的少年,回想当初他出生时,笔者都还没上学,编程为何物都不知道。然而就是在1995年James Gosling和同事们共同研发了java,从那之后...

Kettle定时执行(先备着)

本周项目上用到了kettle并且需要做任务调度,听老师说用kettle自带的调度不大稳定于是便baidu了下,参照这篇文章完成了通过kitchen的调度,简单说就是通过windows的计划任务来调用....

【Java二十周年】我会勇敢的走下去

学java到现在时间已经一年多,可是我还是一个新人。回头看看自己走过的弯路,心里不经偶尔一酸。不过我想我不会放弃,只要心中的火不灭,总有自己发光的那天。java之路,我想我会一直走下去!...

【Java二十周年】浅谈我和Java的故事

大学毕业之后我一直从事.NET开发的,学习Java也是出于自己的爱好,毕竟网上都流传Java是程序员的铁饭碗的嘛,为了以后转Java,我也是在工作的这两年,利用课余时间经常学习Java开发了,到目前为...

【Java二十周年】一次冲动 一次胜利 一条路

一个人的成功可能只是一次灵感,也可能只是一次机遇,但是灵感和机遇来临之前所付出的是你们想象不到的——我说的     2012年12月,很多人正处于世界末日的兴奋当中,但是我正在未我的未来发愁。201...

【Java二十周年】春风十里,不如你

看到这个题材突然内心肿胀无限,有强烈的倾诉冲动。今夜我不关心人类,我只想你。 上中学时我还不认识你,java。初一时家里买了电脑,但是除了红警之外仅存的记忆就是163、169拨号的滴滴声再无其他;真正...
  • ohou0
  • ohou0
  • 2015年04月22日 19:18
  • 957

java二十周年

                                      Java——你的舞台 小学,初中,高中,在老师和同学眼中,我一直是尖子生的代表,同时也是如愿以偿的进入了本省最好的大...

【Java二十周年】

Java诞生二十周年之际,特此献上美文一篇。呵呵

[Java二十周年]我的十多年经验与未来分析

2004年毕业的时候,听说Java程序员工作比较好找,就这样开始与Java结缘。一晃10几年过去了,做了很多项目,也发布了一些Java方面的技术性文章,总的来说,这10年时间一直都在与一个永恒的话题纠...

【Java二十周年】Java注解处理器

Java的世界中,也许你会有个疑问,为什么@Override能够让编译器验证这个函数是否被有效重载,为什么Hibernate的注解能够使的数据库操作如此简便,今天,我们就来揭开注解的神秘面纱,了解一下...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Java二十周年】我比Java大10岁
举报原因:
原因补充:

(最多只允许输入30个字)