Многопоточность (7) - JDK усилия блокировки оптимизации

  Внутри «замок» стратегия оптимизации JDK

смещения 1. Замок

  Замок является означает предвзятый замок для оптимизации работы, основная идея заключается в том: Если поток, чтобы получить блокировку, то замок, чтобы войти в режиме смещения, когда поток снова запрашивают блокировку, не нужна какая-либо операция синхронизации, что позволяет экономить много о операция приложения замка, тем самым улучшая производительность программы. Почти нет блокировок случаев, предвзятых блокировок хороших результатов оптимизации для жесткой конкуренции блокировки случаев, неэффективных, потому что каждый раз, когда другой поток в замке приложения, предвзятым режим утратит, не могут, а не включены предвзятым замок. Использование параметров виртуальной машины Java -XX: + UseBiasedLocking может превратить предвзятую блокировку.

2. Легкий замок

  Если вы, как правило блокировки терпит неудачу, виртуальная машина не сразу приостановить поток, средства будут использованы для оптимизации легкого замка. Это просто указатель на голову объекта в качестве внутренней резьбы, проведение стека блокировки, чтобы определить, имеет ли нить блокировку объекта. Если нить получить легкий замок, вы можете плавно войти в критическую область. Если легкий замок выходит из строя, другой поток захватил блокировку, запрос блокировки для текущего потока расширяется супертяжелая блокировка.

3. спиновые замки

  После расширения замка, чтобы избежать реальной нити висит на уровне операционной системы, виртуальная машина будет сделать последнее усилие - спин-блокировку. Текущий поток временно не может получить блокировку, но когда вы можете получить замок, неизвестно, возможно, через несколько тактов процессора может быть заблокирован. Система будет предполагать в ближайшем будущем нить может получить блокировку, поэтому виртуальная возможность текущего потока, чтобы сделать несколько пустых циклов, после того, как после нескольких циклов, если вы можете получить блокировку, а затем успешно войти в критическую область. Если вы не можете получить блокировку, действительно собирается нить висит уровень операционной системы.

4. Устранение блокировки

  Более тщательная оптимизация блокировки, Java виртуальной машины JIT компилятор в то время, сканируя контекст бега, не может быть никакой блокировки, чтобы удалить общую конкуренцию ресурсов, за счет устранения блокировки, вы можете сохранить запросы времени блокировки бессмысленны. Например, в случае одновременной конкуренции вектора не существует, но использование внутреннего Вектор Синхронизировано запрашивает блокировку, например, следующие коды:

общественного String [] createStrings () { 
     Vector <String> v = новый вектор <String> ();
     для ( INT = 0; я <100; я ++ ) { 
         v.add (Integer.toString (я)); 
     } 
     Вернуть v.toArray ( новый String [0 ]); 
}

  Приведенный выше код Vector, так как только переменной V в функции createStrings, он только простой локальной переменной. Локальные переменные размещаются в стеке нити, принадлежащие к потоку, личные данные, и, следовательно, не могут быть доступны с помощью других потоков. При таких обстоятельствах все внутренней синхронизации вектор блокировки не нужно. Если это виртуальная машина обнаружена, то они будут ненужными для удаления операции блокировки.

  Ключевая технология для анализа включала ликвидацию побега замка. Анализ побега, чтобы увидеть, если один избежит переменных сфер. В настоящем варианте осуществления переменная v явно не избежать функции createStrings (снаружи). Это может быть смелыми и внутренние переменные v удалить операцию блокировки базируется на виртуальной машине. Если createStrings () возвращает не массив, а v сам, то, что переменная v побег из текущей функции, что переменная v, вероятно, будет доступ к другим потокам. Если да, то виртуальная машина не может устранить операцию блокировки в переменной V.

  Побег анализ должен быть выполнен в -server режиме, могут быть использованы -XX: + DoEscapeAnalysis открыть параметры анализа выхода. Используйте -XX: + параметры EliminateLocks можно открыть замок устранен.

рекомендация

отwww.cnblogs.com/wangyongwen/p/11260269.html
рекомендация