去Sun开发者技术日2009逛了

57 篇文章 0 订阅
39 篇文章 0 订阅
官方网站:[url=http://developers.sun.com.cn/events/sun_developer_day_2009.html]Sun 开发者技术日 2009[/url]

这是个在北京-上海-广州三地举办的活动。我家正好就在广州站会场附近,赶上趟了。昨晚有同学给我官网链接看,
[quote="Sun中国技术社区"]Sun中国技术社区敬请您前来参加2009年7月即将于北京、上海和广州三地举行的Sun技术日活动。通过此次活动,您可以了解到Sun公司正在开发的最新产品和技术,以及Sun公司被Oracle公司收购之后可能的发展方向。[color=red]鉴于这可能是Sun公司最后一次以Sun公司的名义举办开发者技术日活动[/color],我们特意准备了大量印制有Sun公司标志的纪念品赠送给前来参加活动的开发人员。[/quote]
看到红色的这句我湿了,毅然决定把原本跟一个高中同学约好的活动取消掉,报名去听听讲。

好吧其实我是看到了……
[quote="Sun中国技术社区"]所有前来参加此次活动的开发人员均可得到一套印制有Sun公司标志或者是Java标志的纪念品。这套纪念品包括一只环保购物袋(分男款和女款),一支签字笔,一个记事本,以及一只钥匙扣。除此之外,我们还将通抽奖的方式送出如下礼品:


- 50只Duke玩具
- [color=red]10只旅行背包[/color]
- 10套帽子套装
- 10只桌面电子表
- 10本《NetBeans权威指南》
- 10本《OpenSolaris红宝书》
- 10本《Solaris操作系统原理》[/quote]
嗷!那旅行背包太有吸引力了,我回到家来发现之前在学校收拾宿舍的时候漏拿了个包,正愁没包用呢 T T

好吧其实光是背包也不足以吸引我去。[url=http://developers.sun.com.cn/events/sun_developer_day_2009.html]日程安排[/url]里还是有些我有爱的session的:(完整日程安排请见官网)
[table]
| 13:30 -- 14:20 | 提升Java性能 | Joey Shen | Java SE 6引入了一些新的功能和性能增强,为平台中的许多领域都提供了性能改进。这些改进包括:同步性能优化、编译器性能优化、新的并行缩并垃圾收集器 (Parallel Compaction Collector)、工效更高的并发低停顿垃圾收集器(Concurrent Low Pause Collector),以及应用程序的启动性能。|
| 14:20 -- 15:10 | 您的设备之智慧 - 移植 phoneME到您的设备上 | Chuk Munn Lee | Java ME平台已经为无数数字设备提供了易于编程控制功能。phoneME是Sun为CLDC和CDC平台打造的开源实现。在这部分演讲中,我们将近距离观察这些平台,评估它们的特性并通过一个案例全程学习移植CLDC到任天堂DS游戏平台。|
| 15:20 -- 16:10 | 基于Sun SPOT的无线传感器网络技术 | 蒋清野 | Sun SPOT是Sun Labs正在开发的实验室技术,简称为小型可编程器件技术(Small Programmable Object Technology,SPOT)。基于Sun SPOT的无线传感器网络技术可以广泛应用于室内和野外的远程数据采集与处理应用。Sun SPOT的一个重大突破是可以使用Java语言进行嵌入式应用开发,一举改变了以前嵌入式应用开发必须使用C语言甚至是汇编等低级编程语言的状态,大大地降低了嵌入式开发的门槛。|
| 17:15 -- 18:00 | OpenSolaris | | OpenSolaris 包含GNOME桌面、GNU工具和基于网络的软件管理系统,此外还有ZFS文件系统、动态跟踪(Dynamic Tracing,DTrace)框架、用于在受保护环境中运行应用程序的容器和区域,以及高级网络虚拟化功能。|
[/table]
(多谢JavaEye实现了table标签的BBCode,这是我第一次在发出来的帖里试用这功能,暂时还够用)
我主要关心的果然还是编译器、VM和OS……JavaFX也可以一听,其它就在兴趣外了。

可是跑到现场去,发现现场给出的日程安排跟官网预告的不一样。DC坏了还没修,本来我用手机拍了张会场门口摆出来的日程安排,刚才要把照片拿出来的时候发现手机的红外居然也坏了……照片暂时弄不出来了,忽略它吧。
(地中海国际大酒店……会场选的地方的服务态度还不错,session间的茶歇时间有提供糕点。就是电梯诡异了点,稍微不平衡就大叫[哔——]。然后没有提供无线网络也稍微不爽。)

今天会场相当满,不知道有多少人呢,400+?我差不多上午9点进到会场,已经没剩多少座位了。下面随便写写我所看到的。Session标题我没准确记下来,下面加黑的不是标题名,只是我记的大致主题方向。

[b][size=medium]开场致辞和keynote[/size][/b]

9点John准时开始开场致辞。然后是Naveen Asrani×Chuk-Munn Lee的keynote。主要也就是些套话,宣传Sun如何open,developer如何受益之类。确实,Sun把自己的重量级产品都开源了,连Java、Solaris和SPARC都,对开源界不可谓贡献不大。可惜这开源策略不足以支撑公司的财政收入。另外open source与open standard哪个更值得关注呢?至少在Java标准上,JSR够不够open就值得商榷。诶不过随便啦,这些政治问题……
Chuk在这个keynote里做了两次demo,第一个是JavaFX的,第二个是把CLDC profile的[url=https://phoneme.dev.java.net/]phoneME Feature[/url]移植到NDS上的。
在JavaFX的demo里,Chuk提到现在NetBeans还得用6.5来开发JavaFX,对应6.7的插件还没好。在嵌入了FLV录像之后,Chuk似乎总得重复build-run他的demo两次才能让FLV正确播放出来,有点奇怪。在给播放中的FLV加上旋转效果之后,程序明显变卡了,跟我之前自己试的时候一样。相对来说WPF在旋转的时候效果还好些……可能只是个案。
在演示移植CLDC到NDS的demo里,Chuk在现场用一台NDSi来演示了移植的CLDC在实机上运行的状况,包括其中自带的几个小游戏。我坐在最后一排,完全看不到他到底演示了什么,只能叹息。要是有实物投影就好了。
我知道NDS系列用的CPU是ARM架构的,而CLDC以前就可以在ARM架构的平台上运行。觉得很好奇,要把CLDC“移植”到NDS上需要做些什么工作,就在休息时间跑去问了Chuk。他回答说其实JVM本身并不需要什么修改,上面的MIDP、PCSL也不用怎么改。光是修改源码的话,主要是core Java library要做些修改,根据平台提供的API来修改核心Java类库中native的部分(这部分我听得不太清楚,希望我没听错)。[color=red]然后工程量最大的是修改makefile,调整整个build tree。[/color]我一直对build各种东西感到无奈,听到这里顿时虎躯一震 =v=||||
受限于NDS那可怜的只有4MB的内存,移植过去的JVM以纯解释模式执行,而不进行JIT编译。
对了,这个移植是开源的,项目页面在这里:[url=http://sourceforge.net/projects/doublevision/]DoubleVision[/url]

[b][size=medium]Java EE 6[/size][/b]

10点左右,Chuk开始了第二场演讲,主题是Java EE 6的新特性。
我已经好久没写过Java EE的应用了。天啊,我都不记得当时我用的Struts的版本是多少了。总之这部分我不是的料。
我就记得Chuk讲了Java EE 5已经大量运用annotations来做各种配置,唯独Servlet例外。在Java EE 6里,Servlet也终于用Java 5开始的新语言特性来改造,可以用annotations来对程序做默认配置。库的提供商也可以通过web-fragment.xml来提供默认配置,这样就不会污染应用特定的web.xml了。原本的web.xml还是有用的,它的配置能override掉annotations或者web-fragment.xml的配置。
然后asynchronus Servlet看起来也有点意思,可以提高程序的响应性,避免线程被数据库查询之类的操作所阻塞。不过要看到最终结果,还是得等数据库的操作完成,所以这玩儿多半不会让程序真的更快……吧?

[b][size=medium]JavaFX[/size][/b]

接下来,11点左右是Joey做的JavaFX的session,主要介绍了JavaFX 1.2的一些东西。
这个演讲里提到了JavaFX与其它RIA平台的differentiation,但我觉得其中的信息有点没跟上时代的步伐。例如现在已经发布了的Silverlight 3就已经支持out-of-browser的运行,而Flex与AIR的整合在未来肯定也会变得更加完善,所以JavaFX要以“能拉出浏览器单独运行”为“独特之处”显然不合适。
JavaFX与浏览器DOM的整合也是如此。Silverlight 2与Flex 3也提供了不错的浏览器DOM整合,可以让它们与浏览器之间的事件挂上钩,做到双向相应。这已经算是RIA平台的标配了,算不上是“特点”。
倒是Chuk和Joey非正式透露的一些东西更有趣些,像是基于Webkit的JavaFX专用浏览器,可以对要浏览器网站像mash-up一样裁剪、提取内容、改变样式之后再显示出来;又或者是WYSIWYG的JavaFX设计器。后者在今年JavaOne上已经demo过了,不过还不够完善,离release还有距离。
我对JavaFX的了解还不够深入,说真的,没太感受到它在桌面上的strength在哪里。如果是通过WebService或者RESTful API来跟后台交互的话,那前台的表现层无论用什么都可以,不会说因为后台用Java EE,前台用JavaFX就会方便多少。JavaFX跟Java的紧密整合真正的strength在哪里?求指点。
但它在移动设备上应该会有很强的竞争力。跟桌面上不同,Java在移动设备上的部署率远超过了Flash,而Silverlight的魔掌还没有力的伸入这一领域。使用Common Profile来编写JavaFX应用,就能够让同一个程序很轻松的部署到桌面、浏览器和移动设备上。或许Sun应该更多宣传这一点?
在听Joey的session时突然觉得JavaFX的Node跟WPF的UIElement的地位好像。要是有时间系统的比较一下两者就好了;可惜兴趣不在此,多半是不会深入去做的。JavaFX Script我还挺喜欢的,至少比XAML或者MXML看起来舒服多了。就像JSON比XML看起来舒服一样?

[b][size=medium]SOA[/size][/b]

快12点的时候,Chuk开始了SOA的session。主要是演示了在NetBeans里使用[url=http://en.wikipedia.org/wiki/Java_Business_Integration]JBI(Java Business Integration)[/url]和BEPL做SOA开发。这个session我没怎么听,中途溜回家吃饭去了 OTL
原来BEPL读作“be-ple”,WSDL读作“whizdle”啊……嗯也算是个收获。

[b][size=medium]基于Sun SPOT无线传感器网络技术[/size][/b]

中午1点半之后我回到会场,John的基于[url=http://www.sunspotworld.com/]Sun SPOT[/url]无线传感器网络技术的session刚准备开始。他提到了传感器与电脑的连接方式的发展,从一台电脑只能接一个传感器的“点覆盖”,到现场总线技术的“线覆盖”,到通过开放标准连接的面覆盖,然后通过各种无线技术自动组网的“域覆盖”。他的session里所说的无线传感器网络特指使用[url=http://www.ieee802.org/15/]IEEE 802.15.4[/url]标准、能自动组网的传感器组成的网络。
John提到,对这些小传感器设备来说,最重要的不是处理能力,不是内存大小,而是电源。为此他举了基于x86架构的[url=http://www.pc104.org/]PC-104[/url]与基于[url=http://www.atmel.com/products/avr/]ATmega[/url]的UCB Mote的例子来比较。前者有较强的处理能力,能支持多种流行的操作系统,可以使用多种编程语言,比较容易招到程序员,但设备耗电量较大;后者处理能力较低,内存较小,使用[url=http://www.tinyos.net/]TinyOS[/url],主要使用C来编程,耗电量小。对那种一部署到野外就很长时间没人管的传感器设备,没电了的话显然什么也干不了,从这点看UCB Mote似乎更favorable。但C相对Java来说写起来困难些(这个不是我的观点,见仁见智),如果能保持UCB Mote的好的特性,同时引入更友好的开发环境,那就解决了不好找程序员的问题(例如Java...);于是Sun SPOT就来了。Sun SPOT的CPU是32位、180MHz的ARM902T,有5-12KB的SRAM和4MB的Flash ROM;演示板上有重力传感器,加速度计,还有啥传感器来着,忘了 =v=
接下来的几个演示跟我上个月才看过的同学的毕设答辩上的一组演示很相似,都演示了单个设备的传感器的工作,多个设备自动组网后程序行为的变化,远程对设备的控制(包括程序的热部署)等。我同学的毕设就是用UCB Mote来做的,在TinyOS上用C来编程。6月份毕设答辩,他们的设备5月才到,在一个月里学那么多东西也真够呛的 OTL 印象中我同学用的mote上的LED是有2个还是3个来着,反正没Sun SPOT的演示板上的LED多。John演示的“粘滞球”程序还是挺震撼的,会场里很多人的激动了:把Sun SPOT的一排LED当成一条管子,两端的LED亮红色来显示端点,中间根据重力传感器的数据来点亮一个LED看作在管子里滚动的小球。把两个设备靠在一起来摇晃的时候,可以根据程序模式的切换来改变“小球”滚动的行为,每个设备上的“小球”可以限制在自己那段“管子”里滚动,也可以滚动到旁边的设备的“管子”里。挺有趣的。
我留意到做热部署演示时,执行的Ant任务的log里有一项是'Starting Squawk VM'之类的字样。后来查资料才知道原来Sun SPOT里的JVM就是基于一种叫做[url=https://squawk.dev.java.net/]Squawk VM[/url]的虚拟机制作的。这个JVM是种元循环解释器的实现,其中大部分都是用Java来实现的。引用Wikipedia上的一张示意图:
[quote="Wikipedia"][img]http://upload.wikimedia.org/wikipedia/en/thumb/4/4b/Standard_Java_VM_vs_Squawk_Java_VM.svg/750px-Standard_Java_VM_vs_Squawk_Java_VM.svg.png[/img][/quote]
同样适用Java来实现JVM的还有[url=http://jikesrvm.org/]Jikes RVM[/url]项目。我对Jikes RVM比较熟悉些,而Squawk VM还是第一次听说。呵呵,“Squawk”这名字听起来就很“[url=http://www.squeak.org/]Squeak[/url]”。
John说一套Sun SPOT的演示板有3件,一共3000多人民币。不知道这方面的市场情况如何,不过3000多对我来说好贵啊 T T

[b][size=medium]Java Performance Tuning[/size][/b]

之后,下午2点50分左右的是Joey做的关于Java Performance Tuning的session。他的切入点不是遇到某个性能问题的具体解决方法,而是对各种profiler工具的介绍和演示,包括[url=http://java.sun.com/javase/6/docs/technotes/tools/share/jconsole.html]JConsole[/url]、[url=http://java.sun.com/j2se/1.5.0/docs/tooldocs/share/jps.html]jps[/url]、[url=http://java.sun.com/javase/6/docs/technotes/tools/share/jinfo.html]jinfo[/url]、[url=http://java.sun.com/javase/6/docs/technotes/tools/share/jstat.html]jstat[/url]、[url=http://java.sun.com/javase/6/docs/technotes/tools/share/jstack.html]jstack[/url]、[url=http://java.sun.com/developer/technicalArticles/Programming/HPROF.html]HPROF[/url]、[url=http://java.sun.com/javase/6/docs/technotes/tools/share/jhat.html]jhat[/url]、[url=http://java.sun.com/javase/6/docs/technotes/tools/share/jmap.html]jmap[/url]、[url=https://visualvm.dev.java.net/]VisualVM[/url]等。
(我当时在纸上记的笔记没记全,不小心把Windows上支持得不好的给记漏了,上面凭印象补充了笔记里没有的几个。等投影片开放下载之后再整理完整的列表)
Joey介绍的那么多工具里,我以前只用过VisualVM。不过他把这工具放在了最后才讲,而且只是一两句话带过而已,提到它是个“all-in-one”式的有图形界面的profiler。从JDK6u7开始,VisualVM已经包含在JDK的工具包里,可以直接使用而不必单独下载。

JConsole,全称Java Monitoring and Management Console,是一个[url=http://java.sun.com/javase/technologies/core/mntr-mgmt/javamanagement/]JMX[/url]客户端,可以挂接到正在运行的Java进程上,显示进程的CPU占用率、内存状况、线程状况和类加载状况,并且可以简单的检测进程当前有没有发生线程死锁状况。它检测死锁的原理是把各个线程当前持有锁的状况构造成一幅依赖图,检查里面有没有环;因此它只能检测出“当前正在发生”的死锁,而无法检测到未发生的死锁,这是JConsole的一个小限制。
[img]/upload/attachment/126923/35a2f3cb-aac6-335c-a72e-81ee861d93e4.png[/img]
Joey提到Java程序在性能上遇到的问题大都可以归为三类:计算密集的、不合理使用线程(包括死锁)、不合理使用内存。JConsole正好在这三方面都能收集数据并以图形方式显示出来,是分析Java程序的性能问题好用的轻量级工具。

jps,全称Java Virtual Machine Process Status Tool。与Unix上的ps工具可以查看当前所有正在运行的进程的信息一般,jps也是一个命令行工具,可以用于查看当前运行的所有Java进程(更准确的说,所有jps有权限访问的JVM)的概况。它可以用来查询每个JVM的lvmid(local VM identifier),为使用其它几个命令行工具提供方便——它们大都需要vmid来指定要查看哪个JVM的信息。不过这个工具现在是unsupported的,以后可能会不再随JDK发布。

jstat,全称Java Virtual Machine Statistics Monitoring Tool,可以实时的在标准输出流上显示类装载、GC与JIT的运行数据。

jmap,全称Memory Map,可以用来查看某个Java进程的内存使用状况的细节。它可以用于创建heap dump。在使用二进制方式转储(例如-dump:live.format=b选项)时,可以与下面提到的jhat配合使用。虽然在启动Java程序的时候可以传入-XX:+HeapDumpOnOutOfMemoryError参数,在遇到堆溢出的时候也会得到一个heap dump,但那必须在JVM启动时就设置好参数,而不能让任意一个JVM给出heap dump;用jmap就没有这个问题。
这个工具在Windows上支持得不太好,只能用-dump和-histo这两个选项。详细请查看官方文档。

jhat,全称Java Heap Analysis Tool,可以用一种友好的方式显示出heap dump里的内容,例如显示某个类型的所有实例,每个实例里所有成员数据,甚至可以通过类似SQL的OQL(Object Query Language)来查询对象,非常强大。用各种方式得到heap dump之后不用再对着一堆二进制数据感到无奈,用jhat就可以看到底堆上内存是个啥状况,然后猜测问题出在什么地方。

在介绍jhat的时候,Joey提了个有奖问题,关于GC如何判断对象是否存活的原理。这个我正好比较熟悉,赶紧举手回答:GC从root set开始顺着reference标记,如果从root set的reference到某个对象有一条路径,这个对象就是活的。然后Joey追问到JVM的root set是什么,我回答是栈上的和静态存储区里的引用。这个回答让我成功的获得了一个旅行背包,哈哈,怎么这也是吸引我去参加活动的动力之一,当然是很高兴。不过我还是不怎么适应场面,答完问题之后吓得全身发抖;其实回答问题的时候就已经很紧张了,紧张得语言模式还没切换回来就作答了……诶。
Joey补充到root set是局部变量和静态存储区里的引用。根据JVM规范,方法的局部变量就应该放在Java stack的栈帧上,所以我的回答应该没问题……吧。当然JVM规范只是规定了概念,不能跟实际实现混为一谈。如果说要补充的话,在采用分代式垃圾收集器的JVM里,在扫描年轻代的时候root set除了包括栈帧上的引用(包括寄存器里可能有的引用)之外,还包括从年老代指向年轻代的引用;这是分代式垃圾收集器的特征,年老代指向年轻代的引用一般是通过在JIT时生成的write barrier来记录的。

另外几个介绍的命令行工具我没有在纸上做什么笔记,这里也就不写了。

在介绍了VisualVM后,最后Joey强烈推荐了[url=http://java.sun.com/javase/6/webnotes/trouble/]Troubleshooting Java™ SE[/url]站点,作为进一步阅读的资源。

[b][size=medium]Darkstar - Java Game Server[/size][/b]

下午4点左右,Ada开始介绍[url=http://projectdarkstar.com/]Project Darkstar[/url]。这是一个致力于简化大型多人在线游戏的后端开发的游戏服务器实现,启动于2001年。现在的大型多人在线游戏,如MMORPG类型的,需要有low-latency、scalable、consistent等许多特性,要正确做到persistence,总之麻烦事很多。Darkstar就是为解决这些问题而提供的基础设施。
Session中很大部分是在讲API,我不太感兴趣所以没仔细听。但那容器API让我觉得它跟老的EJB一样有很强的侵入性,不知道是不是跟项目启动年代有关系,还是只是我的错觉。

[b][size=medium]OpenSolaris[/size][/b]

最后一个session,下午5点左右由Paul做的关于OpenSolaris的介绍。他简短介绍了Solaris和OpenSolaris的历史。其中提到一个观点:现在可以把Solaris看成OpenSolaris的一个distro……这种看法对我来说挺新颖的,照这么说Sun JDK也可以看作OpenJDK的一个distro,StarOffice也可以看作OpenOffice.org的一个distro,etc。这么说也没错就是了。
Sun已经开始对OpenSolaris提供官方支持,所以现在要找OpenSolaris有两个官网:
[url]http://opensolaris.org[/url]
[url]http://www.opensolaris.com[/url]
前一个才是原来的OpenSolaris的社区网站,后一个是Sun提供官方支持的网站来的。Paul推荐大家访问前一个网站 ^ ^
OpenSolaris在开源发布以来已经得到了长足的发展,改善了其易用性以及与其他Unix/Linux的兼容性。列举的众多优点在投影片上都有,像DTrace、ZFS和IPS之类,这里就不重复了。(问题是我现在还不知道在哪里下载投影片……)
Paul特别提到东芝在他们的笔记本里预装了OpenSolaris,是这个操作系统的一大进步。

这个session的目标听众跟当天实际到场的人或许不太吻合?Paul问了好几个问题都没人能给出正确答案。问的问题诸如:
问题:最新的OpenSolaris的版本号是什么,在什么时候什么地方发布的?
正确答案:OpenSolaris 2009.06,是2009年6月1日在[url=http://developers.sun.com/events/communityone/]CommunityOne[/url]上发布的。
问题:Solaris的前身是哪两种操作系统?
正确答案:Sun版的BSD——Sun OS,与System V。
问题:CIFS是什么的缩写?
正确答案:Common Internet File System。OpenSolaris里的CIFS其实就是[url=http://us1.samba.org/]Samba[/url]的一个port。

有人问Paul,Oracle收购了Sun对Java的影响。Paul回答到他上午才看到内部email说董事会已经批准了收购案,让收购过程又进了一步。Oracle对Java很重视,让他感到有点意外。他让各位Java开发人员放心,这个技术还会继续得到大力支持的。

[b][size=medium]结束[/size][/b]

所有session结束后,礼品中貌似还剩下6、7本OpenSolaris红宝书没送出去。John说大家可以自由上去拿,话音刚落,只见一群人蜂拥而上开始抢夺……瞬间就抢完了嗯。

总得来说活动内容很充实,去参加这么一次还是颇有收获的。如果对相关主题都比较熟悉,可能会觉得整个活动就是大的产品演示而已……但我相信没多少人会同时精通那么多东西 =v=
遗憾的是在原本的日程安排里下午Chuk做的移植phoneME的session从半小时的演示缩成了keynote里的一小段。说真的我更想听听他是如何实现这个移植的,而不只想看他拿着NDSi在上面demo……
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值