我的高中,可能还在跟父母争论学文还是学理,他们的高中,因为志同道合走到了一起......
他们就是设计出世界级产品JRockit的几个人。
JRockit
一个全面的Java运行时解决方案组合,包括了行业最快的标准Java解决方案。 大量的行业基准测试显示,基本JRockit JVM是世界上最快的JVM。JRockit面向延迟敏感型应用的解决方案JRockit Real Time提供以毫秒或微秒级的JVM响应时间,适合财务前端办公、军事指挥与控制和电信网络的需要。使用JRockit产品,客户已经体验到了显著的性能提高(一些超过了70% )和硬件成本的减少(达50%)。
JVM是Java Virtual Machine(Java虚拟机)的缩写,JVM是一种用于计算设备的规范,它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现的。
——百度百科
那时,互联网还没有在世界范围内普及,他们也还只是高中生,经常混迹于同一个BBS,在讨论数学问题的过程中结识了对方,成为了好友,并将这份友情延伸到了生活和合作的软件项目中。后来,他们又共同进入了位于斯德哥尔摩的瑞典皇家理工学院(KTH)学习。
BBS
电子布告栏系统(Bulletin Board System)
一种网站系统,是目前流行网络论坛的前身,它允许用户使用终端程序通过调制解调器拨接或者因特网来进行连接,BBS站台提供布告栏、分类讨论区、新闻阅读、软件下载与上传、游戏、与其它用户在线对话等功能。
——维基百科
KTH
瑞典皇家理工学院
世界百强顶尖名校之一,成立于1827年,为瑞典最大的工学院之一,也是欧洲顶尖的理工大学。皇家理工学院在科技与工程领域的排名为北欧最强学府。
——维基百科
在KTH,他们结识了更多的朋友。在第三学年的数据库系统课程中,他们找到了足够多志同道合的人,准备干点事业。最终,他们决定成立一家名为Appeal Software Solutions的咨询公司。其实他们的长期目标是公司可以开发产品,而不仅仅是做咨询,但当时他们还不知道到底要开发什么。
1997年,由于在Sun公司赞助的大学生竞赛中胜出,Joakim Dahlstedt、Fredrik Stridsman和Mattias Joëlson得以参加当年的JavaOne大会。有意思的是,第二年,他们又胜出了。
JavaOne
每年一次的Java盛会,当然中国大陆现在也有了JavaChina,中国台湾有JavaTwo,而欧洲的JavaPolis则也是非常的壮观。 JavaOne是在Sun正式发布Java 1.0之后,Java这门新生的语言所拥有的自己的会议。
——百度百科
一切都源于这3位英雄在1997年和1998年参加的两届JavaOne大会。在会上,他们注意到,Sun公司的自适应JVM——HotSpot虽然在当时被誉为能够彻底解决Java性能问题的终极JVM,但在这两年里却没有什么实质性的进步。那时的Java主要是解释执行的,市场上有一些针对Java的静态编译器,可以生成运行速度快于字节码的静态代码,但是这从根本上违反了Java的语义。到目前为止,自适应解决方案在运行时具有远超静态解决方案的潜力,但实现起来也更困难。
1998年,HotSpot没什么动作,年轻气盛的他们不禁问道:“这很难吗?看我们做一个更好、更快的自适应虚拟机出来!”他们专业背景不错,而且认为有了明确的方向,于是就开工了。
他们最初计划用一年时间实现一个JVM的预览版,同时继续提供咨询服务来保证JVM的持续开发。最初,新JVM的名字是RockIT,结合了Rock and Roll(摇滚)、Rock Solid(坚如磐石)和IT三者的意思。后来由于注册商标的原因,又在名字前面加了一个字母J。
在经历了初期的几次失败后,他们需要寻找风投。当然,向投资人解释清楚为什么投资一款自适应JVM能够赚钱(同时期的其他竞争对手都是免费提供的),是一大难题。这不仅仅因为当时是1998年,更重要的因素是,投资人还无法理解这种既不需要给用户发广告短信,也不需要发送电子邮件订单的商业模式。
最终,他们获得了风投,并在2000年初发布了JRockit 1.0版本的第一个原型。尽管只是1.0版本(网上有人说它“非常1.0”,不够成熟),但是它应用于多线程服务器程序时性能优异,风光一时。以此为契机,他们获得了更多的投资,并将咨询业务拆分为一个独立的分公司,公司的名字也从Appeal Software Solutions变成了Appeal Virtual Machines。他们又雇用了一些销售人员,并就Java许可证的问题开始与Sun公司协商。
JRockit的相关工作越来越多。2001年,处理咨询业务的工程师都转入了与JVM相关的项目中,咨询公司宣告停业。这时,他们清楚地知道如何将JRockit的性能再提升一步,同时也意识到在这个过程中他们消耗资源的速度太快了。于是,管理层开始寻找合适的大公司,以实现整体收购。
2002年2月,BEA公司收购Appeal Virtual Machines公司,这让投资人松了一口气,同时也保证了他们有足够的资源做进一步的研究和开发。为了配合测试,BEA建立了一个宽敞的服务器机房,加固了地板,保证了电力供应。那时,有一根电缆从街上的接线盒通过服务器机房的窗户连进来。过了一段时间,这个服务器机房已经无法放下开发测试所需的全部服务器了,于是他们又租了一个机房来放置服务器。
作为BEA平台的一部分,JRockit的发展相当理想。在BEA的前两年,他们为JRockit开发了很多区别于其他Java解决方案的新特性,例如后来发展成为JRockit Mission Control的开发框架。此后,新闻发布、世界级的测试跑分和虚拟化平台随之而来。在拥有了JRockit后,BEA与Sun、IBM并列为三大JVM厂商,成为了拥有数千用户的平台。JRockit产生的利润,首先是来自工具套件,然后是产品JRockit Real Time提供的无比强大的GC性能。
2008年,Oracle收购BEA,这一事件起初令人感到不安,但是JRockit和相关团队最终获得了更多的关注和赞誉。
经过这些年的发展,JRockit的用户遍布全球,它为关键应用的稳定运行保驾护航。最令他们感到骄傲的是,当初6个少年在斯德哥尔摩老城区的一个小破屋中的设计已经成长为世界级产品。
今天跟大家分享的这本书就是他们十多年来与自适应运行时,尤其是JRockit,打交道的经验总结。据他们所说,其中的很多内容之前还没有发表过。
本书还是莫枢(RednaxelaFx)、阿里中间件团队推荐的JVM参考书。
——知乎
Oracle JRockit: The Definitive Guide
作者:Marcus Hirt , Marcus Lagergren
译者:曹旭东
定价:99.00元
页数:588
豆瓣评分 8.6
资深技术人员十余年经验总结
莫枢(RednaxelaFx)、阿里中间件团队推荐JVM参考书
深入JVM内部,剖析Java虚拟机原理,阐明Java性能提升关键
作译者简介
马库斯•希尔特(Marcus Hirt)
JRockit核心开发者,Appeal Virtual Machines公司联合创始人,目前任职于Oracle Java产品组。
马库斯·拉杰格伦(Marcus Lagergren)JRockit代码生成器架构和项目负责人,Appeal Virtual Machines创始成员。2016年Java Champion得主,一直致力于Java语言的开发和改进。
曹旭东毕业于哈工大,目前就职于滴滴,从事后端应用开发工作,另有译作《深入剖析Tomcat》。
第1章:起步。这一章对JRockit JVM和JRockit Mission Control做了简要介绍,内容包括如何获得相关软件及软件对各平台的支持情况,在切换JVM厂商的产品时需要注意的问题,JRockit和JRockit Mission Control版本号的命名规则,以及如何获取更多有关JRockit JVM的内容。
第2章:自适应代码生成。这一章对自适应运行时环境中的代码生成做了简要介绍。具体说来,解释了为什么在JVM中实现自适应代码生成比在静态环境中更有难度,而其实现所能发挥的效用却更加强大;介绍了赌博式的性能优化技术;通过一个例子介绍了JRockit的代码生成和优化流水线;讨论了自适应代码优化和传统代码优化;介绍了如何使用标志和指令文件来控制JRockit的代码生成。
第3章:自适应内存管理。这一章对自适应运行时环境中的内存管理做了介绍。通过介绍自动内存管理的相关概念和算法,解释了垃圾回收器的工作机制。详细介绍了JVM在为对象分配内存时所做的具体工作,以及为便于执行垃圾回收所需记录的元数据信息。后半部分主要介绍用于控制内存管理的最重要的Java API,以及可在Java应用程序中生成确定性延迟的JRockit Real Time产品。最后,介绍了如何使用标志来控制JRockit JVM的内存管理系统。
第4章:线程与同步。这一章介绍了Java和JVM中非常重要的线程与同步的概念及其在JVM中的简要实现,并深入讨论了Java内存模型及其内在的复杂性。简单介绍了基于运行时信息反馈的自适应优化对线程和同步机制的实现的影响。此外,还以双检查锁失效为例对多线程编程中常见的一些错误做了介绍。最后讲解了如何分析JRockit中的锁,以及如何通过标志控制线程的部分行为。
第5章:基准测试与性能调优。这一章讨论了基准测试的相关性,以及制定性能目标和指标的重要性;阐释了如何针对特定问题设计适合的基准测试;介绍了一些针对Java的工业级基准测试套件;详细讨论了如何根据基准测试的结果优化应用程序和JVM;以JRockit JVM为介绍了相关命令行参数的使用。
第6章:JRockit Mission Control套件。这一章介绍了JRockit Mission Control工具套件,包括启动和各种详细配置等内容。解释了如何在Eclipse中运行JRockit Mission Control,以及如何配置JRockit以使Eclipse在JRockit上运行。介绍了几种不同的工具,统一了相关术语的使用。讲解了如何使用JRockit Mission Control远程访问JRockit JVM,以及与故障处理相关的内容。
第7章:Management Console。这一章介绍了JRockit Mission Control中的Management Console组件,讲解了诊断命令的概念以及如何在线监控JVM实例,还介绍了触发器规则的设置和事件通知的机制,最后讲解了如何利用自定义组件扩展Management Console。
第8章:JRockit Runtime Analyzer。这一章介绍了JRockit运行时分析器(JRockit Runtime Analyzer,JRA),它是一款可以定制的按需分析框架,用于详细记录JRockit以及运行在其中的应用程序的执行状况,以便进行离线分析。其记录内容包括方法和锁的性能分析、垃圾回收信息、优化决策信息、对象统计信息以及延迟事件等。这一章最后介绍了如何根据这些记录信息来判别常见问题以及如何延迟分析。
第9章:JRockit Flight Recorder。这一章详细介绍了JFR(JRockit Flight Recorder)。新版本JRockit Mission Control套件使用JFR取代了JRA。这一章讲解了JFR与JRA的区别,最后介绍了如何扩展JFR。
第10章:Memory Leak Detector。这一章介绍了JRockit Mission Control套件中的最后一个工具JRockit Memory Leak Detector。其中介绍了具有垃圾回收功能的编程语言中内存泄漏的概念,以及Memory Leak Detector的一些用例。Memory Leak Detector不仅可以用来找出Java应用程序中意外持有的对象,还可以对Java堆做通用分析。此外还介绍了Memory Leak Detector的一些内部实现机制,以及它能保持很低的运行开销的原因。
第11章:JRCMD。这一章介绍了命令行工具JRCMD。用户可以通过JRCMD与目标机器上的JVM交互,并发送诊断命令。这一章按字母表顺序列出了JRCMD中最重要的诊断命令,并通过示例讲解了如何使用这些命令来检测或修改JRockit JVM的状态。
第12章:JRockit Management API。这一章介绍了如何编程实现对JRockit JVM内部功能的访问,如JRockit Mission Control套件就是基于Management API来实现的。尽管这一章介绍的JMAPI和JMXMAPI并未得到完整的官方支持,但从中可以了解到一些JVM的工作机制。希望读者可以实际动手操作一下,以加深理解。
第13章:JRockit Virtual Edition。这一章介绍了现代云环境中的虚拟化,其中包括了JRockit Virtual Edition产品的相关概念和具体细节。通常来说,操作系统很重要,但对于JRockit Virtual Edition来说,移除软件栈中的操作系统层并不是什么大问题,而且移除之后还可以降低操作系统层所带来的性能开销,降低的程度甚至在物理硬件上也达不到。
京东购
当当购
电子版
文末福利
你有没有因为Java遇到一些志同道合的人?有没有哪些时刻,Java让你欣喜若狂?关于JRockit,你有什么想说的?
精选评论中随机挑选3位小伙伴获取赠书一本,截止到12月27日14:00。
欢迎大家畅所欲言。
题图来自freepik
☟ 更多Java相关图书