Так на перше питання і ні на друге питання; це віртуальна машина. Можливо, ваші проблеми пов'язані з невстановленими змінами в реалізації бібліотеки між версіями. Хоча це може бути, скажімо, умова гонки.
Є кілька обручів, через які VM має пройти. Особливо посилання обробляються у файлах класу так, ніби вони займають таке ж місце, як і int
s у стеці. double
і long
займати два опорні проміжки. Наприклад, поля є деяка перебудова, через яку ВМ зазвичай проходить. Це все робиться (відносно) прозоро.
Також деякі 64-розрядні JVM використовують "стислий ой". Оскільки дані вирівнюються приблизно кожні 8 чи 16 байт, три чи чотири біти адреси марні (хоча для деяких алгоритмів може бути вкрадено біт "позначки"). Це дозволяє 32-бітним адресним даним (отже, використовуючи вдвічі меншу пропускну здатність, а отже, і швидше) використовувати купи розмірами 35- або 36-біт на 64-бітній платформі.