Ваш вопрос спорный из-за его неправильного помещения. Оптимизатор HotSpot для JVM/OpenJDK от Oracle составляет , а не «метод по времени JIT». Одной из его фундаментальных технологий является возможность создания, часто называемая «агрессивной вставкой», поскольку она делает спекулятивные встроенные методы, которые, скорее всего, являются объектом диспетчеризации динамических методов, основанные на профилировании текущего исполнения (и других подсказок). Это даже включает в себя возможность деоптимизации, если поведение во время выполнения программы изменяется, и он больше не выполняет оптимизированный путь кода.
Вложение основополагающее, так как большинство других оптимизаций кода развивают только их реальный потенциал, когда код методов встроен в вызывающий, обеспечивая необходимый контекст.
Таким образом, с помощью JVM HotSpot у вас уже есть многопоточная оптимизирующая среда, использующая известные пути выполнения. Однако эту информацию не нужно собирать так, как описано в разделе «Трассировка». Поскольку этот JVM способен создавать моментальный снимок трассировки стека потока в любое время, он также может заглянуть в трассировку в определенные промежутки времени, имея больший контроль над служебными данными профилирования, чем добавление функции записи к каждому вызову метода. Таким образом, JVM может ограничить получение трасс потоками, фактически потребляющими значительное процессорное время, и будет по сути получать фактическую цепочку вызовов, даже если задействованные методы содержатся в нескольких цепочках вызовов разных потоков.
. NET поддерживает multicore jit. Но это, вообще говоря, не совсем универсальное решение, оно может только когда-либо иметь какой-либо заметный эффект, когда ядра остаются занятыми. Для этого требуется машина времени, она знает, какой метод, вероятно, будет использоваться далее. Решенный в .NET путем записи данных профиля, порядок выполнения методов. Таким образом, в течение * следующего * времени, когда программа запускается, они могут быть перекодированы раньше времени. Машины времени сложны, они говорят вам, что в 2015 году у людей есть вертолеты и летательные аппараты. Ну, навесы оказались правдой. –
@HansPassant - Использование фоновых потоков для JIT-компиляции кода интересно, я не знал, что .NET имеет эту функцию. Однако даже до того, как эта функция была добавлена, пользователи могли создавать несколько потоков, поэтому .NET JIT уже был необходим для компиляции кода на несколько потоков. AFAIK, хотя, .NET все еще JIT-компилирует один метод за раз.Мой вопрос конкретно посвящен [Отслеживание JIT] (https://en.wikipedia.org/wiki/Tracing_just-in-time_compilation): существуют ли какие-либо технические препятствия для JIT трассировки, которая компилируется по нескольким потокам (либо в фоновом режиме, либо в поддержка нескольких пользовательских потоков)? – user200783