|
39 | 39 | import org.graalvm.visualvm.heapviewer.HeapContext;
|
40 | 40 | import org.graalvm.visualvm.heapviewer.java.InstanceNode;
|
41 | 41 | import org.graalvm.visualvm.heapviewer.model.DataType;
|
| 42 | +import org.graalvm.visualvm.heapviewer.model.ErrorNode; |
42 | 43 | import org.graalvm.visualvm.heapviewer.model.HeapViewerNode;
|
43 | 44 | import org.graalvm.visualvm.heapviewer.model.HeapViewerNodeFilter;
|
44 | 45 | import org.graalvm.visualvm.heapviewer.model.HeapViewerNodeWrapper;
|
|
50 | 51 | import org.graalvm.visualvm.heapviewer.ui.HeapViewerRendererWrapper;
|
51 | 52 | import org.graalvm.visualvm.heapviewer.ui.UIThresholds;
|
52 | 53 | import org.graalvm.visualvm.heapviewer.utils.ExcludingIterator;
|
| 54 | +import org.graalvm.visualvm.heapviewer.utils.HeapUtils; |
53 | 55 | import org.graalvm.visualvm.heapviewer.utils.InterruptibleIterator;
|
54 | 56 | import org.graalvm.visualvm.heapviewer.utils.NodesComputer;
|
55 | 57 | import org.graalvm.visualvm.heapviewer.utils.ProgressIterator;
|
@@ -101,29 +103,35 @@ private HeapViewerNode createObjectNode(O object) {
|
101 | 103 |
|
102 | 104 |
|
103 | 105 | 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 | + } |
127 | 135 | }
|
128 | 136 |
|
129 | 137 |
|
@@ -222,6 +230,10 @@ protected HeapViewerNode[] lazilyComputeChildren(Heap heap, String viewID, HeapV
|
222 | 230 | values.count(((ObjectFieldValue)value).getInstance());
|
223 | 231 | }
|
224 | 232 | 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() }; |
225 | 237 | } finally {
|
226 | 238 | progress.finish();
|
227 | 239 | }
|
@@ -290,6 +302,10 @@ protected String getNodesContainerString(String firstNodeIdx, String lastNodeIdx
|
290 | 302 | }
|
291 | 303 | }
|
292 | 304 | 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() }; |
293 | 309 | } finally {
|
294 | 310 | progress.finish();
|
295 | 311 | }
|
|
0 commit comments