Native peer在Effective Java(2nd)中定义如下
终结器的第二个合法使用涉及与本地对等体的对象。 原生对象是原生对象,普通对象通过原生方法委托。因为本地对等体不是普通对象,垃圾收集器不知道它并且在回收 Java对等时无法回收它。
在另一个问题中java peer用例子解释。是java类PrintHello
还是使用PrintHello
的其他类?
在这里,什么部分被称为Native Peer,哪个部分是Java Peer,任何一个例子?我理解使用finalize,我只是混淆了本地同伴被引用的部分。
答案 0 :(得分:1)
本机对象不仅仅用java编程,而是用平台特定语言编写,通常是c或汇编语言。
此代码分配的内存不能由GC处理。因此,您可能需要在终结器中清理它。
本地对等体是Java对象的本机部分。
你可以在这里看到一个很好的例子: https://www.javaworld.com/article/2077520/learn-java/java-tip-23--write-native-methods.html
答案 1 :(得分:1)
一个简单的例子是原生窗口与JFrame
。 JFrame
是Java对等体,但它需要(平台相关的)本地对等体来实际显示图形。
这就是为什么在摆脱dispose()
时需要致电JFrame
。您需要明确地删除本机组件,因为GC无法触及它。