comparison agent/src/share/classes/sun/jvm/hotspot/oops/ObjectHeap.java @ 113:ba764ed4b6f2

6420645: Create a vm that uses compressed oops for up to 32gb heapsizes Summary: Compressed oops in instances, arrays, and headers. Code contributors are coleenp, phh, never, swamyv Reviewed-by: jmasa, kamg, acorn, tbell, kvn, rasbold
author coleenp
date Sun, 13 Apr 2008 17:43:42 -0400
parents a61af66fc99e
children d1605aabd0a1 a5838065ab24
comparison
equal deleted inserted replaced
110:a49a647afe9a 113:ba764ed4b6f2
39 import sun.jvm.hotspot.types.*; 39 import sun.jvm.hotspot.types.*;
40 import sun.jvm.hotspot.utilities.*; 40 import sun.jvm.hotspot.utilities.*;
41 41
42 public class ObjectHeap { 42 public class ObjectHeap {
43 43
44 private static final boolean DEBUG;
45
46 static {
47 DEBUG = System.getProperty("sun.jvm.hotspot.oops.ObjectHeap.DEBUG") != null;
48 }
49
44 private OopHandle symbolKlassHandle; 50 private OopHandle symbolKlassHandle;
45 private OopHandle methodKlassHandle; 51 private OopHandle methodKlassHandle;
46 private OopHandle constMethodKlassHandle; 52 private OopHandle constMethodKlassHandle;
47 private OopHandle methodDataKlassHandle; 53 private OopHandle methodDataKlassHandle;
48 private OopHandle constantPoolKlassHandle; 54 private OopHandle constantPoolKlassHandle;
150 } 156 }
151 } 157 }
152 158
153 public ObjectHeap(TypeDataBase db) throws WrongTypeException { 159 public ObjectHeap(TypeDataBase db) throws WrongTypeException {
154 // Get commonly used sizes of basic types 160 // Get commonly used sizes of basic types
155 oopSize = db.getOopSize(); 161 oopSize = VM.getVM().getOopSize();
156 byteSize = db.getJByteType().getSize(); 162 byteSize = db.getJByteType().getSize();
157 charSize = db.getJCharType().getSize(); 163 charSize = db.getJCharType().getSize();
158 booleanSize = db.getJBooleanType().getSize(); 164 booleanSize = db.getJBooleanType().getSize();
159 intSize = db.getJIntType().getSize(); 165 intSize = db.getJIntType().getSize();
160 shortSize = db.getJShortType().getSize(); 166 shortSize = db.getJShortType().getSize();
438 Address top = (Address) liveRegions.get(i+1); 444 Address top = (Address) liveRegions.get(i+1);
439 445
440 try { 446 try {
441 // Traverses the space from bottom to top 447 // Traverses the space from bottom to top
442 OopHandle handle = bottom.addOffsetToAsOopHandle(0); 448 OopHandle handle = bottom.addOffsetToAsOopHandle(0);
449
443 while (handle.lessThan(top)) { 450 while (handle.lessThan(top)) {
444 Oop obj = null; 451 Oop obj = null;
445 452
446 try { 453 try {
447 obj = newOop(handle); 454 obj = newOop(handle);
448 } catch (UnknownOopException exp) { 455 } catch (UnknownOopException exp) {
456 if (DEBUG) {
457 throw new RuntimeException(" UnknownOopException " + exp);
458 }
449 } 459 }
450 if (obj == null) { 460 if (obj == null) {
451 //Find the object size using Printezis bits and skip over 461 //Find the object size using Printezis bits and skip over
452 System.err.println("Finding object size using Printezis bits and skipping over..."); 462 System.err.println("Finding object size using Printezis bits and skipping over...");
453 long size = 0; 463 long size = 0;