相关疑难解决方法(0)

你为什么要实现finalize()?

我一直在阅读关于finalize()的很多新手Java问题,并发现有点令人困惑的是,没有人真正说明finalize()是一种不可靠的清理资源的方法.我看到有人评论说他们用它来清理Connections,这真的很可怕,因为接近Connection的关闭的唯一方法就是最终实现try(catch).

我没有受过CS的教育,但是我已经用Java专业编程近十年了,我从未见过有人在生产系统中实现finalize().这仍然不意味着它没有它的用​​途,或者我与之合作过的人一直在做正确的事.

所以我的问题是,实现finalize()的用例是什么,无法通过语言中的其他进程或语法更可靠地处理?

请提供具体的方案或您的经验,只是重复Java教科书,或最终确定的用途是不够的,这不是这个问题的意图.

java jvm

362
推荐指数
12
解决办法
9万
查看次数

JNI对象创建和内存管理

我有以下JNI方法本地创建Java对象的集合,然后将它们返回到Java:

JNIEXPORT jobject JNICALL Java_com_test_myClass_myMethod(JNIEnv * env, jclass klass) {
    jclass arrayClass = env->FindClass("java/util/ArrayList");
    jmethodID initMethod = env->GetMethodID(arrayClass, "<init>", "()V");
    jmethodID addMethod = env->GetMethodID(arrayClass, "add", "(Ljava/lang/Object;)Z");
    jobject myArray = env->NewObject(arrayClass, initMethod);

    env->CallBooleanMethod(myArray, addMethod, env->NewStringUTF("Hello"));
    env->CallBooleanMethod(myArray, addMethod, env->NewStringUTF("World"));

    return myArray;
}
Run Code Online (Sandbox Code Playgroud)

我是否需要释放在本机代码中创建的对象,还是由GC自动完成?如果我这样做,我该怎么做,因为我需要将它返回到Java?

c++ java java-native-interface memory-leaks memory-management

13
推荐指数
1
解决办法
1万
查看次数

Java JNI - 将C中分配的资源与java对象相关联?

我想在C中分配一些内存并使其与java对象实例相关联,如下所示:

void configure(JNIEnv *object, jobject obj, ....) {
  char *buf = new char[1024];
  // associated <buf> with <obj> somehow
}
Run Code Online (Sandbox Code Playgroud)

然后在java对象被垃圾收集时释放内存 - 我可以通过从java对象的finalize()方法调用JNI函数来实现.

问题是,如何将C指针与java对象相关联?在对象中保留一个字段并将指针强制转换为?有没有更好的办法?

c c++ java java-native-interface android-ndk

7
推荐指数
1
解决办法
5898
查看次数

在 Valgrind 下运行 Eclipse

这里有人成功在Valgrind下运行 Eclipse吗?我正在与涉及 JNI 代码的特别棘手的崩溃作斗争,并希望 Valgrind 或许可以(再次)证明其卓越性,但是当我在 Valgrind 下运行 Eclipse 时,JVM 终止并显示一条有关无法创建初始对象的错误消息堆(我目前无法访问确切的错误消息;我会尽快编辑这篇文章。)

eclipse valgrind

5
推荐指数
1
解决办法
1619
查看次数