2015-05-07 3 views
2

Длинные и двойные требуют 64 бит памяти. Это заставляет эти типы требовать два адресных пространства.Длинный, двойной и 64 бит памяти

На 64-битном jvm это все еще так? Поскольку эти значения теперь могут вписываться в одно адресное пространство, то означает, что эти типы теперь хранятся в одном адресном пространстве?

Имеет ли это последствия для потоковой передачи, где требуется использование энергозависимой информации для этих типов, чтобы обеспечить , что каждое отдельное адресное пространство не обновляется не в порядке?

+2

Java должен быть виртуальная машина независимый: так это означает, что программа Java всегда выполняется точно так же, независимо от того, как она реализована в виртуальной машине ... –

+0

@CommuSoft Это не так, строго говоря. Вы получаете те же гарантии. Но все, что не распространяется на эти гарантии, свободно меняется. Таким образом, разрешено (на самом деле, рекомендуется) для 64-битной виртуальной машины обрабатывать 'double' и' long' как атомные, но вы не получаете никакой гарантии, что это произойдет. – biziclop

+0

См. Предыдущий ответ, например http://stackoverflow.com/questions/25173208/value-integrity-guarantee-for-concurrent-long-writes-in-64-bit-openjdk-7-8 – JiriS

ответ

2

Это все еще так. JVM спецификация не была изменена на 64-битные виртуальные машины:

https://docs.oracle.com/javase/specs/jls/se7/html/jls-17.html#jls-17.7

+0

Вау! Я думал, что этот вопрос давно ушел. – OldCurmudgeon

+0

@ OldCurmudgeon - это на практике, но не в спецификации. – jtahlborn

+0

@jtahlborn нет необходимости использовать volatile, поскольку эти типы хранятся в 64-битном блоке, хотя spec говорит разные? –

Смежные вопросы