Java에서 액세스 할 수 있도록 C++ 객체를 래핑하고 싶습니다. jni and using c++ new'ed objects in java을 읽음으로써 Java 래퍼 클래스에서 내 C++ 객체에 대한 참조를 저장하는 방법을 이해했습니다. 내가 알아 내지 못한 한 가지 방법은 내 C++ 객체의 생성과 제거를 처리하는 것입니다. 물론, 나는 C++ 객체를 생성하고 삭제하는 네이티브 메소드를 소개 할 수있다. 그러나 이것은 Java에서 메모리 관리를 직접 처리해야한다는 것을 의미한다. 자바 래퍼 객체가 생성되고 가비지 수집 될 때 호출되어야하는 구현해야하는 네이티브 메소드가 있습니까?JNI : wrapped C++ 객체의 생성/제거를 처리하는 방법
4
A
답변
7
C++ 객체를 만들고 파괴하기위한 원시 메소드를 작성해야합니다. 내가 자바로 그걸 부를 수있는 방법을 아는 3 가지 다른 방법이있다.
Java 객체에 대해
public void finalize()
메소드를 구현하십시오. 가비지 컬렉터는 일단 객체가 마무리되면이 메소드를 호출하여 여기에서 destroy 메소드를 호출하면 가비지 컬렉터가 모든 것을 처리합니다. finalize()에는 단점이 있습니다. 가비지 컬렉터가 느려지고 다른 스레드에서 약간 호출하도록 호출됩니다.dispose() 메서드를 작성하고 수동으로 메모리를 관리하십시오. 네이티브 리소스에 대해 swing/AWT에 의해 사용됩니다. 이렇게하면 언제 어디서 C++ 객체가 삭제되는지 제어 할 수 있습니다. finalize()를 구현하여 메모리 누수를 막거나 코드를 디버깅 할 수 있습니다.
PhantomReference 클래스와 ReferenceQueue을 사용하여 개체 중 하나가 가비지 수집되었는지 확인하고 거기에서 C++ 개체를 삭제하십시오. 이것은 finalize()에 대한 대안을 제공합니다.
관련 문제
- 1. XML, JDom, JNI 및 C++로 문자 인코딩을 처리하는 방법
- 2. C++에서 JNI DLL을 호출하는 방법
- 3. Java에서 C API를 사용하는 방법? JNI?
- 4. jni 및 Java에서 C++ new'ed 객체 사용
- 5. WCF Rest Mrapliple DataContracts Wrapped
- 6. C# - 중복 multicastdelegate 처리하는 방법?
- 7. C#에서 메모리를 처리하는 방법
- 8. C# 인터넷 중단을 처리하는 방법
- 9. C#, 상수 테이블을 처리하는 방법
- 10. JNI Java 오브젝트에 액세스하는 방법 (정수)
- 11. JNI 대 C++ 객체 인스턴스
- 12. Regex match HTML HTML wrapped around
- 13. JNI 리스너 구현
- 14. swig wrapped 변수의 기본 할당이 실패합니다.
- 15. JNI 성능
- 16. Java에서 객체의 선택적 변수를 처리하는 방법은 무엇입니까?
- 17. 파이썬에서 객체의 속성을 처리하는 것에 중점을 둡니까?
- 18. PHP 확장에서 C++ 객체의 배열을 반환하는 방법
- 19. 런타임시 C++ 객체의 메모리를 확인하는 방법
- 20. C#에서 객체의 배열을 선언하는 방법
- 21. JNI - 내가하는 방법이있어
- 22. Java JNI 스택 폴 방지
- 23. C#, 객체의 문제
- 24. 스택 객체의 C++ shared_ptr
- 25. C++ 객체의 XML 표현
- 26. 자바 : 객체의 배열에서 객체의 유형을 결정하는 방법?
- 27. Java JNI DLL 종속성을 수정하는 방법
- 28. 동시 연결을 처리하는 방법 asp net (C#)
- 29. C# 멀티 스레딩을 사용하여 파일을 처리하는 방법
- 30. C# 동적 글꼴 크기 조정을 처리하는 방법