Nevím jak je to přesně v Javě, ale obecně u GC systémů je možné mít nefragmentovanou paměť, takže správce paměti potřebuje jenom ukazatel na první volné místo. V té hlavičce objektu máš velikost objektu, takže na další se dostaneš. Přes objekty iteruješ jenom v případě GC a to obvykle jenom přes nově vytvořené živé objekty (záleží na implementaci), takže na rychlost to nemá velký vliv.