Платформа
Я использую Eclipse Kepler 4.3.2 (.M20140221-1700) на 64-битной Windows 7 Professional, работающей на Dell E6500 с 8 ГБ ОЗУ. Java VM - это 1.7_u51. Java Auto Update активен так же, как и Windows Update.
симптомы
Насколько я могу судить, они начались 9 апреля. Все работало отлично раньше. При редактировании некоторых файлов (не всех, но нескольких разных типов: .html, .php, .js, даже .css) время от времени Eclipse перестает отвечать на несколько секунд.
Существует некоторая связь с помощником по содержимому, так как вызов помощника по содержимому с помощью Ctrl-Space вызовет немедленное замораживание в тех файлах, где происходит замораживание.
.metadata/.log
сообщает об ошибке « Недостаточно памяти» , но я считаю, что это красная сельдь - это еще один симптом, а не настоящая причина:
!ENTRY org.eclipse.e4.ui.workbench 4 0 2014-04-10 12:55:13.296
!MESSAGE
!STACK 0
org.eclipse.e4.core.di.InjectionException: java.lang.OutOfMemoryError: Java heap space
at org.eclipse.e4.core.internal.di.MethodRequestor.execute(MethodRequestor.java:63)
at org.eclipse.e4.core.internal.di.InjectorImpl.invokeUsingClass(InjectorImpl.java:243)
at org.eclipse.e4.core.internal.di.InjectorImpl.invoke(InjectorImpl.java:224)
at org.eclipse.e4.core.contexts.ContextInjectionFactory.invoke(ContextInjectionFactory.java:132)
at org.eclipse.e4.core.commands.internal.HandlerServiceHandler.execute(HandlerServiceHandler.java:167)
at org.eclipse.core.commands.Command.executeWithChecks(Command.java:499)
at org.eclipse.core.commands.ParameterizedCommand.executeWithChecks(ParameterizedCommand.java:508)
at org.eclipse.e4.core.commands.internal.HandlerServiceImpl.executeHandler(HandlerServiceImpl.java:213)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.executeCommand(KeyBindingDispatcher.java:285)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.press(KeyBindingDispatcher.java:504)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.processKeyEvent(KeyBindingDispatcher.java:555)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.filterKeySequenceBindings(KeyBindingDispatcher.java:376)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher.access$0(KeyBindingDispatcher.java:322)
at org.eclipse.e4.ui.bindings.keys.KeyBindingDispatcher$KeyDownFilter.handleEvent(KeyBindingDispatcher.java:84)
at org.eclipse.swt.widgets.EventTable.sendEvent(EventTable.java:84)
at org.eclipse.swt.widgets.Display.filterEvent(Display.java:1262)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1056)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1081)
at org.eclipse.swt.widgets.Widget.sendEvent(Widget.java:1066)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1108)
at org.eclipse.swt.widgets.Widget.sendKeyEvent(Widget.java:1104)
at org.eclipse.swt.widgets.Widget.wmChar(Widget.java:1525)
at org.eclipse.swt.widgets.Control.WM_CHAR(Control.java:4723)
at org.eclipse.swt.widgets.Canvas.WM_CHAR(Canvas.java:344)
at org.eclipse.swt.widgets.Control.windowProc(Control.java:4611)
Первоначально подумав, что проблема в нехватке памяти, я увеличил размер кучи Eclipse. Это фактически продлило время замораживания.
Гипотеза пока
Происходит что-то, что может быть вызвано Content Assist и вызывает бесконечный цикл, который приводит к утечке памяти, пока подпрограмма не сдается. Увеличив доступную память, я могу заставить Eclipse потратить целую минуту, прежде чем заполнить 4 ГБ ОЗУ и сдаться; и я могу несколько улучшить проблему, уменьшив кучу до 40 Мб, а для прерывания потребуется всего четыре или пять секунд (но мне нужна большая куча для других целей, так что это не жизнеспособный обходной путь, и, тем не менее, это не так, как вы решить проблему).
Попытки и расследования
8 апреля 2014 года, когда начались неприятности, был вторник патчей. Примерно в это же время были отправлены следующие обновления. Кажется, ни один из них не связан с чем-то, что может повлиять на Затмение; Я попытался откат 2922229 и 2929437 безрезультатно, а затем переустановил их.
Отключение помощника по содержимому в редакторах HTML и Javascript путем отключения автоматической активации, а затем снятия отметки со всех типов предложений (Word, Template, Other Javascript) уменьшает проблему, но не решает ее.
Нормальная техника вуду запуска Eclipse в режиме уборки помещений, которая использовалась для устранения самых неприятных проблем (
eclipse -clean -clearPersistedState
), также использовалась мало.Очистка eclipse.ini не дала результатов.
Мониторинг файловой и сетевой активности с помощью FileMon/ProcMon/wireshark не выявил ничего уместного.
Красная сельдь
Размер кучи не является решением, как описано выше.
Я получил еще одну ошибку, которая, я не уверен, связана с "Ошибка декодирования идентификатора проблемы 1073741824". Будучи 0x40000000 в шестнадцатеричном формате, мне это кажется странным. В любом случае, поиск в Google не дал ничего уместного, и включение оригинальной опечатки (она называет число идентификатором проблемы вместо идентификатора) укрепило мое мнение о том, что это ложный код.
Следующие шаги
Недостаток улик, обнаруженных до сих пор, заставляет меня думать, что я упускаю что-то действительно очевидное, но прежде чем перейти к стратегии "выжженной земли" - полностью удалить Eclipse и заново установить заново, а также заново импортировать все мои проекты - я решил спросить более мудрые головы, чем мои ,
Тем временем я постараюсь удалить все ненужные и не жизненно необходимые плагины из Eclipse.
Если все это не удастся, я думаю, у меня будет шанс попробовать NetBeans 8.