< prev index next >

src/share/vm/memory/allocation.inline.hpp

Print this page




 251 void ArrayAllocator<E, F>::free_malloc(E* addr, size_t length) {
 252   MallocArrayAllocator<E, F>::free(addr, length);
 253 }
 254 
 255 template<class E, MEMFLAGS F>
 256 void ArrayAllocator<E, F>::free_mmap(E* addr, size_t length) {
 257   MmapArrayAllocator<E, F>::free(addr, length);
 258 }
 259 
 260 template<class E, MEMFLAGS F>
 261 void ArrayAllocator<E, F>::free(E* addr, size_t length) {
 262   if (addr != NULL) {
 263     if (should_use_malloc(length)) {
 264       free_malloc(addr, length);
 265     } else {
 266       free_mmap(addr, length);
 267     }
 268   }
 269 }
 270 

























 271 #endif // SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP


 251 void ArrayAllocator<E, F>::free_malloc(E* addr, size_t length) {
 252   MallocArrayAllocator<E, F>::free(addr, length);
 253 }
 254 
 255 template<class E, MEMFLAGS F>
 256 void ArrayAllocator<E, F>::free_mmap(E* addr, size_t length) {
 257   MmapArrayAllocator<E, F>::free(addr, length);
 258 }
 259 
 260 template<class E, MEMFLAGS F>
 261 void ArrayAllocator<E, F>::free(E* addr, size_t length) {
 262   if (addr != NULL) {
 263     if (should_use_malloc(length)) {
 264       free_malloc(addr, length);
 265     } else {
 266       free_mmap(addr, length);
 267     }
 268   }
 269 }
 270 
 271 template <class E, MEMFLAGS F> void* CMmapObj<E,F>::operator new(size_t size) {
 272   int alignment = os::vm_allocation_granularity();
 273 
 274   int pages = (int)(size / os::vm_page_size());
 275   if (pages == 0 || size % (pages * os::vm_page_size()) != 0) pages++;
 276   size_t mmap_size = pages * os::vm_page_size();
 277 
 278   char* addr = os::reserve_memory(mmap_size, NULL, alignment, F);
 279   if (addr == NULL) {
 280     vm_exit_out_of_memory(size, OOM_MMAP_ERROR, "VTBuffer (reserve)");
 281   }
 282 
 283   os::commit_memory_or_exit(addr, mmap_size, !ExecMem, "VTBuffer (commit)");
 284 
 285   return addr;
 286 }
 287 
 288 template <class E, MEMFLAGS F> void CMmapObj<E, F>::operator delete(void* addr, size_t length) {
 289   int pages = (int)(length / os::vm_page_size());
 290   if (pages == 0 || length % (pages * os::vm_page_size()) != 0) pages++;
 291   size_t mmap_size = pages * os::vm_page_size();
 292   bool result = os::release_memory((char*)addr, mmap_size);
 293   assert(result, "Failed to release memory");
 294 }
 295 
 296 #endif // SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP
< prev index next >