跳至主要内容

博文

目前显示的是标签为“JVM”的博文

64bit的Java

TSS上推荐了一篇名为 Java Performance in 64bit land 的博文。作者Roo大概和IBM J9有些什么渊源,讨论的话题很明了——在买车买性能,车主们赤裸裸地冲着多气缸奔去的年代,计算机的性能提升却成了一个“不好说”的问题。 按照『常理』来说,三核应该比双核来的强悍,64位系统应该较32位的小弟弟生猛,无奈软件和硬件之间的纠结让现实变得不那么美好……这问题搅活得像是奶粉奶牛鸡蛋饲料一样错综复杂…… 早在几年前C++社区的牛人Herb Sutter就已经发了 一篇振聋发聩的檄文 质问免费的性能提升还能撑多久,大意就是单个微处理器的处理速度增长地山河日下频率的提升已经逐渐接近物理极限,以往程序员们躺着也能依赖摩尔定律飙升程序运行速度的good old time眼看就要say goodbye了,往后的日子处理器大户们肯定会在多核超线程上动脑筋,而软件开发人员也必须要开发多线程的程序才能充分发挥硬件的功能了。 毫无疑问,首先经历变革的阵痛的肯定是C、C++程序员——部分原因当然归功于永远的指针。Java程序员们在面对64bit运算平台的时候,该认真考虑一下以往因为不需要担心所以不曾注意过的问题了……

Living in Hardy Heron (3)

创世纪 神说,要有光,于是就有了光。 神看光是好的,于是就把光暗分开了。 神称光为昼,称暗为夜。有晚上,有早晨,这是头一日。 在Ubuntu Live DVD安装完毕之后,马不停蹄地继续安装必备的系统软件。众所周知,在Linux系统下,即便有了Debian一族的dpkg、apt-get,或是Fedora/Redhat所打造的rpm、yum,软件还是有无法安装的可能。开放源代码的好处就是source code compilation,这才是王道~ 默认的情况下,基本的内核源代码和编译工具是不被安装的。所以必须使用apt-get直接安装: sudo apt-get install build-essential automake linux-headers-`uname -r` 这里linux-header-`uname -r`的uname -r是获取系统的内核版本号。虽然并不经常用到,不过在这个时候``命令还是非常很有用的。 有了基于C/C++构建的编译系统,当然也不能缺少跨平台的Java。由于版权原因,linux下默认提供的java实现并不是Sun的java实现,而是OpenJDK。安装Sun的JDK需要自行到”升阳“的站点去下载bin文件。而我一直偏爱IBM的JDK,以前在Windows下作class obfuscation的时候就发现Sun出品的JDK的性能的确要稍逊IBM一筹。同样的,如果要使用IBM的JDK,也需要自行下载。下载的地址就不多写了,google一下就有了,重要的是看清32bit还是64bit再下载。 chmod +x sun-java-1.6.0r6.bin . sun-java-1.6.0r6.bin 安装后实际上就是解压缩一个目录出来,需要移动到系统的jvm目录中。 sudo mv -t /usr/lib/jvm/ ~/java-6-sun-1.6.0.06/ sudo mv -t /usr/lib/jvm/ ~/ibm-java-x86_64-60 sudo update-alternatives --config java 最后的这个命令是用于设定默认的JDK。当然,手动修改文件/etc/jvm也是可以的。 参考资料 APT/YUM Server 出自鸟哥的私房菜 OpenJDK Project in java.net

JVM suspend Thread

KJava的JVM实现有很多,Motorola在早期的V系列和Tripple里面用的好像是差不多的,后来有一部分使用了Linux+Java的实现,SonyEricsson的JVM是自己的平台,而Nokia的S40和S60系列也都各自用了一套。 Sun的规范虽然说明了正常情况下JVM应当实现的API,以及事件处理的顺序,但是并没有规定JVM应当如何处理一些特殊的情况——例如,startApp和pauseApp。最典型的例子就是手机对于下列情况的处理: incoming call 来电,一般的手机都会在来电的时候调用Canvas的hideNotify()方法,并在来电结束后提示用户是否继续程序,如果是,则调用Canvas的showNotify()方法继续。在这种情况下,有的startApp和pauseApp()的调用不是每个机型都实现的,甚至有的手机连hideNotify()和showNotify()都不实现。 receiving a message 根据我的经验,绝大多数手机都不会暂停应用程序的执行,可能有铃声或是图标闪动之类的提示。 power-save mode 节能模式的一个特征就是:如果用户在一段时间内没有对手机进行操作,那么手机就会降低能耗——例如,关闭背景灯,或是关闭屏幕。有的手机在这种情况下也会让JVM挂起正在执行的线程。 今天遇到了一个bug,就是由于power-save mode引起的——Motorola的E680/A780在进入节能模式之后会将MIDlet的线程挂起,而一般的游戏程序都会在主线程的run()中计算tick所花费的时间(可以计算FPS或是帮助计时)。由于线程挂起之前计算了一个时间,线程恢复执行之后获得了另一个时间,二者之间的差值非常大,这种情况下,应当作为例外处理,而不能当作正常值。