2013-05-18 33 views
7

Tôi đang trả lại một chuỗi từ một phương thức JNI. Tôi xóa tham chiếu cục bộ với nó trước khi trả về giá trị.Gọi DeleteLocalRef trong giao diện gốc java

JNIEXPORT jstring JNICALL TestJNIMethod(JNIEnv* env, jclass) 
{ 
    jstring test_string = env->NewStringUTF("test_string_value"); 
    env->DeleteLocalRef(test_string); 
    return test_string; 
} 

Phương thức JAVA gọi có thể vẫn truy cập được chuỗi trả về hoặc bộ thu gom rác có dọn sạch bộ nhớ không?

Trả lời

18

Không, mã của bạn sẽ hoạt động trên các phiên bản Android sớm hơn ICS. Từ ICS trên mã này sẽ thất bại một cách chính xác.

Nói chung, bạn không cần phải tự xóa các tham chiếu cục bộ, khi hàm JNI trả về Java các tham chiếu sẽ nhận được GC'd.

Ngoại lệ đối với quy tắc đó là nếu bạn tạo nhiều quy tắc, có thể trong vòng lặp. Sau đó, có thể điền vào bảng tham chiếu cục bộ. Xem IBM: Overview of JNI object references.

Bạn nên đọc JNI Local Reference Changes in ICS. Ngay cả khi bạn không viết cho Android, nó vẫn xác định được nhiều lỗi thường gặp.

Các vấn đề liên quan