2473 bool os::release_memory_special(char* base, size_t bytes) { 2474 // Detaching the SHM segment will also delete it, see reserve_memory_special(). 2475 Unimplemented(); 2476 return false; 2477 } 2478 2479 size_t os::large_page_size() { 2480 return _large_page_size; 2481 } 2482 2483 bool os::can_commit_large_page_memory() { 2484 // Does not matter, we do not support huge pages. 2485 return false; 2486 } 2487 2488 bool os::can_execute_large_page_memory() { 2489 // Does not matter, we do not support huge pages. 2490 return false; 2491 } 2492 2493 // Reserve memory at an arbitrary address, only if that area is 2494 // available (and not reserved for something else). 2495 char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { 2496 char* addr = NULL; 2497 2498 // Always round to os::vm_page_size(), which may be larger than 4K. 2499 bytes = align_up(bytes, os::vm_page_size()); 2500 2501 // In 4K mode always use mmap. 2502 // In 64K mode allocate small sizes with mmap, large ones with 64K shmatted. 2503 if (os::vm_page_size() == 4*K) { 2504 return reserve_mmaped_memory(bytes, requested_addr, 0); 2505 } else { 2506 if (bytes >= Use64KPagesThreshold) { 2507 return reserve_shmated_memory(bytes, requested_addr, 0); 2508 } else { 2509 return reserve_mmaped_memory(bytes, requested_addr, 0); 2510 } 2511 } 2512 | 2473 bool os::release_memory_special(char* base, size_t bytes) { 2474 // Detaching the SHM segment will also delete it, see reserve_memory_special(). 2475 Unimplemented(); 2476 return false; 2477 } 2478 2479 size_t os::large_page_size() { 2480 return _large_page_size; 2481 } 2482 2483 bool os::can_commit_large_page_memory() { 2484 // Does not matter, we do not support huge pages. 2485 return false; 2486 } 2487 2488 bool os::can_execute_large_page_memory() { 2489 // Does not matter, we do not support huge pages. 2490 return false; 2491 } 2492 2493 char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr, int file_desc) { 2494 assert(file_desc >= 0, "file_desc is not valid"); 2495 char* result = NULL; 2496 2497 // Always round to os::vm_page_size(), which may be larger than 4K. 2498 bytes = align_up(bytes, os::vm_page_size()); 2499 result = reserve_mmaped_memory(bytes, requested_addr, 0); 2500 2501 if (result != NULL) { 2502 if (replace_existing_mapping_with_file_mapping(result, bytes, file_desc) == NULL) { 2503 vm_exit_during_initialization(err_msg("Error in mapping Java heap at the given filesystem directory")); 2504 } 2505 } 2506 return result; 2507 } 2508 2509 // Reserve memory at an arbitrary address, only if that area is 2510 // available (and not reserved for something else). 2511 char* os::pd_attempt_reserve_memory_at(size_t bytes, char* requested_addr) { 2512 char* addr = NULL; 2513 2514 // Always round to os::vm_page_size(), which may be larger than 4K. 2515 bytes = align_up(bytes, os::vm_page_size()); 2516 2517 // In 4K mode always use mmap. 2518 // In 64K mode allocate small sizes with mmap, large ones with 64K shmatted. 2519 if (os::vm_page_size() == 4*K) { 2520 return reserve_mmaped_memory(bytes, requested_addr, 0); 2521 } else { 2522 if (bytes >= Use64KPagesThreshold) { 2523 return reserve_shmated_memory(bytes, requested_addr, 0); 2524 } else { 2525 return reserve_mmaped_memory(bytes, requested_addr, 0); 2526 } 2527 } 2528 |