HandleArea::allocate_handle

openjdk8\hotspot\src\share\vm\runtime\handles.cpp
调用的是real_allocate_handle(obj)

oop* HandleArea::allocate_handle(oop obj) {
  assert(_handle_mark_nesting > 1, "memory leak: allocating handle outside HandleMark");
  assert(_no_handle_mark_nesting == 0, "allocating handle inside NoHandleMark");
  assert(obj->is_oop(), err_msg("not an oop: " INTPTR_FORMAT, (intptr_t*) obj));
  return real_allocate_handle(obj);
}
Handle::Handle

openjdk8\hotspot\src\share\vm\runtime\handles.cpp
调用的是thread->handle_area()->allocate_handle(obj)

Handle::Handle(Thread* thread, oop obj) {
  assert(thread == Thread::current(), "sanity check");
  if (obj == NULL) {
    _handle = NULL;
  } else {
  	// real_allocate_handle(obj)
    _handle = thread->handle_area()->allocate_handle(obj);
  }
}
real_allocate_handle

openjdk8\hotspot\src\share\vm\runtime\handles.hpp

 // Handle allocation
 private:
  oop* real_allocate_handle(oop obj) {
#ifdef ASSERT
    oop* handle = (oop*) (UseMallocOnly ? internal_malloc_4(oopSize) : Amalloc_4(oopSize));
#else
    oop* handle = (oop*) Amalloc_4(oopSize);
#endif
    *handle = obj;
    return handle;
  }
HandleArea::allocate_handle

调用的是real_allocate_handle(obj)

#ifdef ASSERT
  oop* allocate_handle(oop obj);
#else
  oop* allocate_handle(oop obj) { return real_allocate_handle(obj); }
#endif
Amalloc_4
void *Amalloc_4(size_t x) {
    assert( (x&(sizeof(char*)-1)) == 0, "misaligned size" );
    if (_hwm + x > _max) {
      return grow(x);
    } else {
      char *old = _hwm;
      _hwm += x;
      return old;
    }