JavaOne美国之行–Session篇

Session的总结是重头戏,在这篇blog中,来分享下我参与过的Session,以及听完后我对Session的评价和对于有收获的Session制定的一些Action Plan。

本届JavaOne我总共参加了24个Session,主要集中在JVM方面以及Experience Talk方面,5分为最高分的话,我给这些Session的评分状况如下所示:

从参加的Session来看,JavaOne中标题党的Session也是有一些的,但能够得到收获的Session还是有不少的,根据内容以及Speaker挑选非常重要,通常,水平较高的Speaker总是不会让你失望的,就算讲的东西可能不能让你满意,但会后的交流一定会让你受益匪浅,总体来说,我觉得参加这次JavaOne收获的东西还是足够多了,应该算得上值回票价了,:)
Session的Speaker有不少是来自印度的,看来现在印度已经从以前只是做技术含量低的外包工作,到现在成为core,领导技术的方向了,真是强悍呀。

Session的总结是重头戏,在这篇blog中,来分享下我参与过的Session,以及听完后我对Session的评价和对于有收获的Session制定的一些Action Plan。

本届JavaOne我总共参加了24个Session,主要集中在JVM方面以及Experience Talk方面,5分为最高分的话,我给这些Session的评分状况如下所示:

从参加的Session来看,JavaOne中标题党的Session也是有一些的,但能够得到收获的Session还是有不少的,根据内容以及Speaker挑选非常重要,通常,水平较高的Speaker总是不会让你失望的,就算讲的东西可能不能让你满意,但会后的交流一定会让你受益匪浅,总体来说,我觉得参加这次JavaOne收获的东西还是足够多了,应该算得上值回票价了,:)
Session的Speaker有不少是来自印度的,看来现在印度已经从以前只是做技术含量低的外包工作,到现在成为core,领导技术的方向了,真是强悍呀。

我参加的Session以及打分如下:

接下来对参加的每个Session做一些介绍和总结。
9月20日
1. OSGi and Java EE: A Hybrid Approach to Enterprise Java Application Development
评分 ★☆☆☆☆
总结
本来这场是打算去听JDK 7的,但同行的好几个同学都感兴趣,我就转为听这场OSGi的了,Speaker是两个印度人,听的我那个痛苦呀,还好对OSGi本来就有些基础,呵呵,整场停下来没有太多的收获,基础性的东西介绍的比较多,另外就是介绍了下OSGi在对Java EE方面支持的增强,例如JNDI等,这些其实我也不怎么感兴趣,听到的唯一一个有点意思的东西是OSGi对web application的支持,看来在这么久没关心后,这个东西还是有所增强,现在折腾出了一个Web Application Bundle,因此可实现和WAR直接的集成,这个值得看看。
行动计划
具体的看看Web Application Bundle。

2. Where Does All the Native Memory Go?
评分 ★☆☆☆☆
总结
这场是我期望非常高的一场,因为之前已经碰到了一些Native Memory消耗,又不是很好查的问题,但整场听下来,并没有给出什么好的解决方案,他给的解决方案还不如直接用google perftools,但不得不说,PPT真的写的非常系统化,这好像也是国外工程师不太一样的地方,例如PPT中会先讲到通常内存是如何申请、使用和回收的,以及JRE中哪些部分是会使用native memory,哪些是使用jvm heap的,这个是值得学习的,这也是JavaOne各场PPT给我的印象。
行动计划
修改下我自己的那个Sun JDK 1.6 GC的PPT,也更加系统化一点,同时也增加Native Memory这部分消耗更细致的讲解。

3. Step by Step: GC Tuning in the HotSpot Java Virtual Machine
评分 ★★★★☆
总结
这场是Rockstar: Tony Printezis同学几乎每届JavaOne都讲的Topic,说实话,内容没太多新颖的地方,估计大家都是冲着人去的,但讲的确实还是很不错,给我的收获主要是:优先选用ParallelOldGC,如果暂停时间过长,则考虑CMS;CMS的一些调优建议,例如和我之前经历过的尽量减少对象从新生代晋升到旧生代这点,还有开启ParallelRefProcEnabled。
交流
Session结束后向两个Speaker提了几个问题,一是关于jmap -histo能否推出一个加强版,直接看到对象的引用关系,回答是这是NetBeans Profiler team的事情,他们没办法控制;第二个问题是我测试了下G1,效果不是很好,是否有什么其他的tuning参数,Tony给了我张名片,让我email具体的日志信息给他,我想这是最大的收获,哈哈。
行动计划
修改我自己的那个Sun JDK 1.6 GC的PPT,加上这里的一些调优建议;
尝试开启ParallelRefProcEnabled,以及跟踪下实际的采用CMS系统的内存碎片的状况。

4. The Next Big Java Virtual Machine Language
评分 ★☆☆☆☆
总结
这场一个是去的晚了点,坐在很后面,前面的人直接把PPT挡住了,后面一堆人在摇头晃脑的找空隙点看PPT,另一方面是他说到的这些JDK中的弱点其实都是已知的,而且其实很多应用是历史原因,要切换到另一种语言成本是非常非常高的,因此还是更多的想想如何在现有的语言下做出更多的改进比较靠谱。

5. Project Lambda: To Multicore and Beyond
评分 ★★★★☆
总结
大牛Brian的Session,对于我这种之前对Lambda几乎没什么了解的人来说,还是非常不错的,但其实Session结束后,我很想问一个问题:Project Lambda要到JDK 8才发布,是不是等的时间有点长了,呵呵。
行动计划
看下lambda里面并行计算时线程数量是如何控制的,或者有知道的同学直接说下?

6. JavaOne Keynote
评分 ★★★☆☆
总结
貌似没得到什么非常有价值的信息,更多的还是一些高层次的走向还有一些小的信息,例如hotspot将去掉permgen,要实现large heap with low pause GC等,很多是没时间点的,这太要命了。

7. Advanced Monitoring and Troubleshooting with VisualVM
评分 ★★★☆☆
总结
由于自己之前对VisualVM还算有所了解和试用,介绍的东西有些太基础了,唯一让我眼前一亮的是原来现在已经有这么多的visualvm plugins了,其中的tracker plugin很有意思,可以直接显示类的方法执行了多少次,耗时多少,我很好奇莫非jvm内部之前是已经有这样的MBean可以获取到的,如果是的话那岂不是完全不需要自己写代码来记录这样的信息了。
行动计划
仔细看看Tracker Plugin。

9月21日
1. New Java Virtual Machine Tricks: Enhanced Hot Code Replace and Mixin Generation
评分 ★★★★★
总结
这场听的我很兴奋,:),一方面是PPT的系统化,让我掌握了更多的code generation和code replace可采用的技术,以及他们的问题,目前已有的解决方案,以及最后最让人兴奋的spring loaded的演示,听完后让我觉得如果可以采用spring loaded,那对于开发效率的提升是可以起到很大很大的帮助的。
交流
问了下speaker,spring loaded是纯java写的吗,speaker说是的,run as an agent.
行动计划
找到Spring loaded,进行试用,可惜杯具的是,我到现在为止都没找到spring loaded,莫非…这东西是商业的。

2. How to Tune and Write Low-Latency Applications on the Java Virtual Machine
评分 ★★★★★
总结
很精彩的一场Session,Hotspot和JRockit的同学轮番讲,告诉大家一些编写低延时Java应用的tips,:),得到的收获主要有:知道了原来JRockit也是generational gc,只是会做partial compaction,另外说到了JRockit的realtime版本中的很猛的GC:Deterministic GC, allowing guarantees of SLAs.,只有G1是打破generational这个传统的,不过至少从论文来看,G1还是很靠谱的,尽管现在实现出来的效果还不好;应该合理的设置Tenuring Threshold,我之前一直觉得调这个太麻烦,就没去做,看来还是值得尝试下;理解你所使用的数据结构,避免expanding带来的浪费,这个不错,算是从写代码角度来看的一个pratice;避免使用Finalizers,这个在之前的blog中写到的Deflater/Inflater内存泄露就是因为使用Finalizers造成的。
行动计划
试试合理设置Tenuring Threshold,看来能带来的效果如何。

3. JRockit mission control hol
评分 ★★★★★
总结
我去JavaOne之前,@rednaxelafx就一直强烈建议我一定要去参加hol,所谓hol就是指动手实验,因此这是一个关于JRMC(JRockit Misson Control)的动手实验,进去会场后就看到一堆的电脑,然后有篇文档告诉你怎么做,通过做一些练习,让你掌握如何通过JRMC来查找、分析一些问题,例如如何寻找到hotmethods,如何查看系统执行慢的原因,如何分析内存的分配等,做完练习后,发现确实非常猛,完全满足我现在希望查找的一些问题,可惜呀,这东西目前还不支持hotspot,而JRockit是收费的,so…
另外一个不错的地方是他给的这些练习的代码写的真的非常经典,印象深刻的有两个例子,其中一个你只需要改一行代码,就可以让运行效率提升10倍,另外一个例子只需要改两行代码,就可以让系统不做GC,这两个例子太经典了。
交流
问了下Marcus Hirt(也就是Oracle JRockit: The Defenitive Guide的作者,JRMC的leader)两个问题,一是是否可不通过JRMC来触发server进行flight recorder,回答是of course,并演示了下,太TM简单好用了;二是是否可跟踪两次gc之间allocation的状况,回答让我觉得我自己很土,其实只用在memory视图上将查看的范围缩为两次gc之间就行了,哎,这可是我们梦寐以求的功能呀。
行动计划
专门再写篇文章结合hol的练习来向大家介绍下JRMC,顺带把这些练习的代码提供给大家下载;
在自己的GC PPT中增加write friendly code to gc的部分。

4. JavaOne general technical sessions
评分 ★☆☆☆☆
总结
没得到任何有价值的信息。

5. Performance and Debugging Advancements in OpenJDK
评分 ★★★☆☆
总结
这场听到的就是OpenJDK新的版本中对Compile部分的一个优化,NMethod Sweeper,据说能提升不少。
行动计划
具体再看下这块,OK的话可以再写篇blog来介绍下这块优化的思想。

6. OpenJDK BOF
评分 ★★★☆☆
总结
这个Session的形式是由大家开放式的问些问题,OpenJDK的一伙commiter会来回答,由于没准备好,也没去问问题,因此收获很小。

7. 7 Deadly Sins of Enterprise Java Programming and Deployment in the Multicore Era
评分 ★☆☆☆☆
总结
其中一个Speaker是来自eBay的同学,可惜由于现场突然出现PPT播放的问题,导致最后没讲完,而我又急着去下场,因此最终这场我几乎没听到什么东西。

8. OSGi at a Large-Scale Enterprise: Lessons from eBay
评分 ★★☆☆☆
总结
简单说就是期望太高,失望越大,这个Session中只讲到了移植到OSGi是多么的痛苦,但并没讲好处是什么,eBay目前使用OSGi的状况是什么。
交流
根据后面的交流,才终于更多的知道了一些,其实eBay目前只是把OSGi用到他们的tools里,并没有应用到主站系统上,好处方面之所以没讲什么,是因为Speaker认为来听的人都知道有什么好处,这个…

9月22日
1. Experience Talk: Understanding Adaptive Runtimes
评分 ★★★★☆
总结
这场可是《Oracle JRockit: The Defenite Guide》两个作者开讲,因此期望也很高,不过说实话,还真没讲太多东西,更多的东西其实都写在书上了,反而是讲了很多的JRMC。
花絮就是对提问的同学会现场送书,于是我也去问问题了,可惜等我问的时候,书已经送完了,郁闷,我问的两个问题:一个是关于G1的,我想听听JRockit的人怎么看G1,他们觉得G1目前尚未成熟,不好评价;第二个问题是什么时候JRMC会支持Hotspot,听到的回答很杯具:about after two years,好吧…

2. Too Big to Fail: Top Tips for Massive, Mission-Critical Enterprise Applications
评分 ★★★★★
总结
这场比我期望高太多,如果要评听过的最佳session,我想我会选这场,speaker有20年的工作经验,10年jvm compiler的经验,10年银行系统方面的经验,他其实只是简单的给出了7个对于大型系统有帮助的tips,但可谓是个个击中要害,并且还给你讲明白为什么,明显是经验丰富的人才能做到的,例如NUMA、share readonly data、use hprof、beaware identity hashcode,其中有些是知道的,并且在用的,有些还真不知道…
花絮是讲到CompressedOOPS、NUMA的时候,speaker问有多少人知道或用过,下面竟然只有三、四个人,我很汗呀…
行动计划
share readonly data那个可以看看,方法不太一样,竟然是jni上的NewDirectByteBuffer;
use hprof,我记得我之前用过,是因为效果不好,但看他的演示,我觉得可以试试,只是郁闷的是要把inline关掉,这个影响不知道会有多大;
测试identity hashcode的影响,现场的demo来看对GC的影响很大。

3. Top 10 Causes for Java Issues in Production and What to Do When Things Go Wrong
评分 ★★★★☆
总结
还不错,分享的几个注意点都非常实在,不过基本都知道,这个session过程中有个环节挺好玩,就是说到为什么要注意GC呢,如果jvm实现商能提供一个flag就设置完内存管理,那就完美了,:)

4. Apache Harmony: An Open Innovation
评分 ★★★☆☆
总结
听完后发现没看到Harmony相对现在的几个JVM,有任何的优势…

5. Showdown at the Java Virtual Machine Corral
评分 ★★★★☆
总结
这场其实很有意思,可惜得听录音才行,这场其实是三个使用面最广的JVM(JRockit、J9、Hotspot)的主要作者们在上面回答PPT上的一些问题,挺有意思,:),可以听得出各个JVM的不同发展重点。

9月23日
1. The Garbage Collection Mythbusters
评分 ★★★★★
总结
还是Tony的Session,这场精彩很多,他和另外一个GC Group的人一起讲的,讲的非常好,提到了大家对于GC的一些误解,挺有意思的,例如gc是否能避免所有的内存泄露,给了个很有趣的简单例子;不要使用finalizers来释放资源等。
交流
这场后问了Tony一个问题,就是是否能支持将对象放到一块gc不扫描的区域(请注意,这个方式和Terracotta的off heap是很不一样的),提升系统的性能;Tony说,我们也有考虑这个,但需要Oracle确认。
听完Tony的回答,我懂了…
行动计划
提炼一些加到自己的GC PPT中。

2. Performance tuning from the pros
评分 ★☆☆☆☆
总结
非常非常一般。

3. What’s happening in my app:jvm monitoring tools
评分 ★☆☆☆☆
总结
又一个商业的jvm监控工具,不感兴趣,尽管其号称帮助jdk团队解决了一些问题。

4. Concurrency grabs from eBay
评分 ★☆☆☆☆
总结
太基础了点,尽管总结的还不错,现场很多人尽管连copy-on-write这样的pattern都不知道,而且还有很多人不知道线程池的类是不是在j.u.c里,好吧…