java - 释放本地对象

标签 java c++ memory java-native-interface wrapper

<分区>

检测 Java 对象的 GC 调用的最佳方法是什么?

我正在为 C++ 代码构建 Java 包装器,每次调用 GC 时我都需要释放在 C++ 代码中分配的内存

我看到了一些解决方案,但没有一个让我满意。

其中一个是:

Object obj = null;
try{
    obj = new Object();
    // do things
} finally {
   if(obj != null){
      obj.freeCObjects();
   }
}

最佳答案

您可能需要考虑 finalize() java.lang.Object 上可用的方法。

It is called by the garbage collector on an object when garbage collection determines 
that there are no more references to the object.

一般来说,最好避免使用终结器,因为 JVM 不保证 finalize() 会在任何对象上被调用,但是当需要清理 native (通常是非-Java) 资源,终结器可能很有用。

这是一个简单的例子:

    Object obj = new Object() {
        @Override
        protected void finalize() throws Throwable {
            System.out.println("finalize object");
            super.finalize();
        }
    };

终结器可以由垃圾回收调用。

关于java - 释放本地对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19715869/

相关文章:

windows - 一个 "secret key"应该如何保留在内存中?

language-agnostic - 内存访问的成本是多少?

java - JPA:使用 criteriabuilder 查找实体:属性名称与注释不同?

java - 如何获取 Firestore 集合中所有文档的名称(字段)?

c++ - 创建链接到英特尔 ipp 库的 mex 文件

java - 空闲时的JVM锯齿模式? JVM在此期间做了什么?

java - Apache Tapestry : Absolute path to assets in META-INF/assets

java - 在 Java 网站上加载 Twitter 提要

c++ - C++ 中字符串字符的反向迭代

c++ - 从指针更改 OpenCV 矩阵的数据