2010-01-14 130 views
3

Java的版本和JVM之間的界限究竟在哪裏?Java的版本和JVM之間的區別究竟在哪裏?

我在問最近一個關於默認緩衝區大小java.io.BufferedInputStream的「教育」評論主題,我看到它是8192.(它總是8192嗎?)當只考慮API時,什麼是明確的。但與實施java.*類...我只是不知道。

這導致兩個衍生問題:

  • 莫非BufferedInputStream的默認緩衝區大小的Java版本之間的變化?
  • 可能BufferedInputStream的默認緩衝區大小在不同供應商的JVM上會有所不同?

(當然還有其他的類似的例子,如在不同的集合的執行。)

回答

6

由於the API specification of BufferedInputStream未指定值,因此完全取決於實施選擇一個值。

這意味着默認緩衝區大小可以在Java版本之間以及相同Java規範的不同實現之間變化。在其他領域幾乎相同:真正的規範是文檔(即JLS,JVM規範和API規範,或者相應的JCP)。

其他所有內容(即您查看源代碼時可以看到的所有內容)都是實現細節,具體取決於它是一個錯誤。

+0

謝謝。這隻會讓我對「BufferedInputStream」的歷史信息產生興趣。在JDK1.1的JavaDocs中,它明確指出默認緩衝區是512KB,但對默認大小的任何引用都從它們的輸出中消失。有趣的東西。 – 2010-01-15 13:02:12

1

基本上線是說明書中,其中大部分是在Java文檔。該規範概述了API的合同,並且實施必須遵守該合同。合同沒有具體說明的將取決於實施。

當然,實際上沒有規範是完美的,所以即使沒有指定,也有依賴的實用細節。 Joel Spolsky在其上有一個good article,但在Java中比W3C要好得多。

2

「Java」是一種語言和API規範。 JVM有一個完全不同的規範,它描述了類文件的格式和字節碼的工作方式。

要被稱爲「Java」,實現必須通過由Sun和JCP定義的一系列測試。這些測試沒有提到API或JVM的內部實現。

爲了響應錯誤報告和一般清理,API的實現可以並在修訂之間進行更改。

-1

Java是語言。這是一個規範。
JVM是一種軟件,可以執行Java字節碼。有一個規範。
JVM的許多實現(Sun的,IBM的和手機的各種迷你版本等),並且有許多Java的實現。可以將Java語言編譯爲字節碼,但並不一定,它可以編譯爲IL(for。淨CLR)或本地代碼或其他任何東西。
JVM不必運行Java應用程序,例如參見Jython和JRuby以及其他許多示例

相關問題