3
프로젝트에서 Rhino를 사용하고 있습니다. 짧은 시간 동안 사용 된 ScriptableObjects를 여러 개 만들어서 버려야합니다. 이렇게하면 메모리 누수가 발생합니까?Rhino ScriptableObject 인스턴스를 정리해야합니까?
Context cx = ContextFactory.getGlobal.enter();
try {
for (String script : Scripts.findAll()) {
Scriptable scope = cx.initStandardObjects();
// load script into scope, and do something with it.
// do I need to do any cleanup to for the scope?
}
} finally {
Context.exit();
}
마르코의 솔루션이 좋은 하나입니다
코드는 다음과 같은 것입니다. jvisualvm을 사용하여 시나리오를 테스트 한 결과 가비지 콜렉션이 문제를 해결한다는 것을 알게되었습니다.
로드 된 클래스 다이어그램의 진동은 다소 걱정됩니다. 단 수명 클래스가 동적으로 생성되는 것으로 보입니다. 성능이 저하 될 수 있습니다. –
@MarkoTopolnik 많은 클래스가 Rhino 구현으로 인해 발생했을 가능성이 큽니다. 프로파일 러를 사용해 보았지만 많은 행운이 없었습니다. 메소드 호출마다 생성되는 객체의 수를 검사하는 데 사용할 수있는 도구가 있습니까? – jharig23
사용할 수있는 프로파일 링 도구의 범위에 익숙하지 않습니다. 'jvisualvm'만으로도 할당을 프로파일 링 할 수 있으며 각 할당 이벤트에 대한 스택 트레이스를 표시한다고 생각합니다. 따라서 원하는 것과 비슷한 것이있을 수 있습니다. 그러나 * 클래스 할당 *과 객체 할당 *을 구별하는 데주의하십시오. 전자는 거의 문제가되지 않습니다. JVM은 단명 대상을 대량으로 할당하기 위해 고도로 조정되어 있기 때문입니다. 후자는 완전히 다른 이야기입니다 : 클래스를 로딩하는 것은 꽤 무거운 연산이며, 반드시 피크닉이 아닌 * 클래스 초기화 *가 따라야합니다. –