【发布时间】:2010-10-18 14:44:00
【问题描述】:
Java 运行时提供一组标准系统库供程序使用。这些库与操作系统的系统调用有什么相似之处,又有什么不同???
【问题讨论】:
标签: java operating-system runtime
Java 运行时提供一组标准系统库供程序使用。这些库与操作系统的系统调用有什么相似之处,又有什么不同???
【问题讨论】:
标签: java operating-system runtime
java 的一半目的是让它独立于平台,所以它试图做的是提供一个无论其下的操作系统如何都保持不变的 api。
如果操作系统功能不足,Java 会添加库代码来弥补。
如果操作系统有一个不映射的实现,Java 会尽力映射它。
如果新功能变得流行并且 Java 用户需要提供对其的访问权限,则可以创建一个新库,您可以通过该库访问新功能。如果这个库很受欢迎,它会在某个时候进行重组并添加到 Java SDK 中
例如,一些并发库的实现变得流行起来,很快它们就被投票通过并添加到标准库中。这种情况经常发生。
【讨论】:
这显然取决于您运行的操作系统,因为每个操作系统的系统调用通常都不同:-)。
也就是说,我相信 Java 主要是受到 Unix 约定的启发(并不奇怪,因为 Sun 是 Unix 供应商),所以一些 Java 系统库类似于 Unix 系统调用。
例如java.nio.MappedByteBuffer 可能是受到 Unix 的 mmap() 调用的启发。但最终大多数概念都存在于大多数操作系统上,因此您无法真正说出是什么启发了什么。
【讨论】:
Java 的一些“低级”函数基本上是某些操作系统的“包装器” 系统调用。
我没有看到“比较”两者的客观方式(和理由)。
如果你对这个话题感兴趣,可以搜索Java源码 native 关键字,表示某些“隐藏” (主要是操作系统相关的)功能。
【讨论】:
与原生库相比,Java 的标准库通常具有相似的功能集,但有几个重要的区别。
Listeners 和 Runnable 以及其他 Java 模式来执行 C++ 中涉及函数指针的事情。因此,任何需要这些功能之一的 API 在 Java 中都将与在本机操作系统中显着不同。因此,总而言之,Java 的库通常提供与本机操作系统类似的行为,有时甚至提供完全不同的行为,但最好将 Java 本身视为一个平台。有时您需要高级性能,例如 OpenGL 或超快速数据传输,在这种情况下,您需要特定的 Java API(Jogl、nio),但大多数时候您应该将 Java 视为自己的东西。
【讨论】: