Есть ли в Java директива компилятора для встраивания метода? - PullRequest
3 голосов
/ 03 августа 2011

Имеет ли Java, как и другие языки, директиву для встроенного метода во время компиляции или во время JIT?

У нас есть много методов, которые вызывают только супер метод. Это дает понять, что не было забыто переопределить метод.

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

Но компилятор должен встроить этот метод.

Ответы [ 4 ]

5 голосов
/ 03 августа 2011

Компилятор Java выполняет очень мало оптимизаций во время компиляции.

Вместо этого JIT выполняет большую часть оптимизаций во время выполнения в зависимости от того, как на самом деле используется приложение. Он может содержать встроенные методы, даже до двух «виртуальных» методов.

1 голос
/ 03 августа 2011

Я не думаю, что это может быть встроено во время компиляции в Java, поскольку все функции в Java являются виртуальными, и вы не знаете до времени выполнения, какой метод фактически вызывается, это может быть метод подкласса.

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

1 голос
/ 03 августа 2011

Нет, ява не делает.Это не имеет смысла в Java.

Что касается обсуждения hashCode и equals, некоторые IDE и средства проверки стиля будут предупреждать вас об ошибках, подобных этой, но я не вижу, что это как-то связано с 'встроенный.

0 голосов
/ 03 августа 2011

Пометка метода как final дает компилятору JIT большую подсказку о том, как он может обрабатывать этот метод. Вы не можете заставить его встроить метод, но предоставление JIT более явной информации может только помочь.

...