Los iteradores temporales de Java están ralentizando mi juego de Android

Esta pregunta involucra la administración de memoria en Java por razones de rendimiento: porque estoy desarrollando este programa como un juego de Android y los GC de memoria matan mi rendimiento. Así que he hecho una gran cantidad de trabajo hasta el momento y resulta que estoy haciendo un gran trabajo para optimizar el uso de memoria de mi juego, pero tengo un problema: ¡los iteradores!

Esto es lo que estoy haciendo:

Iniciar nivel de juego.Iniciar el rastreador de asignación (de esta manera ignoramos todas las asignaciones que permanecerán mientras se ejecute el nivel; tengo muchos objetos que solo se crean una vez al principio del nivel y no son el problema).Hacer algunas cosas en el nivel y obtener las asignaciones.

Mis asignaciones están llenas de esto:

466 24 java.util.AbstractList $ SimpleListIterator 12 java.util.AbstractList iterador
465 24 java.util.AbstractList $ SimpleListIterator 12 java.util.AbstractList iterador
464 24 java.util.AbstractList $ SimpleListIterator 12 java.util.AbstractList iterador
463 24 java.util.AbstractList $ SimpleListIterator 12 java.util.AbstractList iterador
461 24 java.util.AbstractList $ SimpleListIterator 12 java.util.AbstractList iterador
456 24 java.util.ArrayList $ ArrayListIterator 12 java.util.ArrayList iterador
454 24 java.util.ArrayList $ ArrayListIterator 12 java.util.ArrayList iterador
453 24 java.util.ArrayList $ ArrayListIterator 12 java.util.ArrayList iterador
452 24 java.util.ArrayList $ ArrayListIterator 12 java.util.ArrayList iterador

¡Así que los únicos objetos que se asignan mientras mi juego se ejecuta son los iteradores! Bien, ahora para arreglarlo, entonces ... qué código está causando el problema que pregunté ... aquí está:

for (Segment side : listOfSides.getSides()) {
    // do stuff
}

Sí, resulta que para cada sintaxis las llamadas iterador detrás de escena para poblar cada elemento. Lo que tiene mucho sentido y es exactamente lo que esperaba que hiciera, pero no me di cuenta de que podría acumularse tan horriblemente y causar un problema de rendimiento para los juegos. Si pudiera deshacerme de este problema, realmente haría que mi juego funcionara como un rayo, sin importar en qué teléfono estuviera. Entonces, mi pregunta es: ¿qué harías para que todos estos iteradores temporales no se crearan y luego se descartaran, lo que resultaría en desagradables ejecuciones de GC? ¡Los puntos de bonificación por hacerlo de una manera que no hace que mi código sea completamente feo! (Y usar ndk en Android no es una opción)

PD Pensé que para todas mis ArrayLists podría comenzar a usar la función get (int i), ya que son arreglos detrás de escena y el entero que usaría para indexar que se colocaría en la pila y no en el montón. Pero para los otros objetos como HashMap y LinkedList no estoy seguro de qué hacer.

Respuestas a la pregunta(3)

Su respuesta a la pregunta