Где именно находится различие между версией Java и JVM? - PullRequest
3 голосов
/ 14 января 2010

Где именно находится различие между версией Java и JVM?

Я спрашиваю из-за недавней «образовательной» ветки комментариев с коллегой по SOpedian относительно размера буфера по умолчанию java.io.BufferedInputStream, который, как я вижу, равен 8192. (Это всегда было 8192?) Когда мы думаем только о API понятно, что к чему. Но с реализацией класса java.* ... я просто не знаю.

Это приводит к двум производным вопросам:

  • Может ли BufferedInputStream размер буфера по умолчанию изменяться между версиями Java?
  • Может ли BufferedInputStream размер буфера по умолчанию отличаться в JVM различных поставщиков?

(Конечно, есть и другие подобные примеры, например, в реализации различных коллекций.)

Ответы [ 4 ]

6 голосов
/ 14 января 2010

Поскольку в спецификации API BufferedInputStream значение не указано, выбор зависит от реализации.

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

Это в значительной степени одинаково в других областях: реальная спецификация - это документация (т.е. JLS, спецификация JVM и спецификация API, или, скорее, соответствующаяJCP).

Все остальное (т.е. все, что вы можете увидеть, посмотрев на источник) - это деталь реализации и в зависимости от этого ошибка.

2 голосов
/ 14 января 2010

"Java" - это спецификация языка и API. JVM покрыта совершенно другой спецификацией, которая описывает формат файла класса и способ работы байт-кода.

Чтобы быть названным "Java", реализация должна пройти серию тестов, определенных Sun и JCP. Эти тесты ничего не говорят о внутренней реализации API или JVM.

Реализация API может меняться и изменяется между ревизиями в ответ на сообщения об ошибках и общую очистку.

1 голос
/ 14 января 2010

По сути, строка - это спецификация, которая в основном находится в документе Java. Спецификация описывает контракт для API, и реализация должна будет выполнить этот контракт. То, что не указано в договоре, будет зависеть от реализации.

Конечно, на практике ни одна спецификация не является идеальной, поэтому существуют практические детали, на которые можно положиться, даже если они не указаны. У Джоэла Спольски есть хорошая статья , хотя в Java все намного лучше, чем в W3C.

0 голосов
/ 14 января 2010

Ява - это язык. Для этого есть спецификация.
JVM - это часть программного обеспечения, которая может выполнять байт-коды Java. Для этого есть спецификация.
Существует множество реализаций JVM (Sun, IBM и различные мини-версии для телефонов и т. Д.), А также множество реализаций Java.
Язык Java может компилироваться в байт-код, но это не обязательно, он может компилироваться в IL (для .Net CLR) или в нативный код или во что-то еще. JVM не должна запускать приложения Java, см., Например, Jython и JRuby и многие другие примеры.

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