That's not really a difference in performance, is it? One worked, and the other didn't!
If you do not pre-size your ArrayList, it starts off with tiny internal array, and re-sizes the array each time it becomes full. To do that, it creates a bigger array (
Java arrays cannot actually be resized), and copies the old contents into it, before discarding the old array. So it briefly has to have enough memory for the old and new arrays. Also, the new array is necessarily bigger than the current size.
You can make ArrayList more memory-efficient and faster by pre-sizing it. That is, specifying an appropriate size when constructing the ArrayList. Presumably, if 60000 was enough for your array-based solution, the same size is suitable for the ArrayList solution.
But do you really know in advance how many items there are? If you do, then an array or pre-sized ArrayList are good solutions. If you do not, then your array-based "solution" is not practical, as you cannot choose an appropriate array size. It's for exactly that type of situation that ArrayList was created. (Collections have some other advantages, too).
If you need to use ArrayList, then you may need to increase the maximum heap setting of your JVM. Look up options like -Xmx on the "java[.exe]" command.