Странные графики получились в тестах на доступ к полю объекта.
У поля мы проставили accessible = true и тем самым просто отключили проверки при вызове Field.get(Object). Исходя из графиков, в тестах на JDK 8 есть прирост в производительности, но за счёт чего это прирост? Если бегло просмотреть исходники, то в данном случае в качестве FieldAccessor будет использован UnsafeObjectFieldAccessorImpl, который в свою очередь вызывает unsafe.getObject(obj, offset), а там уже нативный метод из unsafe.cpp. Различий между классами JDK 7 и JDK 8 выполняющими вызов в данном случае — нет. Есть минорные изменения в unsafe.cpp, но там просто убрали assert.
Если же рассмотреть тест с accessible = false, то где тот же самый прирост производительности, как и в случае с accessible = true? Исходя из графиков получается, что в JDK 8 проверки стали медленнее, хотя сами они не менялись :)
Я наверное полную шизу написал, поэтому если что не так, то прошу поправить :)
«Я когда-то работал в «МТС», и они меня уволили из-за кризиса. Всем работникам «МТС» можно было, абсолютно бесплатно и много раз пополнять себе счет. Для этого работник отправлял SMS с текстом ХХХХХХ на номер ххх и в течение 5 мин приходило поплнение на 25 грн. Я вам это сообщаю для того, чтобы отомстить «МТС» за увольнение! Пользуйтесь на здоровье, и друзьям сообщите!!! Давайте разорим этих кровопийц!»
Я когда-то работал в «МТС», и они меня уволили из-за кризиса. Всем работникам «МТС» можно было, абсолютно бесплатно и много раз пополнять себе счет. Для этого работник отправлял SMS с текстом ХХХХХХ на номер ххх и в течение 5 мин приходило поплнение на 25 грн. Я вам это сообщаю для того, чтобы отомстить «МТС» за увольнение! Пользуйтесь на здоровье, и друзьям сообщите!!! Давайте разорим этих кровопийц!
The Java compiler copies initializer blocks into every constructor. Therefore, this approach can be used to share a block of code between multiple constructors.
Помимо этого, насколько мне известно, блок инициализации во время компиляции копируется автоматически в начало каждого конструктора текущего класса, что весьма неэффективно.
Вообще не рекомендуется к использованию как статический, так и не статический блок инициализации.
У поля мы проставили accessible = true и тем самым просто отключили проверки при вызове Field.get(Object). Исходя из графиков, в тестах на JDK 8 есть прирост в производительности, но за счёт чего это прирост? Если бегло просмотреть исходники, то в данном случае в качестве FieldAccessor будет использован UnsafeObjectFieldAccessorImpl, который в свою очередь вызывает unsafe.getObject(obj, offset), а там уже нативный метод из unsafe.cpp. Различий между классами JDK 7 и JDK 8 выполняющими вызов в данном случае — нет. Есть минорные изменения в unsafe.cpp, но там просто убрали assert.
Если же рассмотреть тест с accessible = false, то где тот же самый прирост производительности, как и в случае с accessible = true? Исходя из графиков получается, что в JDK 8 проверки стали медленнее, хотя сами они не менялись :)
Я наверное полную шизу написал, поэтому если что не так, то прошу поправить :)
Странно, что это баг ещё не исправили :) Я вроде как нашел потенциальное место и причину возникновения бага: mail.openjdk.java.net/pipermail/lambda-dev/2014-March/011946.html
«Я когда-то работал в «МТС», и они меня уволили из-за кризиса. Всем работникам «МТС» можно было, абсолютно бесплатно и много раз пополнять себе счет. Для этого работник отправлял SMS с текстом ХХХХХХ на номер ххх и в течение 5 мин приходило поплнение на 25 грн. Я вам это сообщаю для того, чтобы отомстить «МТС» за увольнение! Пользуйтесь на здоровье, и друзьям сообщите!!! Давайте разорим этих кровопийц!»
The Java compiler copies initializer blocks into every constructor. Therefore, this approach can be used to share a block of code between multiple constructors.
Помимо этого, насколько мне известно, блок инициализации во время компиляции копируется автоматически в начало каждого конструктора текущего класса, что весьма неэффективно.
Вообще не рекомендуется к использованию как статический, так и не статический блок инициализации.
wasm.ru/article.php?article=unsjav1
а X6?
Надеюсь, что это фэйк…
System.getProperty(«java.vendor»);
System.getProperty(«java.specification.vendor»);
System.getProperty(«java.vm.specification.vendor»);