【问题标题】:Questions about class Object in Java [closed]关于Java中的类对象的问题[关闭]
【发布时间】:2015-03-16 23:48:05
【问题描述】:

我试图回答一个关于扩展 Object 类和覆盖 toString 方法的问题,当我注意到 Object 类中的某些方法被定义为本地方法时,这意味着它们的实现依赖于操作系统并考虑询问这 2问题:

为什么 Object 类中的某些方法被定义为原生方法?

registerNatives 方法究竟做了什么?

【问题讨论】:

标签: java


【解决方案1】:

本地方法是需要挂钩到 JVM 内部的方法,例如 clone(),它需要告诉 JVM 复制任何正在克隆的对象的基本内存结构。

【讨论】:

    【解决方案2】:

    我希望这对你有用。

    Object 类中有一些本地方法,因为它必须与机器交互。这里机器相关的代码是用 C 语言编写的,它不是源包附带的,也不是在 Java Runtime Environment (JRE) 的 lib 位置的 rt.jar 中。

    成为本地人的另一个原因可能是出于性能原因。由于 C 级别的编程性能可能会有所提高,因此他们可能已经用 C 语言编写了本机代码。

    这些方法是原生的,因为它们涉及原生数据。

    可以找到native方法的完整源代码here.

    关于您的第二个问题:-

    通常,为了让 JVM 找到您的本机函数,它们必须以某种方式命名。例如,对于 java.lang.Object.registerNatives,对应的 C 函数名为 Java_java_lang_Object_registerNatives。通过使用registerNatives(或者更确切地说,JNI 函数RegisterNatives),您可以随意命名您的 C 函数。

    【讨论】:

      【解决方案3】:

      Java 中的一些方法是原生的,原因有两个(我可以看到):

      1. 它们需要不容易通过 Java 本身公开的资源。例如,'getClass()' 使用一些低级 C 例程来引用对象类,这导致我进入第二个原因......
      2. 出于效率原因。由于运行时速度非常重要,因此在本机实现 hashCode()getClass() 等提供了提高对象创建速度的绝佳机会,如果在 Java 本身中实现,则会严重影响对象处理,导致 Java 无法使用.

      registerNatives参考:What does the registerNatives() method do?

      【讨论】:

        猜你喜欢
        • 2011-05-14
        • 1970-01-01
        • 2012-03-25
        • 2013-12-30
        • 2023-02-25
        • 2016-05-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多