Tak na pierwsze pytanie i nie na drugie pytanie; to maszyna wirtualna. Twoje problemy są prawdopodobnie związane z nieokreślonymi zmianami w implementacji biblioteki pomiędzy wersjami. Chociaż może to być, powiedzmy, stan wyścigu.
Maszyna wirtualna musi przejść przez kilka przeszkód. W szczególności odwołania są traktowane w plikach klas tak, jakby zajmowały tyle samo miejsca co ints na stosie. doublei longzajmij dwa sloty referencyjne. Na przykład pola, istnieje pewna rearanżacja, przez którą zwykle przechodzi VM. Wszystko to odbywa się (względnie) przejrzyście.
Również niektóre 64-bitowe maszyny JVM używają „skompresowanych błędów”. Ponieważ dane są wyrównane co około 8 lub 16 bajtów, trzy lub cztery bity adresu są bezużyteczne (chociaż w przypadku niektórych algorytmów może zostać skradziony bit „znacznika”). Dzięki temu 32-bitowe dane adresowe (a zatem wykorzystujące o połowę mniej przepustowości, a tym samym szybsze) mogą używać rozmiarów sterty 35- lub 36-bitowych na platformie 64-bitowej.