Связанный вами API (https://docs.oracle.com/javase/7/docs/api/) — это, по сути, обычная библиотека классов. Когда вы установили JDK, появится файл src.zip
или src.jar
, в зависимости от версии, содержащий простой исходный код Java большей части этой библиотеки. Во всех версиях до Java 8 включительно скомпилированные классы API предоставляются в виде обычных файлов jar
, причем большинство классов API находится в формате rt.jar
. Начиная с Java 9 используются новые файлы модулей, однако большая часть API реализована в виде обычного кода Java.
Вы даже можете просмотреть исходный код определенных версий в Интернете, например. это реализация Object.toString()
версии 8, обновление 40, бета-версия 25, размещенная по адресу grepcode.com
.
Таким образом, для большинства методов нет ничего «похожего на системный вызов ядра Linux», когда вы вызываете метод API. Он работает как обычный вызов метода, и оптимизатор может даже встроить специальный код JRE в код вашего приложения во время выполнения. Вы также можете войти в код JRE во время отладки.
Только несколько методов не реализованы в виде простого кода Java, например. Object.getClass()
— это метод native
, который может быть реализован только особым образом для JVM.
Существует два основных способа реализации этих методов. Существует стандартизированный интерфейс JNI, позволяя взаимодействие произвольного собственного кода и кода Java. Он включает специальную связь между вызовами методов Java, объявленных native
, и их реализацией через JNI. Но некоторые методы вместо этого обрабатываются JVM как внутренние операции, что подразумевает, что вызовы этих хорошо известных методов (например, getClass()
) обрабатываются непосредственно интерпретатором/оптимизатором, как выделенная инструкция байт-кода. Эта очень эффективная обработка иногда даже используется для методов, которые имеют обычную реализацию Java, когда есть более эффективная альтернатива для конкретной платформы. Например, Integer.rotateLeft
и rotateRight
имеют чистую реализацию Java, но если фактический ЦП, используемый во время выполнения, имеет специальные инструкции для побитового чередования, все оптимизирующие JVM заменят вызовы этих методов встроенными операции с использованием этих инструкций ЦП.
person
Holger
schedule
04.12.2017