什么是本地同行?

时间:2018-01-15 09:52:44

标签: java terminology

Native peer在Effective Java(2nd)中定义如下

  

终结器的第二个合法使用涉及与本地对等体的对象。 原生对象原生对象普通对象通过原生方法委托因为本地对等体不是普通对象,垃圾收集器不知道它并且在回收 Java对等时无法回收它。

在另一个问题中java peer用例子解释。是java类PrintHello还是使用PrintHello的其他类?

在这里,什么部分被称为Native Peer,哪个部分是Java Peer,任何一个例子?我理解使用finalize,我只是混淆了本地同伴被引用的部分。

2 个答案:

答案 0 :(得分:1)

本机对象不仅仅用java编程,而是用平台特定语言编写,通常是c或汇编语言。

此代码分配的内存不能由GC处理。因此,您可能需要在终结器中清理它。

本地对等体是Java对象的本机部分。

你可以在这里看到一个很好的例子: https://www.javaworld.com/article/2077520/learn-java/java-tip-23--write-native-methods.html

答案 1 :(得分:1)

一个简单的例子是原生窗口与JFrameJFrame是Java对等体,但它需要(平台相关的)本地对等体来实际显示图形。

这就是为什么在摆脱dispose()时需要致电JFrame。您需要明确地删除本机组件,因为GC无法触及它。