好吧,我知道大多数人会说"java现在并不慢,它只是一个缓慢的启动阶段“,但没有人能看着我的眼睛告诉我,使用netbeans、eclipse或jedit的响应性就像使用visual studio或textmate一样快,即使在运行了几个小时的”预热“时间之后。哦,我承认启动时间确实是个问题(止咳蚀),但我在这里谈论的是一般的响应性。例如,当你调整窗口大小时,Jedit有一个很小的明显的延迟。
我认为,合理的比较应该是jedit (或任何基于java的文本编辑器)与TextMate、SciTE。
它真正归结为的问题是“如果netbeans/eclipse完全用C语言重写,具有相同的功能集,您会期望它具有与当前相同的性能特征吗?”
有什么想法吗?
还有一些观察结果:
这个简单的基于swing的编辑器1在调整窗口大小时会有非常奇怪的延迟,但滚动感觉非常灵敏。此外,使用netbeans时,当您开始调整大小时,直到您“停止”调整窗口的大小,它会绘制一个丑陋的黑色背景4.也许swing在窗口被拖动时拒绝进行任何刷新?
这是一个简单的swt简单的文本编辑器2。它对拖拽和滚动都有很好的响应。
这是另一个简单的(jface) swt编辑器3。它的大小调整得如此之差,我想这一定是个坏运气。我希望如此。
我还注意到,notepad和visual studio在刷新时(例如:在使用page down浏览非常长的文档时)往往会显示临时的白色"blips“。swt和swing应用程序似乎不会有这些额外的白点,所以我想知道它们是否有一些额外的内部缓冲或什么。这可能会导致感知上的小幅减速
5是一个相关的问题,但并不完全相同。
我目前的猜测,有点基于现有的答案/评论:
谢谢!-收到-
3像java -cp一样编译/运行它。;swt\win32.jar;jface/* BasicEditor
发布于 2011-05-14 05:02:09
要做所有的“即时”代码语法检查和高亮显示,基本上你必须编写你的编辑器来理解(这意味着lex、解析、类型检查、语法验证等) java语言,并在你从一个几乎为空的类开始到结束程序之间的每一个中间状态期间验证文本编辑器的内容。
此外,为了交叉引用的完整性,您必须在内存中保存有关所有其他类的足够信息,这样才能真正确保当您在对象上调用一个方法时,它确实存在于那个“其他”对象上。
更不用说所有其他索引项目的地方了,等等。
简而言之,它之所以慢是因为它做了很多事情,即使它所做的所有事情并不能立即得到那些只关心屏幕上的字母(而不是IDE的所有功能)的人的欣赏。
发布于 2011-05-14 05:28:24
这并没有直接回答您的问题,但这里有一些关于window工具包基准的更多信息
很难给出经验法则,在哪里SWT会优于Swing,反之亦然。在某些环境中(例如Windows),SWT是赢家。在其他系统中(Linux、VMware托管Windows),Swing和它的重绘优化明显优于SWT。性能上的差异是显著的:因子2或更多在两个方向上都是常见的。使用X库用C/C++编写的代码比使用SWT用Java编写的代码执行得更快,速度从5%提高到10%
源http://pub.cosylab.com/CSS/DOC-SWT_Vs._Swing_Performance_Comparison.pdf
发布于 2011-05-14 22:55:13
也许java通常会使用更多的内存(至少,在我的经验中是这样的,并且别名基准测试似乎也是如此……
请注意,不要将默认内存分配的差异与内存的差异混淆-当任务要求程序分配的内存多于默认内存时使用。
regex-dna,反向补码,二叉树,k-核苷酸,扁桃体需要分配内存。
还要注意的是,一些程序是为多核编写的,并分配了额外的缓冲区来累积来自多个线程的结果。
https://stackoverflow.com/questions/5997691
复制相似问题