Java is slow. It was interpreted from bytecode on Android until recently. The JIT they added in 2.2 doesn't even store the compiled version. It only starts compiling when you launch the application and the app speeds up once its done for that instance. After the app is terminated and relaunched it has to JIT compile again.
On all other phones (Symbian, even LG's bullshit OS on their dumbphones) Java apps are compiled during installation and stored pre-compiled for faster launch.
The NAND is possibly replaceable since it is not part of a MCH and the partitioning is dynamically done by iTunes during a restore; it's not hard-limited in software. When you update iOS, the entire NAND is wiped and repartitioned to the appropriate size to install the new OS and application data is reinstalled from the backup.
On all other phones (Symbian, even LG's bullshit OS on their dumbphones) Java apps are compiled during installation and stored pre-compiled for faster launch.
The NAND is possibly replaceable since it is not part of a MCH and the partitioning is dynamically done by iTunes during a restore; it's not hard-limited in software. When you update iOS, the entire NAND is wiped and repartitioned to the appropriate size to install the new OS and application data is reinstalled from the backup.