代码之家  ›  专栏  ›  技术社区  ›  Stu Thompson Helter Scelter

Java和JVM版本之间的确切区别在哪里?

  •  3
  • Stu Thompson Helter Scelter  · 技术社区  · 16 年前

    Java和JVM版本之间的确切区别在哪里?

    我之所以问是因为最近一个“教育”评论线程与一位同事的sopedian有关默认缓冲区大小 java.io.BufferedInputStream 我看是8192。(一直是8192吗?)当只考虑API时,很明显是什么。但随着 实施 A的 java.* 上课……我只是不知道。

    这导致了两个衍生问题:

    • 可以 BufferedInputStream Java版本之间的默认缓冲区大小变化?
    • 可以 缓冲输入流 不同供应商的JVM上的默认缓冲区大小不同?

    (当然还有其他类似的例子,比如在各种集合的实现中。)

    4 回复  |  直到 16 年前
        1
  •  6
  •   Joachim Sauer    16 年前

    自从 the API specification of BufferedInputStream 不指定值,完全由实现来选择一个值。

    这意味着默认缓冲区大小可以在Java版本之间以及同一Java规范的不同实现之间进行更改。

    在其他方面几乎是一样的:真正的规范是文档(即jls、jvm规范和api规范,或者相应的jcp)。

    其他一切(即从源代码中可以看到的一切)都是一个实现细节,这取决于它是一个bug。

        2
  •  2
  •   kdgregory    16 年前

    “Java”是一种语言和API规范。JVM被一个完全不同的规范所覆盖,这个规范描述了类文件的格式和字节码的工作方式。

    要被称为“Java”,实现必须通过Sun和JCP定义的一系列测试。这些测试没有提到API或JVM的内部实现。

    API的实现可以也可以在修订之间进行更改,以响应错误报告和一般清理。

        3
  •  1
  •   Yishai    16 年前

    基本上,该行是规范,主要是在Java文档中。规范概述了API的合同,实现必须遵守该合同。合同没有具体规定的内容将取决于执行情况。

    当然,在实践中,没有一个规范是完美的,所以即使没有具体说明,也有一些实际的细节需要依赖。乔尔·斯波斯基有一个 good article 在它上面,虽然在Java中的东西比W3C要好得多。

        4
  •  -1
  •   Kevin Jones    16 年前

    Java是语言。这有一个规范。
    JVM是一个可以执行Java字节码的软件,有一个规范。
    JVM(Sun公司、IBM公司和各种迷你版本的电话等)有许多实现,并且有很多Java实现。
    Java语言可以编译到字节码,但它不必编译,它可以编译到IL(对于.NETCLR)或本地代码或其他任何东西。
    JVM不必运行Java应用程序,例如见Jython和JRuBy以及许多其他示例。

    推荐文章