2009-05-06 3 views
4

Java 프로그램에서 C++ 코드를 호출해야하는 경우를 생각해보십시오. C++ 코드는 수천 개의 객체를 만듭니다. 이 동적 객체는 어디에 저장됩니까? 네이티브 코드가 JVM과 동일한 프로세스의 일부가 될 것이기 때문에 JVM 힙이 의심됩니다.JVM에서 네이티브 코드를 처리하는 방법

그렇다면 Java Garbage collector 스레드의 규칙이 C++ 코드의 Object에 적용됩니까?

답변

4

첫 번째 질문의 경우 C++은 자체 런타임을 사용하여 자원을 할당합니다.이 런타임은 JVM과 관련이 없습니다. JVM은이 메모리 할당 자의 활동을 인식하지 못합니다.

두 번째 질문에서 Java 가비지 수집기는 C++에서 할당 한 메모리를 GC하지 않습니다. Java 래퍼가 메모리 릴리스를 시작하는지 확인해야합니다. java에 의해 객체가 GC되기 전에 런타임은 finalize() 메소드를 호출합니다. 디폴트 오브젝트는 java.lang.Object로부터 상속되어 기본적으로는 아무것도 실시하지 않습니다. 이것을 무시하고 수동 관리 메모리의 할당을 해제하기위한 후크로 사용할 수 있습니다.

+1

@ 긱 - 예. 그것은 모두 같은 프로세스의 일부입니다. 따라서 C++에서의 충돌은 JVM을 무너 뜨릴 것입니다. –

+1

예, JVM과 동일한 프로세스에서 실행되며 가장 확실하게 프로세스가 중단 될 수 있습니다. – ConcernedOfTunbridgeWells

+0

Brian과 CTW에게 감사드립니다. 나는 이해하지 못한다. 어떻게 하나의 프로세스를 가질 수 있으며 C++과 Java에서 메모리 할당을 다르게 할 수 있습니까? 힙 메모리는 프로세스의 주소 공간에 포함되지 않습니다. 스택의 객체 만 주소 공간의 일부라고 생각합니다. 의견을 부탁합니다. – Geek

관련 문제