보고서를 계산하는 것이 목적 인 응용 프로그램에서 가능한 작업을하고 있습니다.어떤 Finalizer가 시간이 많이 걸리는지 찾는 방법
내 응용 프로그램은 많은 양의 메모리를 사용합니다. 100 개 이상 이동하십시오.
지난 릴리스 이후 큰 성능 저하가있었습니다. 내 조사에 따르면 계산 중에 40 ~ 60 초 사이에 많은 가비지 수집이 발생합니다 !!! 은 JVM 가비지 수집을 때 물론, 응용 프로그램이 절대적으로
내가 지금 조사하고을 동결하고, 및 (JMC은 SerialOld하지만 나는 그것이 정확히 무엇을 의미하는지 모르는 나에게 말한다) 이 가비지 콜렉션의 기원 ... 그리고 이것은 매우 힘든 일입니다. (나는 모든 라이브러리 중에서 우리가 다른 팀에서, 그들 중 일부는 파이널 라이저를 사용하여 통합, 알고)
나는 이러한 가비지 수집이 너무 긴 경우가 finalize
기능 에 많은 시간을 소비하기 때문에, 그것이, 의심
그러나 나는이 가설을 어떻게 모으는 지 (또는 알지 못한다) 모른다. 어떤 파이널 라이저가 시간 소모적인지 찾는 방법. 내가 좋은 도구 또는 좋은 방법 여기
당신에게 대단히 감사합니다 필립을 찾고
데이터 내가있을 때, 나는 항상 많은 "보류 종료 자"는이 당신이 볼 수 있듯이 JVisualVM
를 통해 수집 a log 오래된 쓰레기
JVisualVM을 사용할 때 위의 그래프 이 오른쪽에서 왼쪽으로 규칙적으로 스크롤된다는 것은 놀라운 일입니다. 오래된 쓰레기가 으로 트리거되면 스크롤이 멈 춥니 다 (여기서까지 정상적으로 보입니다.이 메시지는 end-of-world입니다). 다시 시작 갑자기 스크롤 할 때 그러나, 그것은하지 이것은 저를 파이 나라가 JVM
차단되었다고 생각 할 수 있습니다
오래된 쓰레기의 끝에서하지만 보류 시리얼의 끝에서 않는 사람이 explaination를 들어 가지고 있습니까 이?
'finalize' 메소드는 가비지 콜렉션 중에 실행되지 않습니다. – apangin
확실한가요? 심지어 "SerializeOld"가비지 수집? 답변 해 주셔서 감사합니다. –
물론입니다. 비 동시 GC 단계에서 Java 코드가 실행되지 않습니다. GC 만 * 최종화 가능한 객체를 발견하여 대기열에 추가합니다. 이 대기열은 나중에 ['Finalizer']에 의해 처리됩니다 (http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/8b04ee324a1a/src/share/classes/java/lang/ref/Finalizer.java# l186) 다른 Java 스레드와 함께 실행되는 Java 스레드. – apangin