转 : 终于搞清楚了为什么Java桌面程序总是感觉慢的原因

转自: http://my.oschina.net/u/2306127/blog/370495

终于搞清楚了为什么Java桌面程序总是感觉慢的原因!
    按照道理服务器和浏览器都在用脚本和虚拟机,那些不慢,而Java的桌面程序总是感觉响应迟钝呢?主要有两个原因,一是服务器和浏览器都是异步的,提交到渲染出来这中间有足够的时间去处理,而且网络IO要远远慢于本地CPU调用;二是浏览器的界面其实不是JavaScript渲染(很多人可能都会以为HTML是JS绘制的),而是浏览器在操作系统层原生支持的,甚至还做了专门的优化。
    Java绘制图形实际上是两层,一层是基于底层绘图API进行桥接,如swing之类的JavaStyle的UI,每一个UI绘制操作都要调用虚拟机API,效率很难提升;第二层使用GUI对象层API桥接(比如WinForm的API,但是不可移植),这种方式减少了很多图形API的Java调用,性能跟原生程序不相上下。pyQT的实现是基于第二种方式的,因此虽然python效率并不高,但是绘制实时图形和GUI没有什么压力。Java的OpenGL也是基于第二种方式实现的,因此也可以流畅地绘制三维图形(如果运算量大就不行了)。

因此,提升Java中桌面程序交互性的关键是用原生库进行GUI层面的绘制,这个有很多了,包括WxWindow/GTK/QT,而且效果也非常酷。Sublime/Blender都是用的这种模式,里面很多程序都是python的,但是界面和图形绘制操作是C++的,调用原生操作系统的API进行绘制(QT是调用的GUI层,使用不同操作系统自己的GUI进行绘制)。

Java桌面程序的开发建议使用Eclipse的框架,开发相容性比较好,插件机制比较完善。但是Eclipse的界面也有上述问题,在虚拟机里响应太慢,我已经基本放弃了。

最新的UI系统都是用OpenGL直接绘制,性能和移植性都比较好,效果自然不用说了。

时间: 2024-10-17 02:25:32

转 : 终于搞清楚了为什么Java桌面程序总是感觉慢的原因的相关文章

Java桌面程序打包成exe可执行文件

前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: eclipse.exe4j(网上有软件和帐号下载) 第一步,将java项目打包成可执行jar文件,首先看一下我的java project结构,Main.java是程序入口类,里面有main函数,config目录是些配置文件,lib是用到的第三方类库 开始打包,Simulate(Java项目)-鼠标右键-E

公布Java桌面程序

我拿了一份桌面工具的开源码,修改动改,在elipse上执行.感觉良好.但到了公布应用程序,就傻眼了. 我竟然不知道咋公布! 呵呵,不愧是Java小白. 假设是微软阵营,直接就编译成exe了. 但java这里,假设要编译成EXE,还须要一个第三方工具,eclipse是没有的. 更何况,要编译exe,前提是要先将源码编译成jar包. 但是jar包又分为普通jar包和可执行jar包,要选哪一个?而且这份源码有点庞大,它本身又引用了很多jar包. 这份源码使用了 ant 和 lvy,我到如今都搞不懂它们

java桌面程序中使用联动菜单遇到与解决的问题

最近在做一个小小的系统,想实现联动菜单,故尝试了几种方法. 1.想通过一个线程来监控下拉菜单的变化,从而控制从菜单. 遇到的问题: ①:开始,我是用一个外部线程类,不过我要通过外部线程类来改变主窗口的下拉菜单, ②:所以,就需要一个传递一个类参数才能引用, ③:我在主窗口中调用线程类. ④:由于我需要把从数据中得来的数据在线程类中使用,所以就需要在线程类中使用数据库连接 当然不是在run方法中使用,而是在最开始定义数据时就初始化赋值好. ⑤:我以为,在最开始使用数据库连接,就连一次,应该没事.

【exe4j】如何利用exe4j把java桌面程序生成exe文件

前言: 我们都知道Java可以将二进制程序打包成可执行jar文件,双击这个jar和双击exe效果是一样一样的,但感觉还是不同.其实将java程序打包成exe也需要这个可执行jar文件. 准备: eclipse.exe4j(网上有软件和帐号下载) 第一步,将java项目打包成可执行jar文件,首先看一下我的java project结构,Main.java是程序入口类,里面有main函数,config目录是些配置文件,lib是用到的第三方类库 开始打包,Simulate(Java项目)-鼠标右键-E

使用JVM管理工具jvisualvm,系统提示"无法检测到本地java应用程序"的原因和解决办法

我使用的JDK版本是1.6.0_37版本,操作系统是windows xp,今天想使用下%JAVA_HOME%/bin/目录下的一些管理工具,结果遇到麻烦了.使用JPS命令,无法列出本地运行的java虚拟机:使用jvisualvm,提示"无法检测到本地java应用程序". 这个问题的原因可以看下:http://docs.oracle.com/javase/1.5.0/docs/guide/management/faq.html#win1 大概原因有2种: 1.操作系统的临时文件目录所在的

一键搞定Java桌面应用安装部署 —— exe4j + Inno Setup 带着JRE, 8M起飞

转载自:http://www.blogjava.net/huliqing/archive/2008/04/18/193907.html 对于作Java桌面应用来说,比较烦人的就是安装部署问题,客户端是否安装有jre.jre版本问题.jre去哪下载.如何用jre启动你的Java应用?不要说刚接触电脑的人,就算是比较熟悉电脑,如果没有接触过Java,面对一个Java应用,如何在Windows下启动它,估计都会折腾半天.如果不是因为这个问题,Java在我的眼里算是最完美的语言了,也是我最喜爱的语言.

Access denied for user ''@'localhost' to database 'mysql'。网上找了一些方法,终于搞定了。

转载:http://blog.csdn.net/lilian129/article/details/9297881 这几天用空密码登录mysql后,然后修改mysql默认密码,使用mysql表出现过这个问题,提示:ERROR 1044 (42000): Access denied for user ''@'localhost' to database 'mysql'.网上找了一些方法,终于搞定了. 我用的是xampp集成的mysql,之前空密码能登进去phpmyadmin,但怎么也进不去phpm

第二天,终于搞定 —— 2014.10.28

npm install 报错 bower ENOGIT git is not installed or not in the PATH 的问题终于搞定. 在angular-phonecat文件夹打开nodejs cmd.exe,运行npm install,就报错的问题,终于被我搞定了,期间查阅了N多资料,都是泪啊,再一次感受到了baidu和google的差距,在stackoverflow上终于找到了解决方法,亏的英语没差到那种完全看不懂的程度啊... 查阅资料是提示是把Git的默认cmd.exe

在线讲堂:轻松搞定基于嵌入式、桌面、内网和云的软件授权

我们诚挚地邀请您参加 6 月19 日举办的圣天诺第2季 "在线讲堂".软件交付的规划过程是一个连续组合规划过程 - 开发.授权.部署和支持.反馈.不懈努力研发客户期盼的产品,同时让服务供应商获利. 本期讲堂帮助您了解: 追踪软件部署如何改善客户体验和提高客户满意度 授权实施选项 – 从桌面.嵌入式.内网,到移动和云 探讨内网环境的软件授权 -   在内网环境下,强制执行和授权面临哪些挑战? -   内网环境下成功部署的解决方案是什么? 用一套方案管理所有授权部署的重要性 主讲:王福涛