For the second question, please see this.
For the first question, 32-bit processors cannot directly deal with 64-bit integers as 64-bit operands cannot be stored in 32-bit registers "as a whole". Compilers solve this issue by transforming 64-bit operations into a series of operations on 32-bit operands which represent halves of 64-bit operands. See this answer for a thorough explanation.
In Java, long
is guaranteed to be exactly 64 bits, int
is guaranteed to be exactly 32 bits. Using 64-bit integers on a 32-bit machine probably impacts performance, but given the nature of Java I don't think this would be pretty much noticeable (maybe in number crunching applications).