Форум
Java
Тема
Как правильно задавать вопросы
B
I
abc
U
X
3
X
3
H1
H2
H3
H4
H5
H6
Asm
C/C++
C#
Erlang
Haskell
IDL
Java
Lisp
MSIL
Nemerle
ObjC
OCaml
Pascal
Perl
PHP
Prolog
Python
Ruby
Rust
SQL
VB
Здравствуйте, maxkar, Вы писали: M>Здравствуйте, Pavel Dvorkin, Вы писали: PD>>Здравствуйте, E.K., Вы писали: EK>>>1) вы упорно пытаетесь все свести к модели C++ хотя и языки и система поддержки многопоточности и платформы разные. PD>>Это не совсем так. Модели С++ не существует, есть модель подлежащей платформы. Нет никаких различий, писать на С++ или на ассемблере или Delphi (нативной). Меня как раз интересовало, как сопрягается Ява с подлежащей платформой, то есть ОС и работой процессора. M>Есть разные модели! Есть. Java Memory Model может быть различными способами сопряжена с платформой. Например, volatile не гарантирует сброс кэша. В частности, если вирутальная машина видит, что ссылки на объект никогда не размещались в куче (а только на стеке), то она может пропускать операции "сбороса/чтения" кэша. Называется lock elision (в гугле информация есть). В 6-ке эта техника вроде бы не реализована, но в будущих версиях вполне может быть введена без какого-либо уведомления. Отсюда и требование синхронизации на одном и том же объекте. >>>Программы написанные на Java исполняются на виртуальной машине а не голом железе - о каких ядрах и проч. тут может идти речь? PD>>Работа кеша ядер не зависит от того, есть тут Java VM или .NET VM или что-то иное. M>Работа ядер не зависит. А вот модель языка может быть по-разному отображена на операции с кэшем (сброс кэша). Кроме того, Java подразумевает работу на нескольких архитектурах. Например, на NUMA, где понятия "общей памяти" может не быть как таковой. В этом случае обращение к volatile (и любое другое Happens-before отношение) - загрузка выгрузка только изменившихся страниц. Или "синхронизация" рабочей памяти с тем процессором, который в последний раз приобретал блокировку. Отсюда опять требование синхронизации на одном и том же объекте. M>И вообще, модель с "записью в общую память" не очень хорошая. Она была правильна до версии 1.4 включительно (и в ее терминах формулировалась модель памяти в JLS 2-nd edition). В третьей версии от понятия "общая память" полностью отказались и перевели все на happens-before. Сама по себе "общая память" гарантирует "монотонность" значений (если мы увидели какое-то значение, мы больше не можем увидеть более старое). Happens-before - не гарантирует (естественно, при остутствии синхронизации). Обсуждали [url=http://www.rsdn.ru/forum/java/4000136.flat.1.aspx]здесь[/url] PD>>Это она может сделать с памятью, которую она сама отведет для потока внутри себя. Над кешем процессора она не властна. M>Ну да. Но ведь вы будете видеть как раз то, что виртуальная машина сделала с памятью потока! А кэши процессора вы видите только "косвенно", как особенность реализации JMM на конкретной платформе.
Теги:
Введите теги разделенные пробелами. Обрамляйте в кавычки словосочетания с пробелами внутри, например:
"Visual Studio" .NET
Имя, пароль:
Загрузить
Нравится наш сайт?
Помогите его развитию!
Отключить смайлики
Получать ответы по e-mail
Проверить правописание
Параметры проверки …