Mercurial > hg > graal-compiler
comparison src/share/vm/runtime/arguments.cpp @ 135:b7268662a986
6689523: max heap calculation for compressed oops is off by MaxPermSize
Summary: Need to subtract MaxPermSize from the total heap size when determining whether compressed oops is turned on.
Reviewed-by: jmasa, jcoomes, kvn
author | coleenp |
---|---|
date | Tue, 29 Apr 2008 19:31:29 -0400 |
parents | ba764ed4b6f2 |
children | 9148c65abefc 37f87013dfd8 |
comparison
equal
deleted
inserted
replaced
134:8a79f7ec8f5d | 135:b7268662a986 |
---|---|
1123 "for the CMS collector. CMSParPromoteBlocksToClaim will take precedence.\n"); | 1123 "for the CMS collector. CMSParPromoteBlocksToClaim will take precedence.\n"); |
1124 } | 1124 } |
1125 } | 1125 } |
1126 } | 1126 } |
1127 | 1127 |
1128 inline uintx max_heap_for_compressed_oops() { | |
1129 LP64_ONLY(return oopDesc::OopEncodingHeapMax - MaxPermSize - os::vm_page_size()); | |
1130 NOT_LP64(return DefaultMaxRAM); | |
1131 } | |
1132 | |
1128 bool Arguments::should_auto_select_low_pause_collector() { | 1133 bool Arguments::should_auto_select_low_pause_collector() { |
1129 if (UseAutoGCSelectPolicy && | 1134 if (UseAutoGCSelectPolicy && |
1130 !FLAG_IS_DEFAULT(MaxGCPauseMillis) && | 1135 !FLAG_IS_DEFAULT(MaxGCPauseMillis) && |
1131 (MaxGCPauseMillis <= AutoGCSelectPauseMillis)) { | 1136 (MaxGCPauseMillis <= AutoGCSelectPauseMillis)) { |
1132 if (PrintGCDetails) { | 1137 if (PrintGCDetails) { |
1167 #ifdef _LP64 | 1172 #ifdef _LP64 |
1168 // Compressed Headers do not work with CMS, which uses a bit in the klass | 1173 // Compressed Headers do not work with CMS, which uses a bit in the klass |
1169 // field offset to determine free list chunk markers. | 1174 // field offset to determine free list chunk markers. |
1170 // Check that UseCompressedOops can be set with the max heap size allocated | 1175 // Check that UseCompressedOops can be set with the max heap size allocated |
1171 // by ergonomics. | 1176 // by ergonomics. |
1172 if (!UseConcMarkSweepGC && MaxHeapSize <= (32*G - os::vm_page_size())) { | 1177 if (!UseConcMarkSweepGC && MaxHeapSize <= max_heap_for_compressed_oops()) { |
1173 if (FLAG_IS_DEFAULT(UseCompressedOops)) { | 1178 if (FLAG_IS_DEFAULT(UseCompressedOops)) { |
1174 FLAG_SET_ERGO(bool, UseCompressedOops, true); | 1179 FLAG_SET_ERGO(bool, UseCompressedOops, true); |
1175 } | 1180 } |
1176 } else { | 1181 } else { |
1177 if (UseCompressedOops && !FLAG_IS_DEFAULT(UseCompressedOops)) { | 1182 if (UseCompressedOops && !FLAG_IS_DEFAULT(UseCompressedOops)) { |
1203 Abstract_VM_Version::parallel_worker_threads()); | 1208 Abstract_VM_Version::parallel_worker_threads()); |
1204 | 1209 |
1205 if (FLAG_IS_DEFAULT(MaxHeapSize)) { | 1210 if (FLAG_IS_DEFAULT(MaxHeapSize)) { |
1206 const uint64_t reasonable_fraction = | 1211 const uint64_t reasonable_fraction = |
1207 os::physical_memory() / DefaultMaxRAMFraction; | 1212 os::physical_memory() / DefaultMaxRAMFraction; |
1208 const uint64_t maximum_size = (uint64_t) DefaultMaxRAM; | 1213 const uint64_t maximum_size = (uint64_t) |
1214 (FLAG_IS_DEFAULT(DefaultMaxRAM) && UseCompressedOops ? | |
1215 MIN2(max_heap_for_compressed_oops(), DefaultMaxRAM) : | |
1216 DefaultMaxRAM); | |
1209 size_t reasonable_max = | 1217 size_t reasonable_max = |
1210 (size_t) os::allocatable_physical_memory(reasonable_fraction); | 1218 (size_t) os::allocatable_physical_memory(reasonable_fraction); |
1211 if (reasonable_max > maximum_size) { | 1219 if (reasonable_max > maximum_size) { |
1212 reasonable_max = maximum_size; | 1220 reasonable_max = maximum_size; |
1213 } | 1221 } |