comparison src/share/vm/gc_interface/collectedHeap.cpp @ 4009:e5928e7dab26

7098528: crash with java -XX:+ExtendedDTraceProbes Reviewed-by: kvn
author never
date Mon, 17 Oct 2011 21:38:29 -0700
parents f08d439fab8c
children 3c648b9ad052
comparison
equal deleted inserted replaced
4008:8187c94a9a87 4009:e5928e7dab26
26 #include "classfile/systemDictionary.hpp" 26 #include "classfile/systemDictionary.hpp"
27 #include "gc_implementation/shared/vmGCOperations.hpp" 27 #include "gc_implementation/shared/vmGCOperations.hpp"
28 #include "gc_interface/collectedHeap.hpp" 28 #include "gc_interface/collectedHeap.hpp"
29 #include "gc_interface/collectedHeap.inline.hpp" 29 #include "gc_interface/collectedHeap.inline.hpp"
30 #include "oops/oop.inline.hpp" 30 #include "oops/oop.inline.hpp"
31 #include "oops/instanceMirrorKlass.hpp"
31 #include "runtime/init.hpp" 32 #include "runtime/init.hpp"
32 #include "services/heapDumper.hpp" 33 #include "services/heapDumper.hpp"
33 #ifdef TARGET_OS_FAMILY_linux 34 #ifdef TARGET_OS_FAMILY_linux
34 # include "thread_linux.inline.hpp" 35 # include "thread_linux.inline.hpp"
35 #endif 36 #endif
434 TraceTime tt("Class Histogram (after full gc): ", PrintGCDetails, true, gclog_or_tty); 435 TraceTime tt("Class Histogram (after full gc): ", PrintGCDetails, true, gclog_or_tty);
435 VM_GC_HeapInspection inspector(gclog_or_tty, false /* ! full gc */, false /* ! prologue */); 436 VM_GC_HeapInspection inspector(gclog_or_tty, false /* ! full gc */, false /* ! prologue */);
436 inspector.doit(); 437 inspector.doit();
437 } 438 }
438 } 439 }
440
441 oop CollectedHeap::Class_obj_allocate(KlassHandle klass, int size, KlassHandle real_klass, TRAPS) {
442 debug_only(check_for_valid_allocation_state());
443 assert(!Universe::heap()->is_gc_active(), "Allocation during gc not allowed");
444 assert(size >= 0, "int won't convert to size_t");
445 HeapWord* obj;
446 if (JavaObjectsInPerm) {
447 obj = common_permanent_mem_allocate_init(size, CHECK_NULL);
448 } else {
449 assert(ScavengeRootsInCode > 0, "must be");
450 obj = common_mem_allocate_init(size, CHECK_NULL);
451 }
452 post_allocation_setup_common(klass, obj, size);
453 assert(Universe::is_bootstrapping() ||
454 !((oop)obj)->blueprint()->oop_is_array(), "must not be an array");
455 NOT_PRODUCT(Universe::heap()->check_for_bad_heap_word_value(obj, size));
456 oop mirror = (oop)obj;
457
458 java_lang_Class::set_oop_size(mirror, size);
459
460 // Setup indirections
461 if (!real_klass.is_null()) {
462 java_lang_Class::set_klass(mirror, real_klass());
463 real_klass->set_java_mirror(mirror);
464 }
465
466 instanceMirrorKlass* mk = instanceMirrorKlass::cast(mirror->klass());
467 assert(size == mk->instance_size(real_klass), "should have been set");
468
469 // notify jvmti and dtrace
470 post_allocation_notify(klass, (oop)obj);
471
472 return mirror;
473 }