Bug 532901 - OutOfMemoryError
Summary: OutOfMemoryError
Status: CLOSED DUPLICATE of bug 474323
Alias: None
Product: JDT
Classification: Eclipse Project
Component: Core (show other bugs)
Version: 4.8   Edit
Hardware: PC Linux
: P3 normal (vote)
Target Milestone: ---   Edit
Assignee: JDT-Core-Inbox CLA
QA Contact:
URL:
Whiteboard:
Keywords:
Depends on:
Blocks:
 
Reported: 2018-03-26 11:20 EDT by Patrick Tasse CLA
Modified: 2018-03-29 13:53 EDT (History)
2 users (show)

See Also:


Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Patrick Tasse CLA 2018-03-26 11:20:29 EDT
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
Comment 1 Stephan Herrmann CLA 2018-03-26 18:34:12 EDT
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.
Comment 2 Patrick Tasse CLA 2018-03-27 10:31:27 EDT
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)
Comment 3 Stephan Herrmann CLA 2018-03-27 10:36:23 EDT
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
Comment 4 Andrey Loskutov CLA 2018-03-27 10:43:50 EDT
(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 ***
Comment 5 Patrick Tasse CLA 2018-03-27 16:41:50 EDT
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.
Comment 6 Patrick Tasse CLA 2018-03-29 13:53:38 EDT
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.