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; 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 } 739 740 ShouldNotReachHere(); 741 return NULL; 742 } 743 744 // Choose the heap base address and oop encoding mode 745 // when compressed oops are used: 746 // Unscaled - Use 32-bits oops without encoding when 747 // NarrowOopHeapBaseMin + heap_size < 4Gb 748 // ZeroBased - Use zero based compressed oops with encoding when 749 // NarrowOopHeapBaseMin + heap_size < 32Gb 750 // HeapBased - Use compressed oops with heap base + encoding. 751 752 jint Universe::initialize_heap() { 753 jint status = JNI_ERR; 754 755 _collectedHeap = create_heap_ext(); 756 if (_collectedHeap == NULL) { 757 _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; 720 721 CollectedHeap* Universe::create_heap() { 722 assert(_collectedHeap == NULL, "Heap already created"); 723 #if !INCLUDE_ALL_GCS 724 if (UseParallelGC) { 725 fatal("UseParallelGC not supported in this VM."); 726 } else if (UseG1GC) { 727 fatal("UseG1GC not supported in this VM."); 728 } else if (UseConcMarkSweepGC) { 729 fatal("UseConcMarkSweepGC not supported in this VM."); 730 #else 731 if (UseParallelGC) { 732 return Universe::create_heap_with_policy<ParallelScavengeHeap, GenerationSizer>(); 733 } else if (UseG1GC) { 734 return Universe::create_heap_with_policy<G1CollectedHeap, G1CollectorPolicy>(); 735 } else if (UseConcMarkSweepGC) { 736 return Universe::create_heap_with_policy<GenCollectedHeap, ConcurrentMarkSweepPolicy>(); 737 #endif 738 } else if (UseSerialGC) { 739 return Universe::create_heap_with_policy<GenCollectedHeap, MarkSweepPolicy>(); 740 } else if (UseEpsilonGC) { 741 return Universe::create_heap_with_policy<EpsilonCollectedHeap, EpsilonCollectorPolicy>(); 742 } 743 744 ShouldNotReachHere(); 745 return NULL; 746 } 747 748 // Choose the heap base address and oop encoding mode 749 // when compressed oops are used: 750 // Unscaled - Use 32-bits oops without encoding when 751 // NarrowOopHeapBaseMin + heap_size < 4Gb 752 // ZeroBased - Use zero based compressed oops with encoding when 753 // NarrowOopHeapBaseMin + heap_size < 32Gb 754 // HeapBased - Use compressed oops with heap base + encoding. 755 756 jint Universe::initialize_heap() { 757 jint status = JNI_ERR; 758 759 _collectedHeap = create_heap_ext(); 760 if (_collectedHeap == NULL) { 761 _collectedHeap = create_heap(); |