Well, 32 bit might get relegated to microcontrollers soon, and other specialist stuff that doesnt run the JVM much. I cant see much mainstream 32 bit hardware being made in even 5 years.
This. Even _new_ ARM processors like A9 and A15 are still 32-bit, and this is at the heart of many (most?) smartphones. Many low end x86 processors like a lot of Atom chips are also 32-bit only. Just because most new consumer x86 is now 64-bit doesn't mean at all that it's time to sunset a 32-bit JVM (if you'll ever be able to do that).
Oh, it'll shift to 64-bit on ARM soon enough. Power efficiency. Flags register consumes less power and less memory (cache) subsystem traffic.
It's funny that only things 64-bit ARM doesn't help with is supporting more physical RAM (32-bit designs like Cortex A7 and A15 support 1 TB) or 64-bit register width (almost totally useless). You probably want to rather use 128-bit wide NEON instructions...
Gingerbread is roughly four and a half years old and it still runs on about 6 percent of Android devices in use. Adoption of new technology lags a lot more at the tail - if Android was going to be completely off 32-bit in five years time it would have to have significant adoption already.!
They dont tend to run the jvm. But they will quite likely end up running 64 bit as speeds increase and they get upgraded. Both mips and arm are pushing 64 bit quite a bit now, these type of applications dont really need 64 bit but it wont cost anything different.
Actually, quite a few set-top boxes do run Java and thus some form of a JVM (though perhaps not HotSpot). Of particular note, Java (specifically, BD-J) is a mandatory part of the Blu-Ray standard in order to implement things like interactive menus, disc updates (for post-release subtitle updates, for example), etc., so literally every device with Blu-Ray playback capability runs a JVM (probably HotSpot). I'd reckon most of these run 32-bit processors, and probably will for the next several years.
This isn't the only case where Java is part of the standards for various set-top boxen. Java's also commonplace as middleware on cable/satellite TV boxes, and (IIRC) some "smart TVs" use Java extensively.
That's just false. As of 2010 when I was working writing cable settop box software, cable settop boxes were legally obligated to ship with and run the JVM as part of OCAP antitrust regulation (the idea being that firmware written in Java could run on any settop box). I'm no longer in that industry, but unless something has changed in the last 5 years (which it may have) every new cable settop box shipped in the United States shipped with a JVM and booted into firmware that ran on the JVM.
As of that time, all of the platforms I worked on were 32-bit.
Before, I said, "I'm not sure where you're getting your information." Now I'm very sure you don't know what you're talking about.
Even today there are some minority 32-bit products around in the PC world where the Oracle Java VM can run.
For example the HP Stream 7 tablet runs Windows 8.1 32-bit edition on x86 Intel Atom Z3735G (CPU is x86-64 capable). It can only support the 32-bit JVM.
64 bit JVM can target 32-bit address space just fine. In fact if you know you're doing that, then with 4 byte alignment, you only need 30 bits for a pointer, leaving 2 for other optimizations. Maybe.
Sure. Suppose you have an 8 byte address space. You'll need 3 bits to address them (0,1,..6,7). But, if the only objects you store must fall on a 4 byte boundary, there's only two valid addresses: 0 and 4. You can represent that with one bit, just multiply the value by 4 (0->0, 1->4).
Same for any other size. Got 32 bit address space, 4GB? Well with 4 byte alignment, you shave off two bits, just multiply every pointer by 4 (left shift it by 2).
With the two highest bits, you're free to encode other information for whatever little things you need to keep track of in the runtime.
The JVM already does this on x64 so that instead of 8 byte pointers, they're only 4 bytes. But alignment bumps up the range from 4 to 16(?) GB - or something like that? Compresssed object pointers I think is the name if you wanna look up more.