Chinaunix首页 | 论坛 | 博客
  • 博客访问: 810918
  • 博文数量: 210
  • 博客积分: 10002
  • 博客等级: 上将
  • 技术积分: 1840
  • 用 户 组: 普通用户
  • 注册时间: 2008-11-18 09:56
文章分类

全部博文(210)

文章存档

2011年(1)

2010年(6)

2009年(65)

2008年(138)

我的朋友

分类: LINUX

2008-11-18 10:23:02

 Java为什么慢, 恐怕理由一大堆啊!
和一位做底层驱动的哥们聊天, 谈到Pure Java Phone, 这哥们一脸不屑. 他说java是垃圾, 速度慢 ,功耗大. 这简直是向我们这些做Java ME的人下战书啊. 不过Java的速度确实有时候难以让人认同.
1. 内存回收机制: Java自身的内存管理方式决定了, 每当进行彻底的垃圾回收的时候, 所有的Java应用程序必须停下来. 这点非常的讨厌, 搞得VM的开发者不得不挖空心思的去设计垃圾回收的算法.
2. 函数的调用: Java的面向对象设计思想, 导致Java类库的设计, 充满了许多相关联的, 非常短小的方法, 比如private成员变量的get/set函数.  还有就是Java的类,至少有一个构造函数, 因此很多情况下, 会产生一些空的构造函数. 函数的调用会产生一些开销.  再就是Java中函数的动态绑定, 特别是interface的使用, 导致java函数调用的效率比较低.
3. Java的异常机制: Java规范要求了运行期异常检查. 这对Java程序的调试和排错有很大帮助, 对Java的效率,却造成了很大的影响.
4. 同步方法和同步的代码块. 同步方法和同步代码块很容易造成性能的下降, 在java这种面向对象设计思想的环境里, 很多方法被设计的很小, 调用很频繁, 如果是同步的方法, 性能下降就非常的明显.
.....
Android声称该平台上的应用都是用Java来写, 那么效率问题如何考虑呢?
对于Dalvik来说, 似乎并没有声称自己是Java虚拟机, 我个人理解:这就意味着对dalvik的优化, 可以避开Java规范的束缚. 比如Google Dalvik VM基于寄存器,而Sun Java VM基于栈,这样可以做到在编译时提前优化代码而不是等到运行时,虽然Dalvik还没有像Sun JIT那样的类似VB采用Native编译而非P-code动态解释,Dalvik最终编译Java Class为Dex字节码,成为一种中间语言Common Intermediate Language简称CIL和微软.Net构架相似。这样的中间语言效率要比较传统的Java Class效率高.

写了这半天,想好好研究一下dalvik, 可惜手头上缺乏足够的资料, 比较可惜.
阅读(554) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~