Hola...
En la primera edición del libro Thinking in Java (te remito a la primera, porque en las siguientes lo quitaron, según el autor, porque lo consideraban poco informativo
), había unas tablas de tiempos de instrucciones en Java.
Aunque en Java no se puede hablar de duraciones e ciclos de reloj, como nuestros amigos de C, aquí se habla de duración en relación con la operación suma. (una suma = duración 1)
Como resultado, y por lo que creo que tu programa va tan lento, es que la operación
new tiene un tiempo de 250 (= 250 ops suma) y es la más cara de todas las operaciones en Java.
En cuanto al recolector de basura, hay varias formas de llamarlo
lo cual no garantiza que vaya a pasar inmediatamente.
Echa un vistazo a los métodos gc() de Runtime y System, y al método runFinalization() de System, que sirven para tener (cierto) control sobre el recolector de basuras.
También existen algunos argumentos para la JVM que te permiten cambiar la política del recolector, te recomiendo que busques por la red.
Un saludo y espero que la parrafada te sirva de algo.
Silverfox