3851 numa_make_global(addr, bytes); 3852 } 3853 3854 // The memory is committed 3855 MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, CALLER_PC); 3856 } 3857 3858 return addr; 3859 } 3860 3861 bool os::Linux::release_memory_special_shm(char* base, size_t bytes) { 3862 // detaching the SHM segment will also delete it, see reserve_memory_special_shm() 3863 return shmdt(base) == 0; 3864 } 3865 3866 bool os::Linux::release_memory_special_huge_tlbfs(char* base, size_t bytes) { 3867 return pd_release_memory(base, bytes); 3868 } 3869 3870 bool os::release_memory_special(char* base, size_t bytes) { 3871 bool res; 3872 if (MemTracker::tracking_level() > NMT_minimal) { 3873 Tracker tkr = MemTracker::get_virtual_memory_release_tracker(); 3874 res = os::Linux::release_memory_special_impl(base, bytes); 3875 if (res) { 3876 tkr.record((address)base, bytes); 3877 } 3878 3879 } else { 3880 res = os::Linux::release_memory_special_impl(base, bytes); 3881 } 3882 return res; 3883 } 3884 3885 bool os::Linux::release_memory_special_impl(char* base, size_t bytes) { 3886 assert(UseLargePages, "only for large pages"); 3887 bool res; 3888 3889 if (UseSHM) { 3890 res = os::Linux::release_memory_special_shm(base, bytes); 3891 } else { 3892 assert(UseHugeTLBFS, "must be"); 3893 res = os::Linux::release_memory_special_huge_tlbfs(base, bytes); 3894 } 3895 return res; 3896 } 3897 3898 size_t os::large_page_size() { 3899 return _large_page_size; 3900 } | 3851 numa_make_global(addr, bytes); 3852 } 3853 3854 // The memory is committed 3855 MemTracker::record_virtual_memory_reserve_and_commit((address)addr, bytes, CALLER_PC); 3856 } 3857 3858 return addr; 3859 } 3860 3861 bool os::Linux::release_memory_special_shm(char* base, size_t bytes) { 3862 // detaching the SHM segment will also delete it, see reserve_memory_special_shm() 3863 return shmdt(base) == 0; 3864 } 3865 3866 bool os::Linux::release_memory_special_huge_tlbfs(char* base, size_t bytes) { 3867 return pd_release_memory(base, bytes); 3868 } 3869 3870 bool os::release_memory_special(char* base, size_t bytes) { 3871 bool res = os::Linux::release_memory_special_impl(base, bytes); 3872 if (res) { 3873 MemTracker::record_virtual_memory_release(base, bytes); 3874 } 3875 return res; 3876 } 3877 3878 bool os::Linux::release_memory_special_impl(char* base, size_t bytes) { 3879 assert(UseLargePages, "only for large pages"); 3880 bool res; 3881 3882 if (UseSHM) { 3883 res = os::Linux::release_memory_special_shm(base, bytes); 3884 } else { 3885 assert(UseHugeTLBFS, "must be"); 3886 res = os::Linux::release_memory_special_huge_tlbfs(base, bytes); 3887 } 3888 return res; 3889 } 3890 3891 size_t os::large_page_size() { 3892 return _large_page_size; 3893 } |