В java-8
источниках мы можем найти довольно хитрый способ оптимизации JIT внутри класса Class
:оптимизации JIT предотвращающие методы
/*
* Private constructor. Only the Java Virtual Machine creates Class objects.
* This constructor is not used and prevents the default constructor being
* generated.
*/
private Class(ClassLoader loader) {
// Initialize final field for classLoader. The initialization value of non-null
// prevents future JIT optimizations from assuming this final field is null.
classLoader = loader;
}
Таким образом, этот конструктор никогда не вызывается, но JIT будет «надули» на этот трюк.
Мой вопрос: может ли быть реализован несколько иначе, скажем
private Class() {
classLoader = (ClassLoader)(new Object());
}
Это абсолютно бессмысленны логики, но это имеет значение, если конструктор никогда не был вызван?
Будет ли такой трюк также предотвращать JIT от этой оптимизации?
Я не могу представить, что он используется в чем-то меньшем, чем собственный код, в частности потому, что он не является конструктором с безопасным типом. – Makoto
Поле вашего класса 'classLoader' Вы имеете в виду? – Andremoniy
Нет, я имею в виду этот частный конструктор.Я не могу использовать его в какой-либо библиотеке Java, и я сомневаюсь, что наши смертные захотят использовать его, поскольку он не является типом «класса». Помните: 'Класс' определяется как' Класс '. –
Makoto