Вызов System.loadLibrary () для методов FileOutputStream - PullRequest
2 голосов
/ 05 мая 2020

Я проверял исходный код для класса FileOutputStream в Java и заметил некоторые собственные методы. Насколько я понимаю, нативные методы где-то должен быть вызов System.loadLibrary(), но я не могу найти его нигде в исходном коде JDK. Я хотел бы найти библиотеку Dynami c, которая содержит реализацию собственных методов, а также увидеть фактический вызов System.loadLibrary(). Может ли кто-нибудь помочь?

EDIT:

Перефразируя свой вопрос, я хотел бы узнать, как JDK загружает собственный код без loadLibrary, и посмотреть, где это настроено в репозитории.

Ссылка на источник: https://github.com/openjdk-mirror/jdk7u-jdk

Ответы [ 2 ]

0 голосов
/ 10 мая 2020
  1. Репозиторий jdk7u устарел. Не обновлялся более 8 лет. Актуальный репозиторий находится по адресу https://hg.openjdk.java.net/jdk/jdk/file

  2. Собственная реализация методов FileOutputStream - здесь .

  3. Как следует из пути, этот собственный код является частью библиотеки java (libjava.so или java.dll).

  4. libjava не является JVM, но по-прежнему является неотъемлемой частью библиотеки классов Java, так как содержит собственные методы для базовых c классов, таких как java.lang.Class, java.lang.ClassLoader et c. Вот почему JVM предварительно загружает libjava во время bootstrap, см. ClassLoader::initialize.

  5. Пока libjava безоговорочно предварительно загружен JVM, существует звонить не нужно System.loadLibrary.

0 голосов
/ 05 мая 2020

Реализации собственных методов в FileOutputStream включены в JVM. System.loadLibrary() используется с внешними библиотеками, которые необходимо загружать отдельно - это не требуется, когда собственные методы уже скомпилированы в JVM.

Вы можете увидеть исходный код, выполнив поиск исходного кода для упоминание "FileOutputStream" на C языке .

Реализация зависит от платформы c: например, для Windows вы найдете FileOutputStream_md. c который вызывает функции в io_util_md. c.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...