Подтвердить что ты не робот

Почему редакторы на основе Java обычно медленны, учитывая, что java считается быстрым после фазы прогрева?

Хорошо, я знаю, что большинство людей говорят, что "в наши дни java не медленна, у нее просто медленная стадия запуска", но никто не может смотреть мне в глаза и сказать мне, что использование netbeans или eclipse или jedit столь же чувствительно, как и скажем, визуальная студия или текст, даже после работы в течение нескольких часов "разминки". О, время запуска - определенно проблема (кашляющее затмение), я признаю, но я говорю об общей отзывчивости здесь. Например, Jedit имеет небольшое заметное отставание при изменении размера окон.

Разумное сравнение яблок с яблоками, я думаю, будет jedit (или любой текстовый редактор на основе java) по сравнению с TextMate, SciTE.

Вопрос: "Если netbeans/eclipse полностью переписаны на C, с тем же набором функций, вы ожидаете, что он будет иметь те же характеристики производительности, что и в настоящее время".

Любые идеи?

И несколько наблюдений:

Этот простой редактор на основе swing [1] имеет очень странные запаздывания при изменении размера окна, но прокрутка кажется довольно отзывчивой. Кроме того, при использовании netbeans, когда вы начинаете изменять размер, пока вы не "остановите" изменение размера окна, он рисует уродливый черный фон [4]. Возможно, качание отказывается делать какие-либо обновления во время перетаскивания окна?

Вот простой текстовый редактор swt [2]. Он отлично реагирует на перетаскивание и прокрутку.

Вот еще один простой (jface) редактор swt [3]. Он так плохо меняет размеры, я думаю, что это должно быть плохой случайностью. Надеюсь.

Я также заметил, что блокнот и визуальная студия имеют тенденцию показывать временные белые "блики" при их обновлении (например: при использовании страницы вниз по очень длинному документу). swt и swing приложения, похоже, никогда не имеют этих дополнительных белых бликов, поэтому мне интересно, есть ли у них дополнительная внутренняя буферизация или что-то в этом роде. Это может вызвать небольшое замедление, восприятие мудрое

[5] - связанный, но не совсем тот же вопрос.

Мои текущие предположения, немного основанные на существующих ответах/комментариях:

  • Netbeans только раздулся. Может быть, есть что-то о редактировании java, которое заставляет редакторов заходить за борт? Может быть, они почему-то не оптимизируют своих редакторов?
  • Редакторы Java могут использовать тонны ОЗУ, возможно, из-за чего хранятся данные из кэша L2?
  • Редакторы Java изменяют java, поэтому, возможно, им приходится постоянно вызывать, скажем, javac, который каждый раз берет на себя медленный старт-аут?
  • SWT - это уровень абстракции поверх собственных виджетов, что может замедлить работу.
  • У Swing есть ужасная политика обновления размера, которая заставляет ее "появляться" медленно.
  • Netbeans использует клиентскую VM, так что, возможно, он просто не настроен на скорость? (см. также [6], в котором содержится ссылка на другой вопрос с ответом, который представляет собой множество параметров, которые вы можете передать netbeans, чтобы попытаться ускорить его).
  • Swing/SWT, по-видимому, меньше артефактов во время прокрутки, чем собственные приложения для Windows. Возможно, это означает, что у них есть буферизация "помощников", чтобы помочь избежать артефактов, вызывая замедленную медлительность, так как она не обновляется немедленно.
  • Возможно, у Java нет мегалитических тестов, поэтому, возможно, он не оптимизирован для такого типа нагрузок? Возможно, есть некоторые скрытые неэффективности.
  • Кроме того, возможно, что java можно "быстро сделать", но как-то создатели редактора не используют его эффективно ( "базовая библиотека спасет меня по скорости!" ).
  • Возможно, он просто "чувствует" медленный, так как (по крайней мере, netbeans) приходится постоянно обращаться к новым экземплярам java для запуска отладчиков и т.д., каждый из которых использует свое собственное медленное время запуска.

Спасибо! -roger -

[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] Является ли Java очень медленной?

[6] есть способ сделать netbeans использовать сервер hotspot vm

4b9b3361

Ответ 1

Чтобы сделать все это "на лету" проверку синтаксиса кода и выделение, вы в основном должны написать свой редактор, чтобы понять (это означает, что lex, parse, проверка типа, проверка синтаксиса и т.д.) Java-язык и проверка содержимого текстового редактора во время каждого промежуточного состояния между вами, начиная с почти пустого класса и заканчивая вашу программу.

Кроме того, для целостности перекрестных ссылок вы должны хранить достаточную информацию обо всех других классах в памяти, чтобы вы действительно могли убедиться, что при вызове метода на объекте он действительно существует на этом "другом" объекте.

Это не говоря уже обо всех других местах, где индексы индексируются и т.д.

Короче говоря, он медленный, потому что он много делает, даже если весь материал, который он делает, не сразу оценивается человеком, который касается только букв на экране (и не всех функций IDE).

Ответ 2

Это не дает прямого ответа на ваш вопрос, но здесь есть дополнительная информация о контрольных показателях инструментальных средств окна

Трудно дать правило большого пальца где SWT превосходит Swing, или наоборот.     В некоторых средах (например, Windows) SWT является победителем. В других (Linux, VMware     хостинг Windows), Swing и его оптимизация перерисовки превосходят SWT значительно.     Значительные различия в производительности: факторы 2 и более общий, в     в любом направлении.        Код, написанный на C/С++ с использованием библиотеки X, выполняет несколько быстрее чем     код, написанный на Java с использованием SWT, с ускорением от 5% до 10%

Источник http://pub.cosylab.com/CSS/DOC-SWT_Vs._Swing_Performance_Comparison.pdf

Ответ 3

Возможно, Java использует больше памяти обычно (по крайней мере, по моему опыту это так, и тесты alioth похоже, согласны...

Будьте осторожны, чтобы не путать различия в распределении памяти по умолчанию с различиями в памяти - используется, когда задача требует, чтобы программы выделяли больше, чем память по умолчанию.

regex-dna, обратное дополнение, бинарные деревья, k-нуклеотид, mandelbrot требуют выделения памяти.

Также обратите внимание, что некоторые из программ написаны для многоядерности и выделяют дополнительные буферы для накопления результатов из нескольких потоков.

Ответ 4

Возможно, вы смешиваете две разные вещи:

  • "В наши дни java не замедлит, это просто имеет медленную фазу запуска"

JVM работает как интерпретатор байтового кода до тех пор, пока не будут определены горячие методы и только затем скомпилирует их в собственный код.

Для конфигурации -server VM (которая может быть по умолчанию на вашем оборудовании) методы не скомпилируются до тех пор, пока количество вызовов/ветвей метода не будет > XX: CompileThreshold = 10000

  • даже после работы в течение нескольких часов "разминка" времени. Ох, время запуска определенно проблема (затмение кашля)

Даже после запуска, скажем, Eclipse, в течение нескольких часов вы думаете, что используете тот же метод 10 000 раз? (Попробуйте запустить Java-редактор, используя флаг JVM -клиент.)

Eclipse - это большая IDE - это действительно не основной текстовый редактор - может быть, он просто пытается добиться намного большего, когда он запускается, чем пытается сделать основной текстовый редактор?