65 #include "runtime/init.hpp" 66 #include "runtime/java.hpp" 67 #include "runtime/javaCalls.hpp" 68 #include "runtime/sharedRuntime.hpp" 69 #include "runtime/synchronizer.hpp" 70 #include "runtime/thread.inline.hpp" 71 #include "runtime/timerTrace.hpp" 72 #include "runtime/vm_operations.hpp" 73 #include "services/memoryService.hpp" 74 #include "utilities/copy.hpp" 75 #include "utilities/events.hpp" 76 #include "utilities/hashtable.inline.hpp" 77 #include "utilities/macros.hpp" 78 #include "utilities/ostream.hpp" 79 #include "utilities/preserveException.hpp" 80 #if INCLUDE_ALL_GCS 81 #include "gc/cms/cmsCollectorPolicy.hpp" 82 #include "gc/g1/g1CollectedHeap.inline.hpp" 83 #include "gc/g1/g1CollectorPolicy.hpp" 84 #include "gc/parallel/parallelScavengeHeap.hpp" 85 #include "gc/shared/adaptiveSizePolicy.hpp" 86 #endif // INCLUDE_ALL_GCS 87 #if INCLUDE_CDS 88 #include "classfile/sharedClassUtil.hpp" 89 #endif 90 91 // Known objects 92 Klass* Universe::_boolArrayKlassObj = NULL; 93 Klass* Universe::_byteArrayKlassObj = NULL; 94 Klass* Universe::_charArrayKlassObj = NULL; 95 Klass* Universe::_intArrayKlassObj = NULL; 96 Klass* Universe::_shortArrayKlassObj = NULL; 97 Klass* Universe::_longArrayKlassObj = NULL; 98 Klass* Universe::_singleArrayKlassObj = NULL; 99 Klass* Universe::_doubleArrayKlassObj = NULL; 100 Klass* Universe::_typeArrayKlassObjs[T_VOID+1] = { NULL /*, NULL...*/ }; 101 Klass* Universe::_objectArrayKlassObj = NULL; 102 oop Universe::_int_mirror = NULL; 103 oop Universe::_float_mirror = NULL; 104 oop Universe::_double_mirror = NULL; 716 717 CollectedHeap* Universe::create_heap() { 718 assert(_collectedHeap == NULL, "Heap already created"); 719 #if !INCLUDE_ALL_GCS 720 if (UseParallelGC) { 721 fatal("UseParallelGC not supported in this VM."); 722 } else if (UseG1GC) { 723 fatal("UseG1GC not supported in this VM."); 724 } else if (UseConcMarkSweepGC) { 725 fatal("UseConcMarkSweepGC not supported in this VM."); 726 #else 727 if (UseParallelGC) { 728 return Universe::create_heap_with_policy<ParallelScavengeHeap, GenerationSizer>(); 729 } else if (UseG1GC) { 730 return Universe::create_heap_with_policy<G1CollectedHeap, G1CollectorPolicy>(); 731 } else if (UseConcMarkSweepGC) { 732 return Universe::create_heap_with_policy<GenCollectedHeap, ConcurrentMarkSweepPolicy>(); 733 #endif 734 } else if (UseSerialGC) { 735 return Universe::create_heap_with_policy<GenCollectedHeap, MarkSweepPolicy>(); 736 } 737 738 ShouldNotReachHere(); 739 return NULL; 740 } 741 742 // Choose the heap base address and oop encoding mode 743 // when compressed oops are used: 744 // Unscaled - Use 32-bits oops without encoding when 745 // NarrowOopHeapBaseMin + heap_size < 4Gb 746 // ZeroBased - Use zero based compressed oops with encoding when 747 // NarrowOopHeapBaseMin + heap_size < 32Gb 748 // HeapBased - Use compressed oops with heap base + encoding. 749 750 jint Universe::initialize_heap() { 751 jint status = JNI_ERR; 752 753 _collectedHeap = create_heap_ext(); 754 if (_collectedHeap == NULL) { 755 _collectedHeap = create_heap(); | 65 #include "runtime/init.hpp" 66 #include "runtime/java.hpp" 67 #include "runtime/javaCalls.hpp" 68 #include "runtime/sharedRuntime.hpp" 69 #include "runtime/synchronizer.hpp" 70 #include "runtime/thread.inline.hpp" 71 #include "runtime/timerTrace.hpp" 72 #include "runtime/vm_operations.hpp" 73 #include "services/memoryService.hpp" 74 #include "utilities/copy.hpp" 75 #include "utilities/events.hpp" 76 #include "utilities/hashtable.inline.hpp" 77 #include "utilities/macros.hpp" 78 #include "utilities/ostream.hpp" 79 #include "utilities/preserveException.hpp" 80 #if INCLUDE_ALL_GCS 81 #include "gc/cms/cmsCollectorPolicy.hpp" 82 #include "gc/g1/g1CollectedHeap.inline.hpp" 83 #include "gc/g1/g1CollectorPolicy.hpp" 84 #include "gc/parallel/parallelScavengeHeap.hpp" 85 #include "gc/epsilon/epsilonCollectedHeap.hpp" 86 #include "gc/epsilon/epsilonCollectorPolicy.hpp" 87 #include "gc/shared/adaptiveSizePolicy.hpp" 88 #endif // INCLUDE_ALL_GCS 89 #if INCLUDE_CDS 90 #include "classfile/sharedClassUtil.hpp" 91 #endif 92 93 // Known objects 94 Klass* Universe::_boolArrayKlassObj = NULL; 95 Klass* Universe::_byteArrayKlassObj = NULL; 96 Klass* Universe::_charArrayKlassObj = NULL; 97 Klass* Universe::_intArrayKlassObj = NULL; 98 Klass* Universe::_shortArrayKlassObj = NULL; 99 Klass* Universe::_longArrayKlassObj = NULL; 100 Klass* Universe::_singleArrayKlassObj = NULL; 101 Klass* Universe::_doubleArrayKlassObj = NULL; 102 Klass* Universe::_typeArrayKlassObjs[T_VOID+1] = { NULL /*, NULL...*/ }; 103 Klass* Universe::_objectArrayKlassObj = NULL; 104 oop Universe::_int_mirror = NULL; 105 oop Universe::_float_mirror = NULL; 106 oop Universe::_double_mirror = NULL; 718 719 CollectedHeap* Universe::create_heap() { 720 assert(_collectedHeap == NULL, "Heap already created"); 721 #if !INCLUDE_ALL_GCS 722 if (UseParallelGC) { 723 fatal("UseParallelGC not supported in this VM."); 724 } else if (UseG1GC) { 725 fatal("UseG1GC not supported in this VM."); 726 } else if (UseConcMarkSweepGC) { 727 fatal("UseConcMarkSweepGC not supported in this VM."); 728 #else 729 if (UseParallelGC) { 730 return Universe::create_heap_with_policy<ParallelScavengeHeap, GenerationSizer>(); 731 } else if (UseG1GC) { 732 return Universe::create_heap_with_policy<G1CollectedHeap, G1CollectorPolicy>(); 733 } else if (UseConcMarkSweepGC) { 734 return Universe::create_heap_with_policy<GenCollectedHeap, ConcurrentMarkSweepPolicy>(); 735 #endif 736 } else if (UseSerialGC) { 737 return Universe::create_heap_with_policy<GenCollectedHeap, MarkSweepPolicy>(); 738 } else if (UseEpsilonGC) { 739 return Universe::create_heap_with_policy<EpsilonCollectedHeap, EpsilonCollectorPolicy>(); 740 } 741 742 ShouldNotReachHere(); 743 return NULL; 744 } 745 746 // Choose the heap base address and oop encoding mode 747 // when compressed oops are used: 748 // Unscaled - Use 32-bits oops without encoding when 749 // NarrowOopHeapBaseMin + heap_size < 4Gb 750 // ZeroBased - Use zero based compressed oops with encoding when 751 // NarrowOopHeapBaseMin + heap_size < 32Gb 752 // HeapBased - Use compressed oops with heap base + encoding. 753 754 jint Universe::initialize_heap() { 755 jint status = JNI_ERR; 756 757 _collectedHeap = create_heap_ext(); 758 if (_collectedHeap == NULL) { 759 _collectedHeap = create_heap(); |