Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
Дмитрий Андрушко, инструктор Академии Oracle по Java-технологиям – о том, как подготовиться к первой ступени в непростой системе сертификации Oracle (Oracle Certified Associate, Java SE 7 Programmer), стать успешным Java-разработчиком и работать в крупнейших банках и корпорациях, если вы только начинаете знакомство с этим языком программирования.
Готовимся к Java SE 7 Programmer: от новичка до профессионала за 45 днейSkillFactory
Дмитрий Андрушко, инструктор Академии Oracle по Java-технологиям – о том, как подготовиться к первой ступени в непростой системе сертификации Oracle (Oracle Certified Associate, Java SE 7 Programmer), стать успешным Java-разработчиком и работать в крупнейших банках и корпорациях, если вы только начинаете знакомство с этим языком программирования.
До выхода Feature Complete версии OpenJDK 9 EA остался месяц. Самое время посмотреть, что ждет нас в следующей версии Java. Для начала рассмотрим процесс того, как идеи становятся JEP-ами, а потом становятся частью стандарта языка Java. Потом посмотрим на список из четрех десятков фич, разберем наименее тривилаьные из них на примерах: jshell, jmh, unified jvm logging и, конечно же, модулярность.
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиGonchik Tsymzhitov
В августе Яндекс.Деньги провели митап Jiramania. На нем разработчики и администраторы рассказали про отмычки и ноу-хау по работе с Jira.
Помимо неспешных бесед за кофе и круассанами, Гончик Цымжитов из ITIVITI поделился перцовыми пластырями от боли обновления Jira. После чего на сцену вышел Вадим Гаузяк из СберТеха с результатами своего исследования дедлока в agile-плагине Jira 7.
Но хватит интриг — под катом вы найдете оба доклада.
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...Oleg Chirukhin
GraalVM is a universal virtual machine for running applications written in JVM-based languages (Java, Scala, Clojure, Kotlin), JavaScript, Python, Ruby, R, and LLVM-based languages such as C and C++.
Quite often research projects look like something out of the world, something you won’t probably use in real life. Graal changes the picture: it took the stage out of the blue, and not as a newbie, but as a mature competitor. In this talk, we’ll look at what Graal consists of and what practical use you can get from it right now.
We’ll talk about GraalVM components:
Graal Compiler – an optimizing compiler that supports both dynamic and static compilation and can integrate with the Java HotSpot VM or run standalone. We’ll see how to run existing applications, and what benefit (in numbers) it can bring.
Substrate VM — a framework for ahead-of-time (AOT) compilation into executable images or shared objects. It sounds like a most radical and cheating optimization because it works the way no one else can (under closed-world assumption).
Truffle – language implementation framework for creating languages and instrumentations for GraalVM. Language design is a very complex field, so here we’ll focus on existing languages from GraalVM distribution.
Escaping The Jar hell with Jigsaw LayersNikita Lipsky
Jigsaw modules are often criticized for the lack of versioning that exists in alternative module systems for Java, such as OSGi. One of the main purposes of versioning is to solve the so called Jar Hell problem that arises when your application depends on two different versions of the same library. While Jigsaw is able to detect this conflicting situation, it won’t allow you to load both versions that are placed on the module path. However, it is not always possible to eliminate all version conflicts from your application, because other versions of the same libraries can come to your application indirectly via dependencies that you do not control. Fortunately, there is a native solution for the problem in Jigsaw called Layers. In this session, I will show what problems Jigsaw could have introduced if it had explicit versions for modules, and how Jigsaw Layers in conjunction with Jigsaw Services help to solve the Jar Hell problem safely.
JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2...Nikita Lipsky
Java has been constantly criticized for poor performance ever since its inception, but not as much in recent years. Thanks to optimizing dynamic native code compilers, Java performance today is very close to the performance of low-level languages such as C/C++. Along with dynamic compilers, static compilers for Java have been evolving as well, so there is still no clear winner between these two approaches. It is not a surprise that an AOT compiler is finally going to appear in Java 9 via JEP-295. This session’s speaker would like to dispel common myths about the old dispute over whether dynamic or static compilation is better, show that both approaches have their strengths and weaknesses, and explain why the future is the hybrid approach.
More Related Content
Similar to Занимательные истории из жизни технической поддержки JVM
До выхода Feature Complete версии OpenJDK 9 EA остался месяц. Самое время посмотреть, что ждет нас в следующей версии Java. Для начала рассмотрим процесс того, как идеи становятся JEP-ами, а потом становятся частью стандарта языка Java. Потом посмотрим на список из четрех десятков фич, разберем наименее тривилаьные из них на примерах: jshell, jmh, unified jvm logging и, конечно же, модулярность.
Доклады с прошедшей JiraMania: про обновления, зависимости и дедлокиGonchik Tsymzhitov
В августе Яндекс.Деньги провели митап Jiramania. На нем разработчики и администраторы рассказали про отмычки и ноу-хау по работе с Jira.
Помимо неспешных бесед за кофе и круассанами, Гончик Цымжитов из ITIVITI поделился перцовыми пластырями от боли обновления Jira. После чего на сцену вышел Вадим Гаузяк из СберТеха с результатами своего исследования дедлока в agile-плагине Jira 7.
Но хватит интриг — под катом вы найдете оба доклада.
Graal, Truffle, SubstrateVM and other perks: what are those and why do you ne...Oleg Chirukhin
GraalVM is a universal virtual machine for running applications written in JVM-based languages (Java, Scala, Clojure, Kotlin), JavaScript, Python, Ruby, R, and LLVM-based languages such as C and C++.
Quite often research projects look like something out of the world, something you won’t probably use in real life. Graal changes the picture: it took the stage out of the blue, and not as a newbie, but as a mature competitor. In this talk, we’ll look at what Graal consists of and what practical use you can get from it right now.
We’ll talk about GraalVM components:
Graal Compiler – an optimizing compiler that supports both dynamic and static compilation and can integrate with the Java HotSpot VM or run standalone. We’ll see how to run existing applications, and what benefit (in numbers) it can bring.
Substrate VM — a framework for ahead-of-time (AOT) compilation into executable images or shared objects. It sounds like a most radical and cheating optimization because it works the way no one else can (under closed-world assumption).
Truffle – language implementation framework for creating languages and instrumentations for GraalVM. Language design is a very complex field, so here we’ll focus on existing languages from GraalVM distribution.
Escaping The Jar hell with Jigsaw LayersNikita Lipsky
Jigsaw modules are often criticized for the lack of versioning that exists in alternative module systems for Java, such as OSGi. One of the main purposes of versioning is to solve the so called Jar Hell problem that arises when your application depends on two different versions of the same library. While Jigsaw is able to detect this conflicting situation, it won’t allow you to load both versions that are placed on the module path. However, it is not always possible to eliminate all version conflicts from your application, because other versions of the same libraries can come to your application indirectly via dependencies that you do not control. Fortunately, there is a native solution for the problem in Jigsaw called Layers. In this session, I will show what problems Jigsaw could have introduced if it had explicit versions for modules, and how Jigsaw Layers in conjunction with Jigsaw Services help to solve the Jar Hell problem safely.
JIT Versus AOT: Unity And Conflict of Dynamic and Static Compilers (JavaOne 2...Nikita Lipsky
Java has been constantly criticized for poor performance ever since its inception, but not as much in recent years. Thanks to optimizing dynamic native code compilers, Java performance today is very close to the performance of low-level languages such as C/C++. Along with dynamic compilers, static compilers for Java have been evolving as well, so there is still no clear winner between these two approaches. It is not a surprise that an AOT compiler is finally going to appear in Java 9 via JEP-295. This session’s speaker would like to dispel common myths about the old dispute over whether dynamic or static compilation is better, show that both approaches have their strengths and weaknesses, and explain why the future is the hybrid approach.
Java 9 Modules: The Duke Yet Lives That OSGi Shall DeposeNikita Lipsky
Modules appear in Java 9 at last, but why? After all, OSGi has been around for more than 15 years and serves as the foundation of many desktop, server, and IoT applications. Its authors state that OSGi solves various dependency management problems in the most powerful way - at run time.
In this session, we will explore the problems that OSGi tries to solve, understand its approach, and identify its failures. Then we will figure out which of those problems the authors of Jigsaw ignored (and why), and which ones they solved (and how). Finally, we will talk about the challenges that Jigsaw brings with itself to the Java ecosystem and what we the developers have to do about them.
https://2017.javazone.no/program/83eb9ed50ba74946ad418a3abea0467a
В Java 9 с неизбежностью появятся модули. Кого-то это мало волнует, кого-то пугает, кто-то искренне недоумевает: зачем, ведь у нас уже больше 15 лет есть OSGi, который решает ровно те же проблемы, что и модули? Здесь мы попробуем разобраться, какие проблемы пытается решить OSGi, как он их решает и решает ли в действительности. Затем посмотрим, какие проблемы, которые пытается решить OSGi, Jigsaw совсем не решает и почему, а также какие проблемы решает и как. Ну и в конце, какие проблемы Jigsaw при этом привносит в экосистему Java и что с этим делать.
Языку Java присущ встроенный динамизм.
Reflection, динамическая загрузка — это то, без чего современные Java приложения просто не могут существовать, поэтому существует мнение, что AOT (статическая) компиляция вряд ли применима к Java в общем случае, а там где применима не может составить конкуренцию JIT (динамической) компиляции в плане прозводительности.
В этом докладе показывается почему это не (совсем) так, при этом рассматриваются случаи,
где у статических компиляторов действительно есть определенные сложности в обработке динамической семантики Java.
Также упоминается, где статическая компиляции для Java может быть полезна.
JIT vs. AOT: Unity And Conflict of Dynamic and Static Compilers Nikita Lipsky
Java had been constantly criticized for poor performance ever since its inception, but not so much in recent years. Thanks to optimizing dynamic native code compilers, Java performance today is very close to the performance of low level languages such as C/C++, and is even better on some classes of applications. Along with dynamic compilers, static compilers for Java have been evolving as well, so there is still no clear winner among these two approaches. It should then come as no surprise that an AOT compiler is finally going to appear even in the HotSpot JVM and OpenJDK via JEP-295, which is officially included in Java 9.
Her, I would like to dispel common myths around the old dispute on whether dynamic or static compilation is better, show that both approaches have their strengths and weaknesses, and explain why the future is the hybrid approach.
Верификация Java байткода: когда, как, а может отключить?Nikita Lipsky
Сегодня Java разработчики все чаще используют библиотеки для порождения Java байт-кода в рантайме. Делается это для эффективной реализации различных трюков, которые сложно или невозможно выразить на языке Javа. Когда используется Java, компилятор javac гарантирует, что на выходе получится корректный Java байт-код. Но, спускаясь на уровень непосредственно байт-кода, часто нужно самостоятельно следить за его корректностью. Иначе при загрузке порожденных классов на выходе будет j.l.VerifyError, потому что JVM посредством верификатора Java байт-кода строго следит за корректностью байт-кода, который она загружает. Таким образом, порождая байт-код, недостаточно просто знать семантику байт-кодных инструкций — нужно также знать, как работает Java byte-code верификатор, какой байт-код он считает корректным, а какой нет.
В этом докладе мы разберемся, какую миссию в JVM несет верификатор байт-кода, когда и как он работает, может ли повлиять на производительность вашего приложения и почему опасно его отключать.
Java SE 8 has brought lambdas, default methods, type annotations, compact profiles, etc. As a result, the Java SE platform specification was changed to reflect new features.
The session shows how the new Java 8 features have been implemented in Excelsior JET JVM, written from scratch, very different from the Oracle HotSpot JVM, but compatible with the Java SE specification.
As a result, an attendee will refresh his/her memory regarding new Java 8 features, will learn how they affected the JVM specification, how the lambda expressions are translated into Java bytecode and how they can be optimized at the JVM level.
Ahead-Of-Time Compilation of Java ApplicationsNikita Lipsky
Geekout 2016 presentation.
Ahead-of-time (AOT) native compilation has been available for .NET for quite some time, whereas Java SE, while being older than .NET, still does not have a standard AOT compiler. Some people ask why, some people think that it could only work for certain limited types of Java applications, some people think that it is not needed.
The truth, however, is that a Java AOT compiler has been available for over a decade, as part of a compliant Java SE implementation called Excelsior JET, and it proved to be useful for many organizations around the world. In this session, I would like to dispel the common myths about Java AOT compilation and show where it has advantages over JIT compilation from the technical point of view.
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionNikita Lipsky
Говоря о Java, мы подразумеваем как минимум две вещи: JVM (виртуальную Java-машину) и Java-байткод, который исполняется на этой машине.
Внутреннее устройство JVM непростое, но очень важно понимать, из каких частей она состоит, какая часть за что отвечает и как это все вместе работает хотя бы в самых общих чертах. Эти знания помогут вам в понимании того, как работает ваша программа и как можно улучшить ее работу.
В этом докладе мы не будем лезть в кишки какой-то конкретной реализации JVM, однако мы покажем где у JVM кишки расположены, а также где находятся и для чего служат ее печень, сердце, почки, мозг и другие органы.
Доклад на конференциях JPoint 2016, JBreak 2016
Abstract: В Java SE 8 были добавлены лямбда-выражения, дефолтные методы, типовые аннотации, компактные профили и т.п., что привело к изменениям в спецификации Java SE платформы.
В этом докладе мы рассмотрим, как новые возможности, добавленные в Java 8, были реализованы в Excelsior JET JVM, полностью написанной с нуля, совершенно непохожей на Oracle HotSpot, но при этом совместимой со спецификацией Java SE.
В итоге, слушатель освежит в памяти, что появилось в Java 8, как это повлияло на спецификацию JVM, во что превращаются лямбда-выражения в Java байт-коде, как их можно статически оптимизировать, а также получит некоторое представление о внутреннем устройстве еще одной JVM.
10. Что такое Excelsior JET?
Полная реализация Java SE
–
c 2005 года cертифицирована как Java Compatible
AOT compiler + Java Runtime
– смешанная компиляция: AOT + JIT
– поддержка нестандартных загрузчиков классов в AOT режиме (для Eclipse RCP,
Tomcat)
Toolkit
– Startup Optimizer
– Deployment
10
12. Служба поддержки Excelsior
На связи всегда ключевые инженеры команды разработки
Пользователи, которые только пробуют продукт, обслуживаются
также как купившие его
"If anyone would have a support like that, there would be much less
problems."
Christian Kellner of Technotrans AG
12
18. Письмо в техподдержку:
Клиент: Под Excelsior JET не работает
приложение, при этом оно работает на
HotSpot.
Саппорт: Можете прислать
приложение или пример?
18
19. Письмо в техподдержку:
Клиент: Под Excelsior JET не работает
приложение, при этом оно работает на
HotSpot.
Саппорт: Можете прислать
приложение или пример?
Клиент: ...Хм.. Мне надо
посоветоваться с начальством!
19
21. И действительно не работает…
Приложение бросает исключение
com.thoughtworks.xstream.converters.reflection.ObjectAccessException:
Invalid final field xmltest.Main.theValue
У нас проблемы с Reflection?
У нас проблемы с проверками доступа?
21
22. Разбираемся и вот …
Какой интересный код!
private boolean canUseSun14ReflectionProvider(){
return (isSun() || isApple() || isHPUX() || isIBM() ||
isBlackdown()) && is14() &&
loadClass("sun.misc.Unsafe") != null;
}
22
23. Разбираемся и вот …
Какой интересный код!
private boolean canUseSun14ReflectionProvider(){
return (isSun() || isApple() || isHPUX() || isIBM() ||
isBlackdown()) && is14() &&
loadClass("sun.misc.Unsafe") != null;
}
В этом списке нет Excelsior
23
24. Разбираемся и вот …
Какой интересный код!
private boolean canUseSun14ReflectionProvider(){
return (isSun() || isApple() || isHPUX() || isIBM() ||
isBlackdown()) && is14() &&
loadClass("sun.misc.Unsafe") != null;
}
В этом списке нет Excelsior и … Oracle.
24
26. Как мы решили проблему
Системное свойство java.vm.vendor теперь выдает …
Sun-Oracle Java SE licensee Excelsior LLC
26
27. Как мы решили проблему
Системное свойство java.vm.vendor теперь выдает …
Sun-Oracle Java SE licensee Excelsior LLC
Плохая (хорошая) новость: приложения использующие старую
версию XStream не работают на Java 7 , потому что java.vm.vendor
в HotSpot для Java 7 ….
“Oracle Corporation”
27
34. Причина: код JBoss ожидал, что
порядок конструкторов , который
возвращает
Class.getDeclaredConstructors()
будет определенным
34
35. Но:
Java спецификация для методов
getDeclaredFields,
getDeclaredMethods,
getDeclaredContructors
гласит:
“
The elements in the array returned
are not sorted and are not in any
particular order.
“
35
36. Но давайте попробуем угадать порядок
Рассмотрим пример:
import java.lang.reflect.*;
class Test{
Test()
{}
Test(Object o) {}
Test(String s) {}
public static void main(String args[]){
for (Constructor c: Test.class.getDeclaredConstructors())
System.out.println(c);
}
}
36
38. Добавляем методы:
void dont() {}
void rely() {}
void on
() {}
void it
() {}
И программа теперь выводит:
Test(java.lang.String)
Test(java.lang.Object)
Test()
38
39. Как насчет порядка полей?
Популярная библиотека JNA, по умолчанию рассчитывает, что порядок полей,
который возвращает метод getDeclaredFields будет тем же, что и в исходном коде.
Что делать, если JVM возвращает его в другом порядке:
Начиная с JNA 3.0 можно переопределить метод
setFieldOrder
В котором задать порядок полей
39
42. Что еще может не работать?
Может не быть <JRE>/bin/java (и других файлов внутри JRE)
Может не быть класс файлов для вашего приложения во время
исполнения
– Может не работать getProtectionDomain().getCodeSource()
Сообщения стандартных исключений могут отличаться на разных
JVM
…
42
43. Что еще может не работать?
Может не быть <JRE>/bin/java (и других файлов внутри JRE)
Может не быть класс файлов для вашего приложения во время
исполнения
– Может не работать getProtectionDomain().getCodeSource()
Сообщения стандартных исключений могут отличаться на разных
JVM
Горячая новость! В Java 9 закроют доступ к пакету sun!
43
45. Типичная проблема
public static boolean changed = false;
Thread 1
Thread 2
while (!changed) {
…
sleep(1000);
}
…
changed = true;
…
Что не так с этой программой?
“Thread 1”останавливается?
45
46. Решение
public static volatile boolean changed = false;
Thread 1
Thread 2
while (!changed) {
…
sleep(1000);
}
…
changed = true;
…
И помните про JMM!
46
48. Пример
SpecJVM 2008 mpegaudio
package javazoom.jl.decoder;
class LayerIIIDecoder {
private static int reorder_table[][];
public LayerIIIDecoder() {
if(reorder_table == null)
{
reorder_table = new int[9][];
for(int j = 0; j < 9; j++)
reorder_table[j] = reorder(sfBandIndex[j].s);
}
}
…
}
48
49. Пример
SpecJVM 2008 mpegaudio
Далее,
В методе reorder(float af[][], int i, int j) случается доступ
int i4 = reorder_table[sfreq][l1];
и, как следствие, NPE (если в это время другой поток все еще продолжает инициализировать
reorder_table).
Stack trace:
java.lang.NullPointerException
at javazoom.jl.decoder.LayerIIIDecoder.reorder(Unknown Source)
at javazoom.jl.decoder.LayerIIIDecoder.decode(Unknown Source)
at javazoom.jl.decoder.LayerIIIDecoder.decodeFrame(Unknown Source)
at javazoom.jl.decoder.Decoder.<unknown>(Unknown Source)
49
50. Почему не проявляется на HotSpot?
По чистой случайности!
на старте код как правило интерпретируется и многие гонки и
тупики могут не проявить себя в “медленном" исполнении.
С опциями -server -Xcomp –Xbatch проявляется
50
68. Другие проблемы в OS, hardware
Win API вызов GetThreadContext на WOW64 может возвращать
устаревший (не актуальный) контекст
https://connect.microsoft.com/VisualStudio/feedback/details/621594/getthreadcontext-may-return-stale-contents-from-previous-call-out-to-long-mode
Этот вызов используется GC при сканировании стэка
В результате, могут удаляться живые объекты доступные со стэка
А бывают еще проблемы в “железе” …
68
70. Как разломать JVM?
Очень просто
public class JVMCrash {
public static native void main(String[] args);
static {
System.loadLibrary("JVMCrash");
}
}
JNIEXPORT void JNICALL Java_JVMCrash_main(JNIEnv * env, jclass class, jobjectArray args)
{
printf("%sn“, ((char *)args)[0]);
}
70
71. Кто найдет больше ошибок?
JNIEXPORT void JNICALL Java_JVMCrash_main(JNIEnv * env, jclass class, jobjectArray args)
{
printf("%sn“,((char *)args)[0]);
}
71
72. Запускаем и получаем …
#
# A fatal error has been detected by the Java Runtime Environment:
#
# EXCEPTION_ACCESS_VIOLATION (0xc0000005) at pc=0x7727d193, pid=2852, tid=3572
#
# JRE version: 6.0_29-b11
# Java VM: Java HotSpot(TM) Client VM (20.4-b02 mixed mode, sharing windows-x86 )
# Problematic frame:
# C [msvcrt.dll+0xd193]
#
# An error report file with more information is saved as:
# C:workkitsupporttaleshs_err_pid2852.log
#
#
If you would like to submit a bug report, please visit:
# http://java.sun.com/webapps/bugreport/crash.jsp
# The crash happened outside the Java Virtual Machine in native code.
# See problematic frame for where to report the bug.
72
75. Письмо в техподдержку:
Клиент: Помогите, у нас сломался
принтер, тираж горит!!!
Саппорт: А мы здесь причем?
Клиент: Принтер сказал обращаться к
вам!
75
77. Звонок не нашему клиенту:
Саппорт: Мы нашли адреса
технического отдела производителей
ваших принтеров, они должны вам
помочь!
Не наш клиент: Спасибо за помощь!
77
78. Типичные ошибки при программировании с
использованием JNI
Общие ошибки при программировании на С (разыменование null, доступ к
освобожденной памяти, запись по неверному адресу, и т.д.)
Неверное использование JNI
– вызов CallObjectMethod, когда метод возвращает int и подобные ошибки
– NewGlobalRef без DeleteGlobalRef или использование объекта после DeleteGlobalRef
– Утечки LocalRef (многие JNI функции возвращают LocalRef, требуется ручное удаление в
случаях долгой жизни нативного фрейма)
– GetPrimitiveArrayCritical без ReleasePrimitiveArrayCritical
– AttachThread без DetachThread
Полезный совет: запускайте приложение с –Xcheck:jni
78
79. Проблемы с JNI только в вашем коде?
Нет конечно!
В некоторых популярных библиотеках есть баги в JNI коде
В стандартной реализации Java от Oracle они тоже есть!
79
80. "Черный квадрат" Малевича:
Клиент: После компиляции Excelsior
JET при перетаскивании окна, окно не
перерисовывается. Пример
прикреплен!
Саппорт: Спасибо разберемся!
80
81. Проблема в коде библиотеки awt.dll:
j2sesrcwindowsnativesunjava2dwindowsGDIBlitLoops.cpp
При перерисовке идет доступ (на чтение) мимо выделенной
области битмапа.
В HotSpot там всегда есть память.
В Excelsior JET, может не быть памяти (страница отключена)
Win API не ломается, но и ничего не рисует
81
111. Типичные проблемы с памятью в Java
Утечки памяти
Неожиданные выбросы OutOfMemoryError
Чрезмерное потребление памяти
Долгие паузы в GC
И многое другое
111
113. Письмо в техподдержку:
Клиент: Мое приложение замедляется
на 8 ядерной машине при запуске на
Excelsior JET
Саппорт: Есть пример?
113
114. Письмо в техподдержку:
Клиент: Мое приложение замедляется
на 8 ядерной машине при запуске на
Excelsior JET
Саппорт: Есть пример?
Клиент: Да – держите!
Саппорт: Спасибо разберемся!
114
115. Оказалось, что проблема в управлении памятью
Выделение объектов определенного размера было недостаточно
хорошо распараллелено, так как считалось, что таких объектов в
программе должно быть мало
Но это было не так для присланного примера!
115
119. Резюмэ
Следуйте Java спецификации (в том числе JMM)
Пробуйте запускать ваше приложения на разных JVM, чтобы заранее
обнаруживать проблемы, в том числе связанные с многопоточностью
На C и JNI надо писать очень аккуратно
7 раз проверьте, что проблема не на вашей стороне, прежде чем писать в
службу поддержки
После чего обязательно пишите – ваши случаи помогают разработчикам
улучшить JVM
119