632 debug_only(if (paranoid) verify_memory(ptr));
633 if (PrintMalloc && tty != NULL) {
634 tty->print_cr("os::malloc " SIZE_FORMAT " bytes --> " PTR_FORMAT, size, p2i(ptr));
635 }
636
637 // we do not track guard memory
638 return MemTracker::record_malloc((address)ptr, size, memflags, stack, level);
639 }
640
641 void* os::realloc(void *memblock, size_t size, MEMFLAGS flags) {
642 return os::realloc(memblock, size, flags, CALLER_PC);
643 }
644
645 void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, const NativeCallStack& stack) {
646
647 // For the test flag -XX:MallocMaxTestWords
648 if (has_reached_max_malloc_test_peak(size)) {
649 return NULL;
650 }
651
652 #ifndef ASSERT
653 NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1));
654 NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size));
655 // NMT support
656 void* membase = MemTracker::record_free(memblock);
657 NMT_TrackingLevel level = MemTracker::tracking_level();
658 size_t nmt_header_size = MemTracker::malloc_header_size(level);
659 void* ptr = ::realloc(membase, size + nmt_header_size);
660 return MemTracker::record_malloc(ptr, size, memflags, stack, level);
661 #else
662 if (memblock == NULL) {
663 return os::malloc(size, memflags, stack);
664 }
665 if ((intptr_t)memblock == (intptr_t)MallocCatchPtr) {
666 tty->print_cr("os::realloc caught " PTR_FORMAT, p2i(memblock));
667 breakpoint();
668 }
669 // NMT support
670 void* membase = MemTracker::malloc_base(memblock);
671 verify_memory(membase);
672 if (size == 0) {
673 return NULL;
674 }
675 // always move the block
676 void* ptr = os::malloc(size, memflags, stack);
677 if (PrintMalloc && tty != NULL) {
678 tty->print_cr("os::realloc " SIZE_FORMAT " bytes, " PTR_FORMAT " --> " PTR_FORMAT, size, p2i(memblock), p2i(ptr));
679 }
680 // Copy to new memory if malloc didn't fail
681 if ( ptr != NULL ) {
682 GuardedMemory guarded(MemTracker::malloc_base(memblock));
683 // Guard's user data contains NMT header
684 size_t memblock_size = guarded.get_user_size() - MemTracker::malloc_header_size(memblock);
685 memcpy(ptr, memblock, MIN2(size, memblock_size));
686 if (paranoid) verify_memory(MemTracker::malloc_base(ptr));
687 if ((intptr_t)ptr == (intptr_t)MallocCatchPtr) {
688 tty->print_cr("os::realloc caught, " SIZE_FORMAT " bytes --> " PTR_FORMAT, size, p2i(ptr));
689 breakpoint();
690 }
691 os::free(memblock);
692 }
693 return ptr;
694 #endif
|
632 debug_only(if (paranoid) verify_memory(ptr));
633 if (PrintMalloc && tty != NULL) {
634 tty->print_cr("os::malloc " SIZE_FORMAT " bytes --> " PTR_FORMAT, size, p2i(ptr));
635 }
636
637 // we do not track guard memory
638 return MemTracker::record_malloc((address)ptr, size, memflags, stack, level);
639 }
640
641 void* os::realloc(void *memblock, size_t size, MEMFLAGS flags) {
642 return os::realloc(memblock, size, flags, CALLER_PC);
643 }
644
645 void* os::realloc(void *memblock, size_t size, MEMFLAGS memflags, const NativeCallStack& stack) {
646
647 // For the test flag -XX:MallocMaxTestWords
648 if (has_reached_max_malloc_test_peak(size)) {
649 return NULL;
650 }
651
652 if (size == 0) {
653 // return a valid pointer if size is zero
654 // if NULL is returned the calling functions assume out of memory.
655 size = 1;
656 }
657
658 #ifndef ASSERT
659 NOT_PRODUCT(inc_stat_counter(&num_mallocs, 1));
660 NOT_PRODUCT(inc_stat_counter(&alloc_bytes, size));
661 // NMT support
662 void* membase = MemTracker::record_free(memblock);
663 NMT_TrackingLevel level = MemTracker::tracking_level();
664 size_t nmt_header_size = MemTracker::malloc_header_size(level);
665 void* ptr = ::realloc(membase, size + nmt_header_size);
666 return MemTracker::record_malloc(ptr, size, memflags, stack, level);
667 #else
668 if (memblock == NULL) {
669 return os::malloc(size, memflags, stack);
670 }
671 if ((intptr_t)memblock == (intptr_t)MallocCatchPtr) {
672 tty->print_cr("os::realloc caught " PTR_FORMAT, p2i(memblock));
673 breakpoint();
674 }
675 // NMT support
676 void* membase = MemTracker::malloc_base(memblock);
677 verify_memory(membase);
678 // always move the block
679 void* ptr = os::malloc(size, memflags, stack);
680 if (PrintMalloc && tty != NULL) {
681 tty->print_cr("os::realloc " SIZE_FORMAT " bytes, " PTR_FORMAT " --> " PTR_FORMAT, size, p2i(memblock), p2i(ptr));
682 }
683 // Copy to new memory if malloc didn't fail
684 if ( ptr != NULL ) {
685 GuardedMemory guarded(MemTracker::malloc_base(memblock));
686 // Guard's user data contains NMT header
687 size_t memblock_size = guarded.get_user_size() - MemTracker::malloc_header_size(memblock);
688 memcpy(ptr, memblock, MIN2(size, memblock_size));
689 if (paranoid) verify_memory(MemTracker::malloc_base(ptr));
690 if ((intptr_t)ptr == (intptr_t)MallocCatchPtr) {
691 tty->print_cr("os::realloc caught, " SIZE_FORMAT " bytes --> " PTR_FORMAT, size, p2i(ptr));
692 breakpoint();
693 }
694 os::free(memblock);
695 }
696 return ptr;
697 #endif
|