Описание тега java-memory-model

Модель памяти Java (JMM) описывает, какие исполнения программы допустимы, путем определения того, какие значения могут наблюдаться при чтении общей переменной в соответствии с определенными правилами.
2 ответа

JMM и нежелательное использование trylock

Нежелательное использование трилока T1 T2 x = 42; while (lock.trylock()) lock.lock(); lock.unlock(); assert(x == 42); В java и C++ модели памяти позволяют x=42 перемещаться после блокировки (1). И поэтому assert может потерпеть неудачу в потоке T2. …
3 ответа

OutOfMemoryError: пространство кучи Java при запуске jruby на консоли rails, но не при использовании всей памяти, определенной -J-Xmx

У меня есть приложение rails 3, использующее jruby 1.7, и я пытаюсь использовать консоль rails в своей локальной среде разработки (OS X 10.8 с jdk 7) в ситуации, которая потребует много памяти. Я запускаю консоль рельсов следующим образом: jruby -J-…
3 ответа

Что гарантирует безопасность потоков в Guava ImmutableList?

Javadoc в ImmutableList Гуавы говорит, что у класса есть свойства ImmutableCollection Guava, одним из которых является безопасность потоков: Поток безопасности. Доступ к этой коллекции безопасен одновременно из нескольких потоков. Но посмотрите на т…
07 ноя '18 в 22:29
1 ответ

Java 8 Распределение памяти

Давайте предположим, что у меня есть JDK/JRE 8, также я добавил JAVA_OPTS= -Xmx8G -Xms1G. Я указал без каких-либо других параметров (java -jar 1.jar; java -jar 2.jar) 2 простых банок. Так что теперь у меня есть два процесса Java. 1) Выполнены ли они…
2 ответа

Последовательное непротиворечивое объяснение

Я смотрю видео с конференции java jpoint. У меня вопрос о следующем слайде из доклада Aleksey Shipilev: Извините за не английский на слайде. На самом деле автор говорит, что невозможно, чтобы набор переменных был r1 = 1 (Y) r2 = 0 (x) r3 = 1 (x) r4 …
3 ответа

В чем разница между энергозависимым и синхронизированным?

Я пытаюсь увидеть как volatile работает здесь. Если я заявляю cc как volatileЯ получаю вывод ниже. Я знаю, что результат выполнения потока меняется время от времени, но я где-то читал, что volatile такой же как synchronized, так почему я получаю это…
1 ответ

Является ли JAXB безопасным для одновременного доступа (как это делается)

Я предполагаю, что JAXB вызывает конструктор с нулевым аргументом, а затем начинает заполнять энергонезависимые поля и добавляет элементы в списки. В моем собственном коде: Сразу после этого (unmarshalling) сгенерированные bean-компоненты депортирую…
2 ответа

Караф из-за ошибки памяти

Я использую Karaf 2.3.0 для развертывания моих комплектов активатора OSGi и выставления моих удаленных сервисов как включенных отдыха. Thigs работают нормально. Только однажды я получил ошибку нехватки памяти в журналах karaf (прикрепление журналов)…
2 ответа

Многопоточное состояние Java в общем массиве символов

Предположим, у меня есть следующее: char[] shared = new char[]{'a', 'b'}; ExecutorService exec = Executors.newCachedThreadPool(); Future<?> f1 = exec.submit(() -> shared[0] = 'A'); Future<?> f2 = exec.submit(() -> shared[1] = 'B');…
30 май '18 в 04:55
1 ответ

Модель памяти Java 7 такая же, как у JSR-133?

Я перечитывал спецификацию JSR-133, когда мне стало интересно, произошли ли какие-либо изменения в выпуске Java 7. То есть, если 133 был устаревшим или все еще действительным. Я не нашел в Google ничего об изменениях в модели памяти для Java 7, но я…
02 янв '12 в 20:46
3 ответа

Окончательная и нестабильная гарантия относительно безопасной публикации объектов

Из книги Java параллелизм на практике: Чтобы безопасно опубликовать объект, и ссылка на объект, и состояние объекта должны быть видны другим потокам одновременно. Правильно сконструированный объект может быть безопасно опубликован: Инициализация ссы…
09 фев '13 в 17:03
1 ответ

StoreLoad Память Барьер

Я не могу понять определение барьера StoreLoad в Cooperbook JSR-133. store1; StoreLoad; LOAd2 Барьеры StoreLoad защищают от последующей загрузки неправильно, используя значение данных Store1, а не от более недавнего хранилища в то же место, выполнен…
2 ответа

Как узнать, где в памяти находится точный молодой / старый ген?

Недавно мне удалось получить адрес объекта с помощью класса sun.misc.Unsafe. И теперь я пытаюсь программно найти фактическое поколение, где находится мой объект. Для этого я хочу знать начальную и конечную точки каждого поколения. Если Java (Oracle …
02 июн '15 в 15:13
2 ответа

Локальный класс потока Java

Есть ли способ сообщить JVM, что класс используется исключительно из одного потока => JVM разрешено оптимизировать операции с полями (загружать / хранить) действий перекрестной синхронизации?
12 янв '15 в 12:43
2 ответа

Отношение "происходит до" в модели памяти Java

Что касается JLS ch17 Threads and Locks, в нем говорится: "если одно действие происходит до другого, то первое видно и упорядочено до второго"; Я думаю: (1) Что на самом деле означает сказать "заказано раньше"? Потому что даже если action_a произойд…
6 ответов

Синхронизация модели памяти Java: как вызвать ошибку видимости данных?

"Параллелизм Java на практике" приводит следующий пример небезопасного класса, который из-за характера модели памяти Java может работать вечно или вывести 0. Проблема, которую этот класс пытается продемонстрировать, заключается в том, что переменные…
1 ответ

Что на самом деле накладные расходы памяти в Java?

Я прочитал, что является "потреблением памяти объекта в java" и " что является объемом памяти" объекта в java. Но я все еще в замешательстве. Что такое накладные расходы памяти? это padding? Что такое JVM со сжатыми указателями? это reference?? Если…
0 ответов

Ява летучих и строительных объектов

Мне нужен совет модели памяти. Как мы знаем volatile write и последующее volatile read есть отношения до того. Также мы знаем, что конструкторы не синхронизированы и между возвратами конструкторов и использованием инициализации полей нет никаких иск…
30 сен '18 в 18:28
3 ответа

Согласованность памяти Java LockSupport

Java 6 API вопрос. Звонит LockSupport.unpark(thread) иметь отношение до случившегося к возвращению из LockSupport.park в только что непаренной ветке? Я сильно подозреваю, что ответ - да, но Javadoc, кажется, не упоминает об этом явно.
2 ответа

Java - энергозависимая ссылка на изменяемый объект - обновления полей объекта будут видны всем потокам

... без дополнительной синхронизации? Класс Tree ниже предназначен для доступа к нескольким потокам (он является одноэлементным, но не реализован через перечисление) class Tree { private volatile Node root; Tree() { root = new Node(); // the threads…