终于搞清楚了为什么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直接绘制,性能和移植性都比较好,效果自然不用说了。

python桌面程序打开慢_转 : 终于搞清楚了为什么Java桌面程序总是感觉慢的原因...相关推荐

  1. centos桌面进入服务器,解决如何在centos7桌面中打开终端_网站服务器运行维护

    如何解决在Centos中NAT无法上网_网站服务器运行维护 在Centos中NAT无法上网的解决方法:首先将网络设置为"DHCP"自动获取IP:然后查看主机的相关服务是否开启:最后 ...

  2. python调用浏览器打开网页_python调用浏览器,实现刷网页浏览小程序!

    Python 和放大镜的二进制代码 私信小编007即可自动获取大量Python视频教程以及各类PDF! python 打开浏览器,可以做简单的刷网页的小程序 and 其他有想象力的程序.不过仅供学习, ...

  3. python演唱会抢票脚本_基于selenium的大麦网演唱会抢票程序

    自从我在知乎分享了代码后,很多人关注了我的代码,自己也很荣幸,哈哈.但是好多人运行我的代码却出现了这样那样的问题,我刚开始也很纳闷,明明自己当初试了好几个演唱会都可以,为什么现在有这么多问题,上段时间 ...

  4. 制作简单的java应用程序_使用exe4j工具制作简单的java应用程序

    首先需要下载exe4j工具并进行安装,下面是利用exe4j工具制作应用程序的步骤. 1.首先将工程导出为可运行的jar包,选择extract required libralies into gener ...

  5. java 获取文件所在的文件夹_带你0基础编写一个Java小程序,领略Java程序从编写到编译再到运行的全流程...

    在学习Java之前我们需要先认识下什么是计算机语言?计算机语言又有哪些分类?在了解这些后对我们理解学习帮助是很大的. 要知道计算机语言是人与计算机之间进行信息交流沟通的一种特殊语言,又分为机械语言.汇 ...

  6. centos7点击桌面图标无反应_【问题帖】电脑不显示桌面图标和任务栏,只显示鼠标光标咋办?...

    本帖首发于:360官网.360安全卫士服务号.原作者:Yimoo1314 "电脑不显示桌面图标和任务栏,只显示鼠标光标"问题解决方案-安全资讯-360官网​www.360.cnht ...

  7. cad的lisp程序大集合_大数据成神之路-Java高级特性增强(CopyOnWriteArraySet)

    大数据成神之路 大数据成神之路: 点我去成神之路系列目录^_^ 预计更新500+篇文章,已经更新40+篇~ 本系列的大纲会根据实际情况进行调整,欢迎大家关注~ 导语 CopyOnWriteArrayS ...

  8. 600多个微信小程序源码_点餐系统的开发,java后台+微信小程序 实现完整的餐厅点餐系统。微信扫码点餐小程序源码讲解...

    今天来给大家讲解一个完整的微信扫码点餐项目.java后台+微信小程序实现点餐系统. 后台技术选型: JDK8 MySQL(需要5.6以上) Spring-boot Spring-data-jpa Lo ...

  9. java自签名程序_如何使机器信任自签名Java应用程序

    我正在部署一个应用程序使用 JAWS,它的工作,直到2013年底,当我得到一个警告,然后今天上午Java完全阻止它.法语的消息是: 应用程序bloquéeparparamètresdesécurité ...

最新文章

  1. java 二叉树中和为某一值的路径_25. 二叉树中和为某一值的路径
  2. 变量声明和定义的区别
  3. NTP时间服务器简介
  4. react-dnd 拖拽
  5. [YTU]_2632 ( B2 友元光顾)
  6. 物流运输系统设计浅谈
  7. 【Python】map()函数
  8. Android 开机自动启动服务
  9. QT学习笔记(十四):QLayout的属性介绍
  10. trunk vlan 加路由
  11. 惠普台式机重装系统之后,无法进入系统
  12. 多块盘制作成一个lvm
  13. 8月份全国省会城市快递上门签收分析-谁是剁手王城?
  14. SAP Script教程:SE71、SE78、SCC1、VF03、SO10-013
  15. 悲:又有华为员工猝死,原因调查中
  16. goldwave教程分享:用GoldWave进行音量调节
  17. torchtext Filed 方法报错解决办法
  18. 用cocos实现的《我的世界》已经上线微信小游戏,分享一下主要技术
  19. gcc命令行选项说明
  20. 分布式对偶平均法(DDA)

热门文章

  1. Ssh+Mysql实现的Java Web图书商城
  2. 基于JAVA+SpringMVC+Mybatis+MYSQL的在线书城购物网站
  3. 基于JAVA+SpringBoot+Mybatis+MYSQL的今日头条新闻网站
  4. 基于JAVA+SpringMVC+Mybatis+MYSQL的汽车维修管理系统
  5. 【转】【最小树形图】有向图的最小生成树【朱刘算法】
  6. Linux基础-12-yum管理软件包
  7. 解决mysql大小写敏感问题
  8. 前端架构之路:使用Vue开始第一个项目
  9. 【例5.2】组合的输出
  10. Java经典实例:进阶版堆栈实现,支持任何对象类型