496 for (i = 0; i < num; i++) { 497 var value = addr.getAddressAt(0); 498 writeln(addr2sym(addr) + ':', addr2str(value)); 499 addr = addr.addOffsetTo(addressSize); 500 } 501 writeln(); 502 } 503 504 // System dictionary functions 505 506 // find InstanceKlass by name 507 function findInstanceKlass(name) { 508 return sapkg.utilities.SystemDictionaryHelper.findInstanceKlass(name); 509 } 510 511 // get Java system loader (i.e., application launcher loader) 512 function systemLoader() { 513 return sa.sysDict.javaSystemLoader(); 514 } 515 516 // iterate system dictionary for each 'Klass' 517 function forEachKlass(callback) { 518 var VisitorClass = sapkg.memory.SystemDictionary.ClassVisitor; 519 var visitor = new VisitorClass() { visit: callback }; 520 sa.sysDict["classesDo(sun.jvm.hotspot.memory.SystemDictionary.ClassVisitor)"](visitor); 521 } 522 523 // iterate system dictionary for each 'Klass' and initiating loader 524 function forEachKlassAndLoader(callback) { 525 var VisitorClass = sapkg.memory.SystemDictionary.ClassAndLoaderVisitor; 526 var visitor = new VisitorClass() { visit: callback }; 527 sa.sysDict["classesDo(sun.jvm.hotspot.memory.SystemDictionary.ClassAndLoaderVisitor)"](visitor); 528 } 529 530 // iterate system dictionary for each primitive array klass 531 function forEachPrimArrayKlass(callback) { 532 var VisitorClass = sapkg.memory.SystemDictionary.ClassAndLoaderVisitor; 533 sa.sysDict.primArrayClassesDo(new VisitorClass() { visit: callback }); 534 } 535 536 // 'oop' to higher-level java object wrapper in which for(i in o) 537 // works by iterating java level fields and javaobject.javafield 538 // syntax works. 539 function oop2obj(oop) { 540 return object(addr2str(oop.handle)); 541 } 542 543 // higher level java object wrapper to oop 544 function obj2oop(obj) { 545 return addr2oop(str2addr(address(obj))); 546 } 547 548 // Java heap iteration 549 550 // iterates Java heap for each Oop 551 function forEachOop(callback) { 552 function empty() { } 553 sa.objHeap.iterate(new sapkg.oops.HeapVisitor() { | 496 for (i = 0; i < num; i++) { 497 var value = addr.getAddressAt(0); 498 writeln(addr2sym(addr) + ':', addr2str(value)); 499 addr = addr.addOffsetTo(addressSize); 500 } 501 writeln(); 502 } 503 504 // System dictionary functions 505 506 // find InstanceKlass by name 507 function findInstanceKlass(name) { 508 return sapkg.utilities.SystemDictionaryHelper.findInstanceKlass(name); 509 } 510 511 // get Java system loader (i.e., application launcher loader) 512 function systemLoader() { 513 return sa.sysDict.javaSystemLoader(); 514 } 515 516 // iterate class loader data for each 'Klass' 517 function forEachKlass(callback) { 518 var VisitorClass = sapkg.classfile.ClassLoaderDataGraph.ClassVisitor; 519 var visitor = new VisitorClass() { visit: callback }; 520 sa.sysDict["classesDo(sun.jvm.hotspot.classfile.ClassLoaderDataGraph.ClassVisitor)"](visitor); 521 } 522 523 // iterate system dictionary for each 'Klass' and initiating loader 524 function forEachKlassAndLoader(callback) { 525 var VisitorClass = sapkg.classfile.ClassLoaderDataGraph.ClassAndLoaderVisitor; 526 var visitor = new VisitorClass() { visit: callback }; 527 sa.sysDict["allEntriesDo(sun.jvm.hotspot.classfile.ClassLoaderDataGraph.ClassAndLoaderVisitor)"](visitor); 528 } 529 530 // 'oop' to higher-level java object wrapper in which for(i in o) 531 // works by iterating java level fields and javaobject.javafield 532 // syntax works. 533 function oop2obj(oop) { 534 return object(addr2str(oop.handle)); 535 } 536 537 // higher level java object wrapper to oop 538 function obj2oop(obj) { 539 return addr2oop(str2addr(address(obj))); 540 } 541 542 // Java heap iteration 543 544 // iterates Java heap for each Oop 545 function forEachOop(callback) { 546 function empty() { } 547 sa.objHeap.iterate(new sapkg.oops.HeapVisitor() { |