Да на первый вопрос и нет на второй вопрос; это виртуальная машина. Ваши проблемы, вероятно, связаны с неуказанными изменениями в реализации библиотеки между версиями. Хотя это может быть, скажем, состояние гонки.
Есть несколько обручей, через которые должна пройти виртуальная машина. Примечательно, что ссылки обрабатываются в файлах классов, как если бы они занимали то же пространство, что и int
s в стеке. double
и long
занимают два опорных слота. Например, для полей есть какая-то перестановка, через которую обычно проходит ВМ. Это все сделано (относительно) прозрачно.
Также некоторые 64-битные JVM используют «сжатые упс». Поскольку данные выровнены примерно каждые 8 или 16 байтов, три или четыре бита адреса бесполезны (хотя для некоторых алгоритмов может быть украден бит метки). Это позволяет 32-разрядным адресным данным (следовательно, использовать вдвое меньшую пропускную способность и, следовательно, быстрее) использовать размеры кучи 35- или 36-разрядных на 64-разрядной платформе.