373 private static final int JVM_SIGNATURE_CHAR = 'C'; 374 private static final int JVM_SIGNATURE_BYTE = 'B'; 375 private static final int JVM_SIGNATURE_SHORT = 'S'; 376 private static final int JVM_SIGNATURE_INT = 'I'; 377 private static final int JVM_SIGNATURE_LONG = 'J'; 378 private static final int JVM_SIGNATURE_FLOAT = 'F'; 379 private static final int JVM_SIGNATURE_DOUBLE = 'D'; 380 private static final int JVM_SIGNATURE_ARRAY = '['; 381 private static final int JVM_SIGNATURE_CLASS = 'L'; 382 383 private static final long MAX_U4_VALUE = 0xFFFFFFFFL; 384 int serialNum = 1; 385 386 public HeapHprofBinWriter() { 387 this.KlassMap = new ArrayList<Klass>(); 388 this.names = new HashSet<Symbol>(); 389 } 390 391 public synchronized void write(String fileName) throws IOException { 392 VM vm = VM.getVM(); 393 if (vm.getUniverse().heap() instanceof ZCollectedHeap) { 394 throw new RuntimeException("This operation is not supported with ZGC."); 395 } 396 397 // open file stream and create buffered data output stream 398 fos = new FileOutputStream(fileName); 399 out = new DataOutputStream(new BufferedOutputStream(fos)); 400 401 dbg = vm.getDebugger(); 402 objectHeap = vm.getObjectHeap(); 403 404 OBJ_ID_SIZE = (int) vm.getOopSize(); 405 406 BOOLEAN_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_BOOLEAN); 407 BYTE_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_BYTE); 408 CHAR_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_CHAR); 409 SHORT_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_SHORT); 410 INT_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_INT); 411 LONG_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_LONG); 412 FLOAT_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_FLOAT); 413 DOUBLE_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_DOUBLE); 414 OBJECT_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_OBJECT); 415 | 373 private static final int JVM_SIGNATURE_CHAR = 'C'; 374 private static final int JVM_SIGNATURE_BYTE = 'B'; 375 private static final int JVM_SIGNATURE_SHORT = 'S'; 376 private static final int JVM_SIGNATURE_INT = 'I'; 377 private static final int JVM_SIGNATURE_LONG = 'J'; 378 private static final int JVM_SIGNATURE_FLOAT = 'F'; 379 private static final int JVM_SIGNATURE_DOUBLE = 'D'; 380 private static final int JVM_SIGNATURE_ARRAY = '['; 381 private static final int JVM_SIGNATURE_CLASS = 'L'; 382 383 private static final long MAX_U4_VALUE = 0xFFFFFFFFL; 384 int serialNum = 1; 385 386 public HeapHprofBinWriter() { 387 this.KlassMap = new ArrayList<Klass>(); 388 this.names = new HashSet<Symbol>(); 389 } 390 391 public synchronized void write(String fileName) throws IOException { 392 VM vm = VM.getVM(); 393 394 // open file stream and create buffered data output stream 395 fos = new FileOutputStream(fileName); 396 out = new DataOutputStream(new BufferedOutputStream(fos)); 397 398 dbg = vm.getDebugger(); 399 objectHeap = vm.getObjectHeap(); 400 401 OBJ_ID_SIZE = (int) vm.getOopSize(); 402 403 BOOLEAN_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_BOOLEAN); 404 BYTE_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_BYTE); 405 CHAR_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_CHAR); 406 SHORT_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_SHORT); 407 INT_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_INT); 408 LONG_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_LONG); 409 FLOAT_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_FLOAT); 410 DOUBLE_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_DOUBLE); 411 OBJECT_BASE_OFFSET = TypeArray.baseOffsetInBytes(BasicType.T_OBJECT); 412 |