Community
Participate
Working Groups
Since upgrading to 4.8.0.I20180322-0645, I have been getting frequent out of memory errors, often during autocomplete (Ctrl+SPACE) or Open Type dialog (Ctrl+Shift+T). eclipse.buildId=4.8.0.I20180322-0645 java.version=1.8.0_141 java.vendor=Oracle Corporation BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US Command-line arguments: -os linux -ws gtk -arch x86_64 Related entries in Error Log: --- org.eclipse.jdt.core Error Mon Mar 26 10:07:45 EDT 2018 Background Indexer Crash Recovery java.lang.OutOfMemoryError: Requested array size exceeds VM limit --- org.eclipse.core.jobs Error Mon Mar 26 10:12:45 EDT 2018 An internal error occurred during: "Periodic workspace save.". java.lang.IllegalArgumentException: Cannot set lower sequence number for root (previous: 17, new: 11). Location: /home/lmcpata/workspace/.metadata/.plugins/org.eclipse.core.resources/.safetable/org.eclipse.core.resources at org.eclipse.core.runtime.Assert.isLegal(Assert.java:63) at org.eclipse.core.internal.resources.SaveManager.validateMasterTableBeforeSave(SaveManager.java:1593) at org.eclipse.core.internal.resources.SaveManager.saveMasterTable(SaveManager.java:1265) at org.eclipse.core.internal.resources.SaveManager.saveMasterTable(SaveManager.java:1257) at org.eclipse.core.internal.resources.SaveManager.save(SaveManager.java:1234) at org.eclipse.core.internal.resources.SaveManager.save(SaveManager.java:1145) at org.eclipse.core.internal.resources.DelayedSnapshotJob.run(DelayedSnapshotJob.java:52) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60) --- eclipse.buildId=4.8.0.I20180322-0645 java.version=1.8.0_141 java.vendor=Oracle Corporation BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US Command-line arguments: -os linux -ws gtk -arch x86_64 org.eclipse.ui Error Mon Mar 26 10:13:48 EDT 2018 Unhandled event loop exception java.lang.OutOfMemoryError: Requested array size exceeds VM limit at org.eclipse.jdt.internal.compiler.util.HashtableOfObject.<init>(HashtableOfObject.java:38) at org.eclipse.jdt.internal.core.index.DiskIndex.readCategoryTable(DiskIndex.java:680) at org.eclipse.jdt.internal.core.index.DiskIndex.addQueryResults(DiskIndex.java:232) at org.eclipse.jdt.internal.core.index.Index.query(Index.java:143) at org.eclipse.jdt.internal.core.search.matching.ConstructorPattern.queryIn(ConstructorPattern.java:555) at org.eclipse.jdt.core.search.SearchPattern.findIndexMatches(SearchPattern.java:2389) at org.eclipse.jdt.internal.core.search.matching.MatchLocator.findIndexMatches(MatchLocator.java:293) at org.eclipse.jdt.internal.core.search.PatternSearchJob.search(PatternSearchJob.java:114) at org.eclipse.jdt.internal.core.search.PatternSearchJob.execute(PatternSearchJob.java:69) at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:262) at org.eclipse.jdt.internal.core.search.BasicSearchEngine.searchAllConstructorDeclarations(BasicSearchEngine.java:717) at org.eclipse.jdt.internal.core.SearchableEnvironment.findConstructorDeclarations(SearchableEnvironment.java:816) at org.eclipse.jdt.internal.codeassist.CompletionEngine.findTypesAndPackages(CompletionEngine.java:11220) at org.eclipse.jdt.internal.codeassist.CompletionEngine.completionOnSingleTypeReference(CompletionEngine.java:3790) at org.eclipse.jdt.internal.codeassist.CompletionEngine.complete(CompletionEngine.java:1947) at org.eclipse.jdt.internal.codeassist.CompletionEngine.complete(CompletionEngine.java:2262) at org.eclipse.jdt.internal.core.Openable.codeComplete(Openable.java:133) at org.eclipse.jdt.internal.core.CompilationUnit.codeComplete(CompilationUnit.java:365) at org.eclipse.jdt.internal.core.CompilationUnit.codeComplete(CompilationUnit.java:355) at org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer.internalComputeCompletionProposals(JavaCompletionProposalComputer.java:250) at org.eclipse.jdt.internal.ui.text.java.JavaCompletionProposalComputer.computeCompletionProposals(JavaCompletionProposalComputer.java:212) at org.eclipse.jdt.internal.ui.text.java.JavaTypeCompletionProposalComputer.computeCompletionProposals(JavaTypeCompletionProposalComputer.java:63) at org.eclipse.jdt.internal.ui.text.java.CompletionProposalComputerDescriptor.computeCompletionProposals(CompletionProposalComputerDescriptor.java:333) at org.eclipse.jdt.internal.ui.text.java.CompletionProposalCategory.computeCompletionProposals(CompletionProposalCategory.java:337) at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.collectProposals(ContentAssistProcessor.java:331) at org.eclipse.jdt.internal.ui.text.java.ContentAssistProcessor.computeCompletionProposals(ContentAssistProcessor.java:288) at org.eclipse.jface.text.contentassist.ContentAssistant$3.lambda$0(ContentAssistant.java:2016) at org.eclipse.jface.text.contentassist.ContentAssistant$3$$Lambda$650/858563092.accept(Unknown Source) at java.util.Collections$SingletonSet.forEach(Collections.java:4767) at org.eclipse.jface.text.contentassist.ContentAssistant$3.run(ContentAssistant.java:2015) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.jface.text.contentassist.ContentAssistant.computeCompletionProposals(ContentAssistant.java:2012) --- eclipse.buildId=4.8.0.I20180322-0645 java.version=1.8.0_141 java.vendor=Oracle Corporation BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US Command-line arguments: -os linux -ws gtk -arch x86_64 org.eclipse.core.jobs Error Mon Mar 26 10:43:22 EDT 2018 An internal error occurred during: "Decoration Calculation". java.lang.OutOfMemoryError: Java heap space at org.eclipse.jdt.internal.compiler.util.HashtableOfObject.<init>(HashtableOfObject.java:38) at org.eclipse.jdt.internal.core.index.DiskIndex.readCategoryTable(DiskIndex.java:680) at org.eclipse.jdt.internal.core.index.DiskIndex.addQueryResults(DiskIndex.java:201) at org.eclipse.jdt.internal.core.index.Index.query(Index.java:140) at org.eclipse.jdt.internal.core.search.matching.TypeDeclarationPattern.queryIn(TypeDeclarationPattern.java:361) at org.eclipse.jdt.core.search.SearchPattern.findIndexMatches(SearchPattern.java:2389) at org.eclipse.jdt.internal.core.search.matching.MatchLocator.findIndexMatches(MatchLocator.java:293) at org.eclipse.jdt.internal.core.search.PatternSearchJob.search(PatternSearchJob.java:114) at org.eclipse.jdt.internal.core.search.PatternSearchJob.execute(PatternSearchJob.java:69) at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:262) at org.eclipse.jdt.internal.core.search.BasicSearchEngine.searchAllTypeNames(BasicSearchEngine.java:1848) at org.eclipse.jdt.core.search.SearchEngine.searchAllTypeNames(SearchEngine.java:1097) at org.eclipse.jdt.internal.ui.InterfaceIndicatorLabelDecorator.addOverlaysWithSearchEngine(InterfaceIndicatorLabelDecorator.java:182) at org.eclipse.jdt.internal.ui.InterfaceIndicatorLabelDecorator.addOverlays(InterfaceIndicatorLabelDecorator.java:145) at org.eclipse.jdt.internal.ui.InterfaceIndicatorLabelDecorator.decorate(InterfaceIndicatorLabelDecorator.java:128) at org.eclipse.ui.internal.decorators.LightweightDecoratorDefinition.decorate(LightweightDecoratorDefinition.java:258) at org.eclipse.ui.internal.decorators.LightweightDecoratorManager$LightweightRunnable.run(LightweightDecoratorManager.java:104) at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:42) at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.decorate(LightweightDecoratorManager.java:377) at org.eclipse.ui.internal.decorators.LightweightDecoratorManager.getDecorations(LightweightDecoratorManager.java:359) at org.eclipse.ui.internal.decorators.DecorationScheduler$1.ensureResultCached(DecorationScheduler.java:347) at org.eclipse.ui.internal.decorators.DecorationScheduler$1.run(DecorationScheduler.java:311) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60) --- After the second entry above (An internal error occurred during: "Periodic workspace save."), a heap dump was generated, showing the following leak suspects: Leak Suspects System Overview Leaks Problem Suspect 1 The classloader/component "org.eclipse.pde.api.tools" occupies 77,134,240 (23.29%) bytes. The memory is accumulated in one instance of "org.eclipse.pde.api.tools.internal.model.ApiModelCache" loaded by "org.eclipse.pde.api.tools". Keywords org.eclipse.pde.api.tools org.eclipse.pde.api.tools.internal.model.ApiModelCache Details » Problem Suspect 2 One instance of "org.eclipse.jdt.internal.core.JavaModelManager" loaded by "org.eclipse.jdt.core" occupies 68,903,920 (20.81%) bytes. The memory is accumulated in one instance of "org.eclipse.jdt.internal.core.JavaModelManager" loaded by "org.eclipse.jdt.core". Keywords org.eclipse.jdt.core org.eclipse.jdt.internal.core.JavaModelManager Details » Table Of ContentsCreated by Eclipse Memory Analyzer
Please let's handle this in two separate bugs: > java.lang.OutOfMemoryError: Requested array size exceeds VM limit This is definitely a bug. All "regular" OOME could perhaps be defended by the fact that the caches that MAT highlights as suspects actually serve an important purpose, those are not proper leaks. Also, for discussing those it would be relevant to know the -Xmx parameter in use.
I'm using -Xmx1024m. But all the heap dumps I get don't seem to be anywhere near that. Here's an example Dominator Tree: Class Name | Shallow Heap | Retained Heap | Percentage --------------------------------------------------------------------------------------------------------------------------------- org.eclipse.jdt.internal.core.JavaModelManager @ 0xc17ce330 | 208 | 56,827,976 | 22.73% org.eclipse.osgi.internal.loader.EquinoxClassLoader @ 0xcd3b5dd0 org.eclipse.mat.api| 96 | 24,372,336 | 9.75% org.eclipse.pde.api.tools.internal.model.WorkspaceBaseline @ 0xc70003c8 | 80 | 8,108,704 | 3.24% org.eclipse.jgit.internal.storage.file.FileRepository @ 0xc2201c30 | 64 | 6,890,944 | 2.76% org.eclipse.core.internal.registry.ExtensionRegistry @ 0xc40a0ea8 | 72 | 6,601,168 | 2.64% org.eclipse.core.internal.dtree.DeltaDataTree @ 0xebc52a60 | 24 | 6,180,696 | 2.47% org.eclipse.osgi.internal.resolver.UserState @ 0xcdc80fd8 | 96 | 5,552,912 | 2.22% org.eclipse.pde.api.tools.internal.model.ArchiveApiTypeContainer @ 0xcbdd9ab8 | 40 | 3,794,568 | 1.52% --------------------------------------------------------------------------------------------------------------------------------- That came from an error I just got by typing in the "Open Type" dialog: eclipse.buildId=4.8.0.I20180322-0645 java.version=1.8.0_141 java.vendor=Oracle Corporation BootLoader constants: OS=linux, ARCH=x86_64, WS=gtk, NL=en_US Command-line arguments: -os linux -ws gtk -arch x86_64 org.eclipse.core.jobs Error Tue Mar 27 10:24:38 EDT 2018 An internal error occurred during: "Items filtering". java.lang.OutOfMemoryError: Requested array size exceeds VM limit at org.eclipse.jdt.internal.compiler.util.HashtableOfObject.<init>(HashtableOfObject.java:38) at org.eclipse.jdt.internal.core.index.DiskIndex.readCategoryTable(DiskIndex.java:680) at org.eclipse.jdt.internal.core.index.DiskIndex.addQueryResults(DiskIndex.java:232) at org.eclipse.jdt.internal.core.index.Index.query(Index.java:140) at org.eclipse.jdt.internal.core.search.matching.TypeDeclarationPattern.queryIn(TypeDeclarationPattern.java:361) at org.eclipse.jdt.core.search.SearchPattern.findIndexMatches(SearchPattern.java:2389) at org.eclipse.jdt.internal.core.search.matching.MatchLocator.findIndexMatches(MatchLocator.java:293) at org.eclipse.jdt.internal.core.search.PatternSearchJob.search(PatternSearchJob.java:114) at org.eclipse.jdt.internal.core.search.PatternSearchJob.execute(PatternSearchJob.java:69) at org.eclipse.jdt.internal.core.search.processing.JobManager.performConcurrentJob(JobManager.java:262) at org.eclipse.jdt.internal.core.search.BasicSearchEngine.searchAllTypeNames(BasicSearchEngine.java:1848) at org.eclipse.jdt.core.search.SearchEngine.searchAllTypeNames(SearchEngine.java:1199) at org.eclipse.jdt.internal.ui.dialogs.FilteredTypesSelectionDialog.fillContentProvider(FilteredTypesSelectionDialog.java:519) at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$FilterJob.filterContent(FilteredItemsSelectionDialog.java:2050) at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$FilterJob.internalRun(FilteredItemsSelectionDialog.java:1998) at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$FilterJob.doRun(FilteredItemsSelectionDialog.java:1970) at org.eclipse.ui.dialogs.FilteredItemsSelectionDialog$FilterJob.run(FilteredItemsSelectionDialog.java:1957) at org.eclipse.core.internal.jobs.Worker.run(Worker.java:60)
That's why I spoke of two separate bugs. This guy speaks of heap space: > java.lang.OutOfMemoryError: Java heap space while this one does not: > java.lang.OutOfMemoryError: Requested array size exceeds VM limit
(In reply to Stephan Herrmann from comment #3) > That's why I spoke of two separate bugs. > > This guy speaks of heap space: > > java.lang.OutOfMemoryError: Java heap space > > while this one does not: > > java.lang.OutOfMemoryError: Requested array size exceeds VM limit I think that both are from the same root cause : corrupted index, and this is just another reincarnation of bug 474323. *** This bug has been marked as a duplicate of bug 474323 ***
This old bug is about what to do when reading a broken index to avoid OOME. However something new in Photon is corrupting indexes at an alarming frequency (more than once per hour). It also happens constantly to a colleague who recently upgraded to eclipse.buildId=4.8.0.I20180308-0630. Should it be tracked with a separate bug than 474323 (maybe this one), with a much higher priority? It makes the Eclipse IDE almost unusable for me.
The corrupted index isn't always immediately noticeable with error message dialogs or exceptions in the error log. Sometimes it just leads to missing implemented methods in Ctrl+T dialog or classes that can't be found with Ctrl+Shift+T. Closing Eclipse, deleting <workspace>/.metadata/.plugins/org.eclipse.jdt.core/ and restarting Eclipse (temporarily) fixes it.