gpt4 book ai didi

java - 为什么基于 java 的编辑器通常很慢,因为据说 java 在预热阶段之后很快?

转载 作者:IT老高 更新时间:2023-10-28 20:54:28 26 4
gpt4 key购买 nike

好吧,我知道大多数人说“java 现在并不慢,只是启动阶段很慢”,但没有人能看着我的眼睛告诉我使用 netbeans 或 eclipse 或 jedit 的响应速度比如说,visual studio 或 textmate,即使在运行了数小时的“热身”时间之后。哦,启动时间绝对是一个问题(咳嗽 eclipse )我承认,但我在这里谈论的是一般的响应能力。例如,当您调整窗口大小时,Jedit 会出现明显的小延迟。

我认为,一个合理的苹果与苹果比较应该是 jedit(或任何基于 java 的文本编辑器)与 TextMate、SciTE。

它真正归结为的问题是“如果 netbeans/eclipse 完全用 C 重写,具有相同的功能集,您是否希望它具有与当前相同的性能特征。”

有什么想法吗?

还有一些观察:

当您调整窗口大小时,这个简单的基于 Swing 的编辑器 [1] 有非常奇怪的延迟,但滚动感觉非常灵敏。此外,使用 netbeans,当您开始调整大小时,直到您“停止”调整窗口大小,它会绘制一个丑陋的黑色背景 [4]。也许在拖动窗口时,swing 拒绝进行任何刷新?

这是一个简单的 swt 简单文本编辑器 [2]。它对拖动和滚动都非常敏感。

这是另一个简单的 (jface) swt 编辑器 [3]。它的大小调整得太差了,我认为这一定是一个糟糕的侥幸。我希望。

我还注意到,记事本和 Visual Studio 在刷新时往往会显示临时的白色“光点”(例如:在非常长的文档中使用向下翻页时)。 swt 和 swing 应用程序似乎从来没有那些额外的白色光点,所以我想知道它们是否有一些额外的内部缓冲或其他东西。这可能会导致小幅放缓,感知明智

[5] 是一个相关但不完全相同的问题。

我目前的猜测,基于现有的答案/评论:

  • Netbeans 刚刚变得臃肿。也许有一些关于编辑 java 的东西会让编辑器创建者过火?也许他们出于某种原因没有优化他们的编辑器?
  • Java 编辑器使用大量 RAM 可能会使内容远离二级缓存?
  • Java 编辑器编辑 java,所以他们可能不得不不断地调用 javac,这样每次都会导致启动缓慢?
  • SWT 是原生小部件之上的抽象层,可能会减慢速度。
  • Swing 有一个糟糕的调整大小刷新策略,这使它“看起来”很慢。
  • Netbeans 使用客户端虚拟机,所以它可能只是没有针对速度进行调整? (另请参阅 [6],其中包含指向另一个问题的链接,其中包含一系列参数,您可以将其传递给 netbeans 以尝试加快速度)。
  • Swing/SWT 在滚动过程中的伪影似乎比原生 Windows 应用少。也许这意味着他们有缓冲“助手”来帮助避免伪影,导致感知缓慢,因为它不会立即刷新。
  • 也许 Java 没有庞大的基准测试,所以也许它没有针对这种类型的负载进行优化?也许有一些隐藏的低效率。
  • 与此相关的是,也许 java 可以“变得”很快,但不知何故,编辑器创建者并没有有效地使用它(“核心库将在速度方面为我节省!”)。
  • 也许它只是“感觉”很慢,因为(至少 netbeans)必须不断调用新的 Java 实例来运行调试器等,而每个调试器的启动时间都很慢。

谢谢!-罗杰-

[1] http://www.picksourcecode.com/articles/explan.php?id=6c9882bbac1c7093bd25041881277658&ems=9a0fa83125d48ab7258eab27754dd23e&lg=10

[2] https://gist.github.com/972234

[3] http://www.java2s.com/Code/Java/SWT-JFace-Eclipse/BasicEditor.htm像 java -cp .;swt\win32.jar;jface/* BasicEditor 一样编译/运行它

[4] http://twitpic.com/4xi8ov

[5] Is Java really slow?

[6] is there a way to make netbeans use the hotspot server vm

最佳答案

要进行所有“即时”代码语法检查和突出显示,您基本上必须编写编辑器来理解(即 lex、解析、类型检查、语法验证等)Java 语言并验证内容在您从一个几乎空的类(class)开始到完成您的程序之间的每个中间状态期间,文本编辑器的状态。

此外,为了交叉引用完整性,您必须在内存中保存有关所有其他类的足够信息,这样您才能真正确保当您调用对象上的方法时,它确实存在于那个“其他”对象上。

更不用说索引项目的所有其他地方,等等。

简而言之,它很慢,因为它做了很多事情,即使它所做的所有事情都不会被只关心屏幕上的字母(而不是 IDE 的所有功能)的人立即欣赏)。

关于java - 为什么基于 java 的编辑器通常很慢,因为据说 java 在预热阶段之后很快?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5997691/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com