Recently I heard - I'm not dead certain this is really the case - that Apple will soon require iOS Apps to be built for 64-bit ARM.
There are some good reasons for 64-bit, such as memory-mapping an entire database file. 64-bit x86 has a few more general-purpose registers than does 32-bit x86, but I don't regard that as evidence of the superiority of 64-bit, rather I regard that as a failing of the x86 architecture. There are other instruction set architectures such as PowerPC where 32-bit has lots of registers. ARM has more than x86, less than PowerPC.
32-bit pointers require less storage than 64-bit ones. I know that's obvious but in the case of Java, there is a great deal of allocation so you have to consider the memory space used to store all those pointers.
It's not so much that all those pointers would use up all your gigabytes, but that they'd use up more of your L1 cache.
If you don't need such a large range of integer values you don't need so many bits in your integers. If you have a for loop that counts from 0 to 9, you don't really need 32 bits let alone 64.