Java是Linux最好的朋友

不同视角、不同观点、深度探讨,禁止人品和道德攻击
头像
devin
帖子: 189
注册时间: 2008-08-26 22:57
来自: 长沙

Java是Linux最好的朋友

#1

帖子 devin » 2008-09-01 11:48

  看到论坛中很多人都不喜欢Java写的程序,主要理由就是Java程序不好看,速度慢。

  但我认为Java是Linux最好的朋友。为什么呢?下面我们来讨论一下:

  说Java慢的人是对Java不夠了解,现在的Java虚拟机都采用了实时编译技术,也就是说Java程序在启动的那一瞬间,Java虚拟机把Java程序临时编译成了本地机器代码,

  这样Java程序在执行时速度和C++写出的程序速度差不多,并不会慢。我们曾经测试过,在做非GUI的工作时,Java和C++的速度相差不超过10%

  所以java速度实际速度是不慢的,但为什么大家还是感觉java很慢呢?其实大多数人对Java速度慢的感觉主要是使用Java图形界面程序(GUI程序)时,感觉比较慢。
这主要有三个原因。

  1、是因为Java程序启动时有大量代码(特别是GUI程序)要编译成本地代码,所以程序启动速度很慢,给人的第一感觉就不好

   2、Java的图形程序为了考虑移植性,大多数是采用AWT/SWING实现用户界面,它的实现原理是,

完全不使用真实操作系统的任何界面控件,而在一个空白的窗口上重新绘制所有控件。这样的好外是,

在任何操作系统上都能正常工作,而且用户界面一模一样,但坏处是没有办法利用到本地控件和本地硬件加速功能,速度大受影响,

而且用户界面风格和本地程序的界面风格很不相同,给人怪怪的感觉。

  3、Java相对其它语言更多,更深层次的使用了面向对象思想,能实现高可用性,高复杂性的软件,但大量用使用对象所

带来的问题是大内存占用和更慢的运行速度

以上这些问题会随着计算机性能的不断提高和java本身的不断改进而解决。

  为什么说java是LInux最好的朋友呢?原因很简单--Java强大的可移植性,大家设想一下,

如果我们现在在Windows中使用的程序绝大部分都是用java写的,那么Windows上的用户只用简单地把Windows格了,

装上Linux,再把Windows上的程序直接拷过来,就可以用了,而且用起来感觉和原来没什么不同,

这样wine,vbox这些东东都可以不用了,这样大量的Windows用户都可以轻易转换到Linux上。

  不管从那个方面看Java对Linux对普及都有极大的好处,所以我们这些Linuxer更应该支持Java,关心Java,因为支持java就是支持我们的Linux!
fbsd4
帖子: 174
注册时间: 2007-03-19 8:07

#2

帖子 fbsd4 » 2008-09-01 12:56

Azureus就是个好东西啊。

jre6比之前的版本提高了N多了。
xeoc
帖子: 1994
注册时间: 2007-05-06 10:12

#3

帖子 xeoc » 2008-09-01 12:58

还凑合吧...
头像
nouse
帖子: 133
注册时间: 2007-11-10 1:09
来自: 上海

#4

帖子 nouse » 2008-09-01 13:21

perl, python, ruby, mono
gtk+, qt, wxwidgets, etc.都有很好的移植性

有一个叫做mingw的东西甚至可以做到在linux下编译可以在windows下运行的程序。
poet
帖子: 2841
注册时间: 2006-09-11 22:47

#5

帖子 poet » 2008-09-01 13:44

java的JIT是靠牺牲启动速度和内存占用来换取运行速度的。所以它至少不适合两种情形:
1。内存非常有限的情形,(绝大多数嵌入式系统都符合该情形)
2。应用由大量的小程序组成,启动速度无法忽略不计。

然后,我们都知道Java之所以慢并不仅仅是因为它是解释执行的,而更重要的是因为它把所有系统调用进行了重新封装,这种封装降低了程序运行效率,——即使gcj这种完全把java编译成目标代码的机制都无法解决java的效率问题,JIT又怎么能够解决?

对于小程序,JIT的启动速度影响无法忽略,对于大程序,Java图形界面的低效又难以忍受,所以不论如何Java的效率问题短期内不可能解决。

第三,我不知道sun java 使用什么协议,但是既然它不是 debian 系的官方标准java解释器,那么很可能,sun java 还是包含不自由的成分?如果sun java 是完全自由的,ubuntu 没有理由不把它作为缺省的java解释器。——所以这说明,不完全自由的sun java,跟Linux并不是完全的朋友。
头像
devin
帖子: 189
注册时间: 2008-08-26 22:57
来自: 长沙

#6

帖子 devin » 2008-09-01 13:47

perl, python, ruby, mono
gtk+, qt, wxwidgets, etc.都有很好的移植性

有一个叫做mingw的东西甚至可以做到在linux下编译可以在windows下运行的程序。
这些东东里面要分一下类,
1、perl、python、ruby是脚本类语言,也就是动态语言,现在用来写桌面软件还不太现实。

2、mono就不说了,问题很多,远没到实用程度,而且微软最怕跨平台,它怎么会让net上的程序在linux上好好跑

3、gtk+,qt,wxwidgets,都是c和c++的库,除了qt很少看到windows上用这些库实现的程序。而且最大的问题,不能

做到一次编译到处运行。这一点很重要。想想有时我们去下个软件,要找到for os, for arch都合适的好难。而且有的

闭源软件只会提供一两个平台的编译版本让你选择。如果选择java,一切就太简单了,下一个jar包,不管你什么

操作系统,不管你什么cpu,双击运行,一样的界面,一样的操作感觉,真是太爽了!

4、mingw是gnu套件对windows平台的移植,是为了把gnu/linux下软件移到windows(要重新编译),

主要是提供了unix/linux的c函数库。一样有上面这个重编译问题。
头像
SWX
帖子: 181
注册时间: 2006-07-30 9:31

#7

帖子 SWX » 2008-09-01 13:51

devin 写了:
perl, python, ruby, mono
gtk+, qt, wxwidgets, etc.都有很好的移植性

有一个叫做mingw的东西甚至可以做到在linux下编译可以在windows下运行的程序。
这些东东里面要分一下类,
1、perl、python、ruby是脚本类语言,也就是动态语言,现在用来写桌面软件还不太现实。

2、mono就不说了,问题很多,远没到实用程度,而且微软最怕跨平台,它怎么会让net上的程序在linux上好好跑

3、gtk+,qt,wxwidgets,都是c和c++的库,除了qt很少看到windows上用这些库实现的程序。而且最大的问题,不能

做到一次编译到处运行。这一点很重要。想想有时我们去下个软件,要找到for os, for arch都合适的好难。而且有的

闭源软件只会提供一两个平台的编译版本让你选择。如果选择java,一切就太简单了,下一个jar包,不管你什么

操作系统,不管你什么cpu,双击运行,一样的界面,一样的操作感觉,真是太爽了!

4、mingw是gnu套件对windows平台的移植,是为了把gnu/linux下软件移到windows(要重新编译),

主要是提供了unix/linux的c函数库。一样有上面这个重编译问题。

楼上的知道文明4是用什么写的么?
就是用python+xml

虽然执行效率比较低,不怎么样的画面对显卡要求还比较高。

理论上来说也是可以移植到linux上来的吧
头像
cnkilior
论坛版主
帖子: 4984
注册时间: 2007-08-05 17:40

#8

帖子 cnkilior » 2008-09-01 13:54

perl、python、ruby是脚本类语言,也就是动态语言,现在用来写桌面软件还不太现实。

gnome部分东西是用python。

不信你远程运行gnome-session然后ctrl+c就会出现python的提示!
头像
devin
帖子: 189
注册时间: 2008-08-26 22:57
来自: 长沙

#9

帖子 devin » 2008-09-01 13:58

java的JIT是靠牺牲启动速度和内存占用来换取运行速度的。所以它至少不适合两种情形:
1。内存非常有限的情形,(绝大多数嵌入式系统都符合该情形)
我们大多人的手机里面都有java,大多数都能打游戏,甚至3d游戏
2。应用由大量的小程序组成,启动速度无法忽略不计。
这种情况不多,而且实时编译速度是和类文件的个数有关
然后,我们都知道Java之所以慢并不仅仅是因为它是解释执行的,而更重要的是因为它把所有系统调用进行了重新封装,这种封装降低了程序运行效率,——即使gcj这种完全把java编译成目标代码的机制都无法解决java的效率问题,JIT又怎么能够解决?
gcj的编译后的程序运行的速度我们也测试过,竟然比用jvm跑慢几倍,不知道gcj怎么本地化的。
第三,我不知道sun java 使用什么协议,但是既然它不是 debian 系的官方标准java解释器,那么很可能,sun java 还是包含不自由的成分?如果sun java 是完全自由的,ubuntu 没有理由不把它作为缺省的java解释器。——所以这说明,不完全自由的sun java,跟Linux并不是完全的朋友。
sun java 包括所有协议和源码完全开放,jdk源码是gpl的
网址
http://www.openjdk.org
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#10

帖子 eexpress » 2008-09-01 14:05

朋友。没错啊。ls的在讨论啥。
● 鸣学
头像
devin
帖子: 189
注册时间: 2008-08-26 22:57
来自: 长沙

#11

帖子 devin » 2008-09-01 14:11

gnome部分东西是用python。
不信你远程运行gnome-session然后ctrl+c就会出现python的提示!
为什么部分用python,因为还是考虑到效率,我不了解python,但估计应该主要是用c,c++实现下层库,

用python实现上层的策略和逻辑。另外我这里是指用脚本语言来写桌面程序,比如用python实现类似永中office这样的
                              ^^^^^^^^
软件是不可想像的,因为脚本执行速度实在是太慢了。

python通过调用下层库来实现功能,有点类似shell中的dialog命令(sudo apt-get install dialog),dialog是c实现,但它使用时,是用shell脚本去调用dialog这条命令,实现对话框显示。

楼上的知道文明4是用什么写的么?
就是用python+xml
不太可能吧,完全用python实现?包括图像处理,策略.....
头像
jarryson
帖子: 4002
注册时间: 2005-08-14 19:53

#12

帖子 jarryson » 2008-09-01 15:13

我不是很清楚,不过python,ruby,perl是非常适合开发的,因为很多桌面软件都是利用这些语言写的,而且效率很高啊。gnome也推荐pygtk作图形开发
头像
想入非非
帖子: 8078
注册时间: 2008-07-14 22:42
来自: Beijing
联系:

#13

帖子 想入非非 » 2008-09-01 19:46

喜欢永中
速度不错
Ubuntu User
头像
anticlockwise
帖子: 2394
注册时间: 2007-03-01 20:46
来自: 湖南长沙

#14

帖子 anticlockwise » 2008-09-01 20:52

大家都是朋友,有什么好讨论的呢?我Java和Python都用,不是挺好的吗?

虽然我是Java程序员,不得不说目前的桌面程序很多不用Java还是有其原因的,它的运行速度的确不错,但是内存消耗很大。况且,开发效率比起Python等脚本语言来说几乎没有可比性。用Gtk、QT等可移植界面库或者他们脚本语言的绑定(如PyGtk、PyQT)写出来的程序,开发很快,而且运行效率并不低下,当然大家会用之作为首选。Java AWT和Swing写出来的界面在响应上的确还需要很大的改进。可能有很多测试都可以证明在响应和速度上Swing并不慢,但真正重要的是用户体验,很多人在用程序的时候所体会到的就是这样~~不过SWT倒是个好点的选择~~
头像
SWX
帖子: 181
注册时间: 2006-07-30 9:31

#15

帖子 SWX » 2008-09-02 0:07

devin 写了:
gnome部分东西是用python。
不信你远程运行gnome-session然后ctrl+c就会出现python的提示!
为什么部分用python,因为还是考虑到效率,我不了解python,但估计应该主要是用c,c++实现下层库,

用python实现上层的策略和逻辑。另外我这里是指用脚本语言来写桌面程序,比如用python实现类似永中office这样的
                              ^^^^^^^^
软件是不可想像的,因为脚本执行速度实在是太慢了。

python通过调用下层库来实现功能,有点类似shell中的dialog命令(sudo apt-get install dialog),dialog是c实现,但它使用时,是用shell脚本去调用dialog这条命令,实现对话框显示。

楼上的知道文明4是用什么写的么?
就是用python+xml
不太可能吧,完全用python实现?包括图像处理,策略.....
Python

The game uses boost.python to allow the Python programming language access to many parts of the game (including the style and content of all interface screens). Python can also be used to modify random map generation and to add complex scripted events.

The version of Python present in the Windows version of the game differs from the version in Mac OS X up to and including version 10.4.7, and as a result, while most Python files for the Windows version will work on the Macintosh version, not all will. The reverse is also true.

策略的话,用python很简单的。他们制作mod都可以学一下python。

至于引擎,那多半不是用python的了。貌似用的就是sid meier的海盗的引擎
回复