GUI로 실행해야하는 제 3 자 소스 코드를 사용하고 있습니다. 그러나 GUI를 사용하지 않고이를 통합하고 있습니다. 사용중인 타사 코드에서 심각한 메모리 누수가 발생했습니다. . 그래서 어떻게 든 sandbox와 같은 제 3 자 애플리케이션 인스턴스의 객체를 생성 할 수 있을지 궁금합니다. 샌드 박스와 같이 객체를 나중에 제거 할 수 있으며 해당 객체가 호출 한 객체에 대한 모든 참조가 제거됩니다. 가비지 컬렉터.Java를 사용하여 "샌드 박스"모드에서 라이브러리를 실행하는 방법은 무엇입니까?
가능한가요? 비슷한 시나리오를 달성하기 위해 어떤 대안이 있습니까? 또는 java -jar customApp ...와 같은 프로세스 작성기에서 다른 응용 프로그램을 호출 할 수있는 유일한 가능성을 원하십니까? 그건 좀 못생긴하지만 ...
편집 : 해당 코드를 별도의 스레드에서 실행 한 다음 쓰레드가 완료 될 때까지 기다려야 가비지 수집기가 호출 된 것과 관련된 모든 객체를 제거하게됩니까?
네이티브 코드를 자신의 개체에 넣을 수는 있지만 메모리가 누출되지는 않습니다. GC는 네이티브 코드에 의해 할당 된 메모리를 처리 할 방법이 없습니다. – duffymo
나는 이것이 현재 믿을만하다고 생각하지 않는다. 클래스 객체도 언로드 할 수 있어야합니다. JVM이 모든 상황에서 그렇게 할 수 있다고는 생각하지 않습니다. 메모리 누수가없는 라이브러리를 찾는 것이 가장 좋습니다. (그리고 만약 당신이 자바 라이브러리 대신 네이티브 라이브러리를 원한다면, 네 모든 베팅은 확실히 꺼져 있습니다.) – markspace