Skip to content

Commit 7d7b57e

Browse files
committed
cache for JavaClassWrapper added; several improvements in JavaObjectWrapper()
1 parent 1d57451 commit 7d7b57e

File tree

1 file changed

+21
-6
lines changed
  • visualvm/libs.profiler/profiler.oql/src/org/graalvm/visualvm/lib/profiler/oql/engine/api/impl

1 file changed

+21
-6
lines changed

visualvm/libs.profiler/profiler.oql/src/org/graalvm/visualvm/lib/profiler/oql/engine/api/impl/hat.js

Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -52,6 +52,7 @@ var FieldValue = Java.type("org.graalvm.visualvm.lib.jfluid.heap.FieldValue");
5252
var GCRoot = Java.type("org.graalvm.visualvm.lib.jfluid.heap.GCRoot");
5353

5454
var snapshot;
55+
var classWrapperCache;
5556

5657
/**
5758
* This is JavaScript interface for heap analysis using HAT
@@ -315,7 +316,11 @@ function javaObject(jobject) {
315316
// print(jobject.getClass());
316317
if (jobject instanceof JavaClass) {
317318
// print("wrapping as Class");
318-
return new JavaClassWrapper(jobject);
319+
var classId = jobject.getJavaClassId();
320+
if (classWrapperCache[classId] === undefined) {
321+
classWrapperCache[classId] = new JavaClassWrapper(jobject);
322+
}
323+
return classWrapperCache[classId];
319324
} else if (jobject instanceof ObjectArrayInstance) {
320325
// print("wrapping as ObjectArray");
321326
return new JavaObjectArrayWrapper(jobject);
@@ -333,24 +338,33 @@ function javaObject(jobject) {
333338

334339
// returns wrapper for Java instances
335340
function JavaObjectWrapper(instance) {
336-
var things = instance.fieldValues;
341+
var things;
337342
var fldValueCache = new Array();
338343

339344
// instance fields can be accessed in natural syntax
340345
return new JSAdapter() {
341346
__getIds__ : function() {
347+
if (things === undefined) {
348+
things = instance.getJavaClass().getFields();
349+
}
342350
var res = new Array(things.size());
343351
for(var j=0;j<things.size();j++) {
344-
res[j] = things.get(j).field.name;
352+
res[j] = things.get(j).getName();
345353
}
346354
return res;
347355
},
348356
__has__ : function(name) {
357+
if (name === 'clazz' || name === 'toString' ||
358+
name === 'id' || name === 'wrapped-object' || name === 'statics') {
359+
return true;
360+
}
361+
if (things === undefined) {
362+
things = instance.getJavaClass().getFields();
363+
}
349364
for (var i=0;i<things.size();i++) {
350-
if (name === things.get(i).field.name) return true;
365+
if (name == things.get(i).getName()) return true;
351366
}
352-
return name === 'clazz' || name === 'toString' ||
353-
name === 'id' || name === 'wrapped-object' || name === 'statics';
367+
return false;
354368
},
355369
__get__ : function(name) {
356370
if (name === 'clazz') {
@@ -662,6 +676,7 @@ function wrapHeapSnapshot(heap) {
662676
}
663677

664678
snapshot = heap;
679+
classWrapperCache = new Array();
665680

666681
// return heap as a script object with useful methods.
667682
return {

0 commit comments

Comments
 (0)