Отвечаю на все посты сразу:
Нужно просто понять, что ява - по сути framework, а не язык программирования в чистом виде. Вся ява в нативе написана на С. отсюда можно делать выводы, как работает то или это. Любой(!) язык в конце концов приводится к машинному коду, и реализовать собственную концепцию работы с памятью в обход системы невозможно.
Потому выделение памяти происxодит так:
YourType* yourPointer=(YourType*)malloc((unsigned)yourTypeCount*sizeof(YourType));//make somthing with &yourPointer - reference to really Objectfree(yourPointer);// will be called by GarbageCollector
Ничего нового тут наверняка не придумали, ни Sun, ни Oracle. Ссылки на источники открытых версий JVM можешь поискать сам. Естественно, реализация GarbageCollecor может уже значительно отличаться - по сути какой то контейнер со смарт-пойнтерами, его кстати неоднократно переделывали... но помогает не очень.
Верхний heap - просто верхний раздел heapa, куда доступ быстрее, так как таблица heapa читается сверху вниз. При начале работы рограммы глобальные переменные, константы, статические функции и переменные кладутся туда по алгоритму "LastFit". Динамическое выделение памяти - "FirstFit"( на нижние адреса).
Документацию по этому поводу никогда не смотрел( да и есть ли она? ява - не opensource), но со значительной уверенностью могу предположить, что все в общих чертах так и есть.