< prev index next >
src/share/vm/memory/allocation.inline.hpp
Print this page
*** 266,271 ****
--- 266,296 ----
free_mmap(addr, length);
}
}
}
+ template <class E, MEMFLAGS F> void* CMmapObj<E,F>::operator new(size_t size) {
+ int alignment = os::vm_allocation_granularity();
+
+ int pages = (int)(size / os::vm_page_size());
+ if (pages == 0 || size % (pages * os::vm_page_size()) != 0) pages++;
+ size_t mmap_size = pages * os::vm_page_size();
+
+ char* addr = os::reserve_memory(mmap_size, NULL, alignment, F);
+ if (addr == NULL) {
+ vm_exit_out_of_memory(size, OOM_MMAP_ERROR, "VTBuffer (reserve)");
+ }
+
+ os::commit_memory_or_exit(addr, mmap_size, !ExecMem, "VTBuffer (commit)");
+
+ return addr;
+ }
+
+ template <class E, MEMFLAGS F> void CMmapObj<E, F>::operator delete(void* addr, size_t length) {
+ int pages = (int)(length / os::vm_page_size());
+ if (pages == 0 || length % (pages * os::vm_page_size()) != 0) pages++;
+ size_t mmap_size = pages * os::vm_page_size();
+ bool result = os::release_memory((char*)addr, mmap_size);
+ assert(result, "Failed to release memory");
+ }
+
#endif // SHARE_VM_MEMORY_ALLOCATION_INLINE_HPP
< prev index next >