Как JVM получает доступ к файловой системе - PullRequest
3 голосов
/ 02 февраля 2010

У меня есть спор с моим боссом, который убежден, что JVM использует JNI для доступа к собственным вещам, таким как файловая система. Я думаю, что он не прав, потому что сама JVM является нативным кодом и напрямую взаимодействует с ОС - ей не нужен шаблон JNI для доступа к файловой системе.

Пожалуйста, помогите мне уточнить, как работает JVM

Ответы [ 2 ]

4 голосов
/ 02 февраля 2010

Это немного спорный вопрос на самом деле.Собственные интерфейсы Java - это языковая функция, позволяющая определить вызов функции в Java, который будет передан коду, не являющемуся Java, в частности, встроенному в платформу.Если вы посмотрите на FileOutputStream.java в src.zip вашего SDK, вы увидите код, подобный следующему:

    /**
 * Opens a file, with the specified name, for writing.
 * @param name name of file to be opened
 */
private native void open(String name) throws FileNotFoundException;

/**
 * Opens a file, with the specified name, for appending.
 * @param name name of file to be opened
 */
private native void openAppend(String name) throws FileNotFoundException;

/**
 * Writes the specified byte to this file output stream. Implements 
 * the <code>write</code> method of <code>OutputStream</code>.
 *
 * @param      b   the byte to be written.
 * @exception  IOException  if an I/O error occurs.
 */
public native void write(int b) throws IOException;

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

Однако виртуальная машина Java, которая интерпретирует байт-код Java и применяет эти правила, определенно является нативным кодом - я подозреваю, чторади именования (в разных «нативных» системах используются совершенно разные API), в отличие от нативных вызовов, направленных напрямую в библиотеки, эти вызовы воспринимаются виртуальной машиной и обрабатываются виртуальной машиной.

2 голосов
/ 02 февраля 2010

JNI для Java-кода для доступа к нативному коду.Вы правы, JVM IS Native code, поэтому он напрямую связан с платформой, для которой он скомпилирован.Вот почему есть JVM для каждой операционной системы.Windows JVM скомпилирована для Windows, Linux для Linux, OSX для OSX и т. Д. У них есть весь специфичный для платформы код, встроенный в сам код JVM.

...