comparison src/share/vm/memory/universe.cpp @ 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 37f87013dfd8
comparison
equal deleted inserted replaced
110:a49a647afe9a 113:ba764ed4b6f2
97 97
98 size_t Universe::_heap_capacity_at_last_gc; 98 size_t Universe::_heap_capacity_at_last_gc;
99 size_t Universe::_heap_used_at_last_gc; 99 size_t Universe::_heap_used_at_last_gc;
100 100
101 CollectedHeap* Universe::_collectedHeap = NULL; 101 CollectedHeap* Universe::_collectedHeap = NULL;
102 address Universe::_heap_base = NULL;
102 103
103 104
104 void Universe::basic_type_classes_do(void f(klassOop)) { 105 void Universe::basic_type_classes_do(void f(klassOop)) {
105 f(boolArrayKlassObj()); 106 f(boolArrayKlassObj());
106 f(byteArrayKlassObj()); 107 f(byteArrayKlassObj());
462 } 463 }
463 464
464 465
465 class FixupMirrorClosure: public ObjectClosure { 466 class FixupMirrorClosure: public ObjectClosure {
466 public: 467 public:
467 void do_object(oop obj) { 468 virtual void do_object(oop obj) {
468 if (obj->is_klass()) { 469 if (obj->is_klass()) {
469 EXCEPTION_MARK; 470 EXCEPTION_MARK;
470 KlassHandle k(THREAD, klassOop(obj)); 471 KlassHandle k(THREAD, klassOop(obj));
471 // We will never reach the CATCH below since Exceptions::_throw will cause 472 // We will never reach the CATCH below since Exceptions::_throw will cause
472 // the VM to exit if an exception is thrown during initialization 473 // the VM to exit if an exception is thrown during initialization
665 assert(!Universe::_fully_initialized, "called after initialize_vtables"); 666 assert(!Universe::_fully_initialized, "called after initialize_vtables");
666 guarantee(1 << LogHeapWordSize == sizeof(HeapWord), 667 guarantee(1 << LogHeapWordSize == sizeof(HeapWord),
667 "LogHeapWordSize is incorrect."); 668 "LogHeapWordSize is incorrect.");
668 guarantee(sizeof(oop) >= sizeof(HeapWord), "HeapWord larger than oop?"); 669 guarantee(sizeof(oop) >= sizeof(HeapWord), "HeapWord larger than oop?");
669 guarantee(sizeof(oop) % sizeof(HeapWord) == 0, 670 guarantee(sizeof(oop) % sizeof(HeapWord) == 0,
670 "oop size is not not a multiple of HeapWord size"); 671 "oop size is not not a multiple of HeapWord size");
671 TraceTime timer("Genesis", TraceStartupTime); 672 TraceTime timer("Genesis", TraceStartupTime);
672 GC_locker::lock(); // do not allow gc during bootstrapping 673 GC_locker::lock(); // do not allow gc during bootstrapping
673 JavaClasses::compute_hard_coded_offsets(); 674 JavaClasses::compute_hard_coded_offsets();
674 675
675 // Get map info from shared archive file. 676 // Get map info from shared archive file.
756 } 757 }
757 758
758 jint status = Universe::heap()->initialize(); 759 jint status = Universe::heap()->initialize();
759 if (status != JNI_OK) { 760 if (status != JNI_OK) {
760 return status; 761 return status;
762 }
763 if (UseCompressedOops) {
764 // Subtract a page because something can get allocated at heap base.
765 // This also makes implicit null checking work, because the
766 // memory+1 page below heap_base needs to cause a signal.
767 // See needs_explicit_null_check.
768 // Only set the heap base for compressed oops because it indicates
769 // compressed oops for pstack code.
770 Universe::_heap_base = Universe::heap()->base() - os::vm_page_size();
761 } 771 }
762 772
763 // We will never reach the CATCH below since Exceptions::_throw will cause 773 // We will never reach the CATCH below since Exceptions::_throw will cause
764 // the VM to exit if an exception is thrown during initialization 774 // the VM to exit if an exception is thrown during initialization
765 775