Skip to content

Commit 1475594

Browse files
committed
Do the best to handle the OOME - truffle part
1 parent bd538f6 commit 1475594

File tree

3 files changed

+44
-26
lines changed

3 files changed

+44
-26
lines changed

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/TruffleObjectMergedFields.java

Lines changed: 39 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import org.graalvm.visualvm.heapviewer.HeapContext;
4040
import org.graalvm.visualvm.heapviewer.java.InstanceNode;
4141
import org.graalvm.visualvm.heapviewer.model.DataType;
42+
import org.graalvm.visualvm.heapviewer.model.ErrorNode;
4243
import org.graalvm.visualvm.heapviewer.model.HeapViewerNode;
4344
import org.graalvm.visualvm.heapviewer.model.HeapViewerNodeFilter;
4445
import org.graalvm.visualvm.heapviewer.model.HeapViewerNodeWrapper;
@@ -50,6 +51,7 @@
5051
import org.graalvm.visualvm.heapviewer.ui.HeapViewerRendererWrapper;
5152
import org.graalvm.visualvm.heapviewer.ui.UIThresholds;
5253
import org.graalvm.visualvm.heapviewer.utils.ExcludingIterator;
54+
import org.graalvm.visualvm.heapviewer.utils.HeapUtils;
5355
import org.graalvm.visualvm.heapviewer.utils.InterruptibleIterator;
5456
import org.graalvm.visualvm.heapviewer.utils.NodesComputer;
5557
import org.graalvm.visualvm.heapviewer.utils.ProgressIterator;
@@ -101,29 +103,35 @@ private HeapViewerNode createObjectNode(O object) {
101103

102104

103105
HeapViewerNode[] getNodes(HeapViewerNode parent, String viewID, HeapViewerNodeFilter viewFilter, List<DataType> dataTypes, List<SortOrder> sortOrders, Progress progress) throws InterruptedException {
104-
final Set<FieldDescriptor> fields = getAllObjectsFields(progress);
105-
NodesComputer<FieldDescriptor> computer = new NodesComputer<FieldDescriptor>(fields.size(), UIThresholds.MAX_INSTANCE_FIELDS) {
106-
protected boolean sorts(DataType dataType) {
107-
return true;
108-
}
109-
protected HeapViewerNode createNode(FieldDescriptor field) {
110-
return new MergedObjectFieldNode(field);
111-
}
112-
protected ProgressIterator<FieldDescriptor> objectsIterator(int index, Progress progress) {
113-
Iterator<FieldDescriptor> iterator = fields.iterator();
114-
return new ProgressIterator(iterator, index, true, progress);
115-
}
116-
protected String getMoreNodesString(String moreNodesCount) {
117-
return TruffleObjectMergedFields.this.getMoreNodesString(moreNodesCount);
118-
}
119-
protected String getSamplesContainerString(String objectsCount) {
120-
return TruffleObjectMergedFields.this.getSamplesContainerString(objectsCount);
121-
}
122-
protected String getNodesContainerString(String firstNodeIdx, String lastNodeIdx) {
123-
return TruffleObjectMergedFields.this.getNodesContainerString(firstNodeIdx, lastNodeIdx);
124-
}
125-
};
126-
return computer.computeNodes(parent, heap, viewID, null, dataTypes, sortOrders, progress);
106+
try {
107+
final Set<FieldDescriptor> fields = getAllObjectsFields(progress);
108+
NodesComputer<FieldDescriptor> computer = new NodesComputer<FieldDescriptor>(fields.size(), UIThresholds.MAX_INSTANCE_FIELDS) {
109+
protected boolean sorts(DataType dataType) {
110+
return true;
111+
}
112+
protected HeapViewerNode createNode(FieldDescriptor field) {
113+
return new MergedObjectFieldNode(field);
114+
}
115+
protected ProgressIterator<FieldDescriptor> objectsIterator(int index, Progress progress) {
116+
Iterator<FieldDescriptor> iterator = fields.iterator();
117+
return new ProgressIterator(iterator, index, true, progress);
118+
}
119+
protected String getMoreNodesString(String moreNodesCount) {
120+
return TruffleObjectMergedFields.this.getMoreNodesString(moreNodesCount);
121+
}
122+
protected String getSamplesContainerString(String objectsCount) {
123+
return TruffleObjectMergedFields.this.getSamplesContainerString(objectsCount);
124+
}
125+
protected String getNodesContainerString(String firstNodeIdx, String lastNodeIdx) {
126+
return TruffleObjectMergedFields.this.getNodesContainerString(firstNodeIdx, lastNodeIdx);
127+
}
128+
};
129+
return computer.computeNodes(parent, heap, viewID, null, dataTypes, sortOrders, progress);
130+
} catch (OutOfMemoryError e) {
131+
System.err.println("Out of memory in TruffleObjectMergedFields: " + e.getMessage()); // NOI18N
132+
HeapUtils.handleOOME(true, e);
133+
return new HeapViewerNode[] { new ErrorNode.OOME() };
134+
}
127135
}
128136

129137

@@ -222,6 +230,10 @@ protected HeapViewerNode[] lazilyComputeChildren(Heap heap, String viewID, HeapV
222230
values.count(((ObjectFieldValue)value).getInstance());
223231
}
224232
if (Thread.currentThread().isInterrupted()) throw new InterruptedException();
233+
} catch (OutOfMemoryError e) {
234+
System.err.println("Out of memory in TruffleObjectMergedFields: " + e.getMessage()); // NOI18N
235+
HeapUtils.handleOOME(true, e);
236+
return new HeapViewerNode[] { new ErrorNode.OOME() };
225237
} finally {
226238
progress.finish();
227239
}
@@ -290,6 +302,10 @@ protected String getNodesContainerString(String firstNodeIdx, String lastNodeIdx
290302
}
291303
}
292304
if (Thread.currentThread().isInterrupted()) throw new InterruptedException();
305+
} catch (OutOfMemoryError e) {
306+
System.err.println("Out of memory in TruffleObjectMergedFields: " + e.getMessage()); // NOI18N
307+
HeapUtils.handleOOME(true, e);
308+
return new HeapViewerNode[] { new ErrorNode.OOME() };
293309
} finally {
294310
progress.finish();
295311
}

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/TruffleObjectMergedReferences.java

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,16 +35,17 @@
3535
import org.graalvm.visualvm.heapviewer.HeapContext;
3636
import org.graalvm.visualvm.heapviewer.java.InstanceNode;
3737
import org.graalvm.visualvm.heapviewer.model.DataType;
38+
import org.graalvm.visualvm.heapviewer.model.ErrorNode;
3839
import org.graalvm.visualvm.heapviewer.model.HeapViewerNode;
3940
import org.graalvm.visualvm.heapviewer.model.HeapViewerNodeFilter;
4041
import org.graalvm.visualvm.heapviewer.model.HeapViewerNodeWrapper;
4142
import org.graalvm.visualvm.heapviewer.model.Progress;
4243
import org.graalvm.visualvm.heapviewer.model.RootNode;
43-
import org.graalvm.visualvm.heapviewer.model.TextNode;
4444
import org.graalvm.visualvm.heapviewer.truffle.nodes.TruffleObjectReferenceNode;
4545
import org.graalvm.visualvm.heapviewer.ui.HeapViewerRenderer;
4646
import org.graalvm.visualvm.heapviewer.ui.UIThresholds;
4747
import org.graalvm.visualvm.heapviewer.utils.ExcludingIterator;
48+
import org.graalvm.visualvm.heapviewer.utils.HeapUtils;
4849
import org.graalvm.visualvm.heapviewer.utils.InterruptibleIterator;
4950
import org.graalvm.visualvm.heapviewer.utils.NodesComputer;
5051
import org.graalvm.visualvm.heapviewer.utils.ProgressIterator;
@@ -128,7 +129,9 @@ protected HeapViewerNode[] getNodes(HeapViewerNode parent, String viewID, HeapVi
128129
}
129130
if (Thread.currentThread().isInterrupted()) throw new InterruptedException();
130131
} catch (OutOfMemoryError e) {
131-
return new HeapViewerNode[] { new TextNode(Bundle.TruffleObjectPropertyProvider_OOMEWarning()) };
132+
System.err.println("Out of memory in TruffleObjectMergedReferences: " + e.getMessage()); // NOI18N
133+
HeapUtils.handleOOME(true, e);
134+
return new HeapViewerNode[] { new ErrorNode.OOME() };
132135
} finally {
133136
progress.finish();
134137
}

visualvm/heapviewer.truffle/src/org/graalvm/visualvm/heapviewer/truffle/TruffleObjectPropertyProvider.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,6 @@
6060
"TruffleObjectPropertyProvider_MoreNodes=<another {0} {1} left>", // <another 1234 items left>
6161
"TruffleObjectPropertyProvider_SamplesContainer=<sample {0} {1}>", // <sample 1234 items>
6262
"TruffleObjectPropertyProvider_NodesContainer=<{2} {0}-{1}>", // <items 1001 - 2000>
63-
"TruffleObjectPropertyProvider_OOMEWarning=<too many references - increase heap size!>",
6463
"TruffleObjectPropertyProvider_IMoreNodes=<another {0} objects left>",
6564
"TruffleObjectPropertyProvider_ISamplesContainer=<sample {0} objects>",
6665
"TruffleObjectPropertyProvider_INodesContainer=<objects {0}-{1}>",

0 commit comments

Comments
 (0)