Java运行时与OS调用

时间:2009-04-09 16:49:05

标签: java operating-system runtime

Java运行时提供了一组供程序使用的标准系统库。这些库在多大程度上类似于操作系统的系统调用,以及它们在多大程度上不同?

4 个答案:

答案 0 :(得分:4)

java的一半要点是使它与平台无关,所以它试图做的是提供一个api,无论它下面的操作系统如何都保持不变。

如果操作系统功能不足,Java将添加库代码以补偿它。

如果操作系统的实现没有映射,那么Java最好映射它。

如果新功能变得流行且Java用户需要提供对它的访问,则可以创建一个新库,通过该库可以访问新功能。如果这个库很流行,它将被重新构建并在某些时候添加到Java SDK中

例如,一些并发库的实现变得流行,很快他们就被投票并添加到标准库中。这种情况一直都在发生。

答案 1 :(得分:1)

这显然取决于您运行的操作系统,因为每个操作系统的系统调用通常都不同: - )。

也就是说,我认为Java主要受到Unix惯例的启发(并不是太令人兴奋,因为Sun是Unix供应商),因此一些Java系统库类似于Unix系统调用。

E.g。 java.nio.MappedByteBuffer可能是受到Unix的mmap()调用的启发。但最终大多数操作系统都存在大多数概念,所以你无法真正说出是什么激发了什么。

答案 2 :(得分:0)

Java的一些“低级”功能基本上是围绕某些操作系统的“包装” 系统调用。

我没有看到“比较”两者的客观方式(和理由)。

如果您对此主题感兴趣,可以搜索Java源代码 对于原生关键字,表示某些“隐藏” (主要是操作系统依赖的)功能。

答案 3 :(得分:0)

与原生库相比,Java的标准库通常具有类似的功能集,但存在一些重要的差异。

  1. Java是面向对象的,无论你喜不喜欢。这样做的好处是某些概念更易于管理。例如,大多数与文件相关的操作都可以直接在File对象中找到。将其与Posix进行比较,其中FILE是一个只是一个数字的句柄;进程打开文件列表的索引。 Posix方法非常接近操作系统实际实现的方式。但是在Java中你没有看到或知道或关心它。
  2. 在某些情况下,Java具有某些最低共同点的行为。有许多AWT API就是这样的,因为AWT需要在许多不同的平台上完全相同。事实证明这是疯狂的,并且Sun对AWT的大部分内容都准备弃用,因为支持平台同样意味着支持每个平台。较新的库Swing几乎可以在纯Java中实现所有功能,因此在跨平台的工作方面要好得多,因此具有更丰富的API。该API与本机窗口库非常不同。此外,Swing没有很好地集成,因为它使用的本机操作系统很少。
  3. Java具有本机库所没有的某些限制。例如,您没有函数指针。因此,您有ListenersRunnable以及其他Java模式,用于在C ++中执行涉及函数指针的操作。因此,任何需要这些功能之一的API在Java中都会与本机操作系统有很大不同。
  4. 总而言之,Java通常具有提供与本机操作系统类似行为的库,有时提供完全不同的行为,但最好将Java视为一个独立的平台。有时您需要高级性能,例如OpenGL或超高速数据传输,在这种情况下,您需要特定的Java API(Jogl,nio),但大多数情况下您应该将Java评估为自己的东西。