Хорошо, я знаю, что большинство людей говорят, что «Java не медленный в наши дни, у него просто медленная фаза запуска», но никто не может смотреть мне в глаза и говорить, что использование netbeans, eclipse или jedit так же отзывчиво, как скажем, Visual Studio или TextMate, даже после нескольких часов прогрева. О, время запуска определенно является проблемой (затмение от кашля) Я признаю, но я говорю об общей отзывчивости здесь. Например, при изменении размера окон в Jedit наблюдается небольшая задержка.
Разумное сравнение яблок с яблоками, я думаю, будет jedit (или любым текстовым редактором на основе java) против TextMate, SciTE.
Вопрос, который на самом деле сводится к следующему: «если бы netbeans / eclipse были полностью переписаны на C с тем же набором функций, вы ожидали бы, что он будет иметь те же характеристики производительности, что и в настоящее время».
Есть идеи?
И несколько замечаний:
Этот простой основанный на колебаниях редактор [1] имеет очень странные лаги при изменении размера окна, но прокрутка кажется довольно отзывчивой. Кроме того, в случае NetBeans, когда вы начинаете изменять размер, пока вы не «прекратите» изменять размер окна, он рисует уродливый черный фон [4]. Возможно, свинг отказывается делать какие-либо обновления во время перетаскивания окна?
Вот простой текстовый редактор SWT [2]. Он довольно чувствителен как к перетаскиванию, так и к прокрутке.
Вот еще один простой (jface) редактор SWT [3]. Он так плохо изменяет размеры, я думаю, что это плохая случайность. Я надеюсь.
Я также заметил, что при обновлении блокнота и визуальной студии, как правило, появляются временные белые "блики" (например, при использовании страницы в очень длинном документе). В приложениях SWT и Swing, похоже, никогда не было таких лишних белых всплесков, поэтому мне интересно, есть ли у них какая-то дополнительная внутренняя буферизация или что-то в этом роде. Это может привести к небольшому замедлению восприятия
[5] - связанный, но не совсем тот же вопрос.
Мои текущие догадки, основанные немного на существующих ответах / комментариях:
- Netbeans только что раздулся. Может быть, есть что-то в редактировании java, которое заставляет создателей редакторов выходить за рамки? Может, они почему-то не оптимизируют своих редакторов?
- Java-редакторы используют тонны оперативной памяти, может быть, это не позволяет кешу L2?
- Редакторы Java редактируют java, так что, может быть, им постоянно приходится, например, обращаться к javac, что каждый раз приводит к штрафу за медленный запуск?
- SWT - это слой абстракции над нативными виджетами, который может замедлять работу.
- Swing имеет политику обновления ужасного изменения размера, что делает его "медленным".
- Netbeans использует клиентскую виртуальную машину, так что, возможно, она просто не настроена на скорость? (см. также [6], в которой содержится ссылка на другой вопрос с ответом, представляющим собой набор параметров, которые можно передать сетевым компонентам, чтобы попытаться ускорить его).
- У 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 использовать сервер точек доступа vm