JProfiler 도움말Download

필터 및 라이브 상호작용


힙 워커에서 관심 있는 객체를 찾을 때, 동일한 클래스의 인스턴스가 너무 많은 객체 집합에 도달하는 경우가 많습니다. 특정 초점에 따라 객체 집합을 더 줄이기 위해 선택 기준은 해당 속성이나 참조를 포함할 수 있습니다. 예를 들어, 특정 속성을 포함하는 HTTP 세션 객체에 관심이 있을 수 있습니다. 힙 워커의 병합된 나가는 참조 뷰에서 전체 객체 집합에 대한 참조 체인을 포함하는 선택 단계를 수행할 수 있습니다.

그러나 개별 객체를 볼 수 있는 나가는 참조 뷰에서는 참조와 원시 필드를 제한하는 선택 단계를 수행할 수 있는 훨씬 더 강력한 기능을 제공합니다.

최상위 객체, 원시 값 또는 나가는 참조 뷰의 참조를 선택하면 필터 적용→선택한 값 제한으로 작업이 활성화됩니다. 선택에 따라 필터 값 대화 상자는 다양한 옵션을 제공합니다. 어떤 옵션을 구성하든 새 객체 집합의 객체는 선택한 것과 같은 나가는 참조 체인을 가져야 한다는 제약 조건을 항상 암시적으로 추가합니다. 필터는 항상 현재 객체 집합을 더 작은 집합으로 제한하여 최상위 객체에서 작동합니다.

원시 값 제한은 HPROF 및 JProfiler 힙 스냅샷 모두에서 작동합니다. 참조 유형의 경우, JProfiler에 null이 아닌 값, null 값 및 선택한 클래스의 값을 필터링하도록 요청할 수 있습니다. toString() 메소드의 결과로 필터링하는 것은 java.lang.Stringjava.lang.Class 객체를 제외하고는 라이브 세션에서만 사용할 수 있으며, JProfiler는 이를 스스로 파악할 수 있습니다.

가장 강력한 필터 유형은 코드 스니펫을 사용하는 것입니다. 객체를 필터링하는 두 가지 근본적으로 다른 방법이 있습니다:

라이브 세션에서는 JProfiler가 프로파일된 JVM에서 필터링 스크립트를 실행하고 실제 인스턴스를 스크립트에 전달할 수 있습니다. 라이브 객체에서 스크립트를 실행하여 필터 적용에 의해 표시되는 스크립트 편집기에서 속성에 직접 액세스하고 부울 반환 값이 인스턴스를 현재 객체 집합에 유지할지 여부를 결정하는 표현식이나 스크립트를 작성할 수 있습니다.

당연히 이 기능은 라이브 세션에서만 작동할 수 있습니다. JProfiler가 라이브 객체에 액세스해야 하기 때문입니다. 고려해야 할 또 다른 요소는 힙 스냅샷이 찍힌 후 객체가 가비지 수집되었을 수 있다는 것입니다. 그런 경우, 코드 스니펫 필터가 실행될 때 해당 객체는 새 객체 집합에 포함되지 않습니다.

HPROF 및 PDH 스냅샷을 포함하여 스냅샷에서도 작동하는 두 번째 옵션은 덤프된 데이터에서 스크립트를 실행하여 필터 적용 작업입니다. 각 인스턴스는 com.jprofiler.api.agent.heap.HeapObject의 인스턴스로 스크립트에 전달됩니다. 해당되는 경우 매개변수를 다운캐스트할 수 있는 여러 하위 인터페이스가 있습니다. 자세한 내용은 Javadoc를 참조하십시오. 예를 들어, 객체가 객체 인스턴스인 경우 com.jprofiler.api.agent.heap.Instance 인터페이스를 사용할 수 있으며 필드 값에 액세스할 수 있습니다. 스크립트가 최상위 객체에서 작동하고 현재 객체 집합의 모든 객체가 동일한 유형인 경우 스크립트 매개변수는 자동으로 적절한 하위 유형을 갖게 됩니다.

이러한 필터 스크립트에서는 HeapObject 매개변수의 메소드를 통해 모든 들어오는 및 나가는 참조에 액세스할 수도 있습니다.

PHD 스냅샷에는 필드 정보가 포함되어 있지 않으므로 모든 인스턴스는 com.jprofiler.api.agent.heap.HeapObject 또는 com.jprofiler.api.agent.heap.ClassObject로 전달되며, 필드 값은 referencedObjects() 메소드를 통해서만 액세스할 수 있습니다.

필터 외에도 개별 객체와 상호작용하기 위한 나가는 참조 뷰에는 두 가지 다른 기능이 있습니다: toString() 값 표시 작업은 현재 뷰에 보이는 모든 객체에 대해 toString() 메소드를 호출하고 이를 참조 노드에 직접 표시합니다. 노드는 매우 길어질 수 있으며 텍스트가 잘릴 수 있습니다. 컨텍스트 메뉴에서 노드 세부정보 표시 작업을 사용하면 전체 텍스트를 볼 수 있습니다.

toString() 메소드를 호출하는 것보다 객체에서 정보를 얻는 더 일반적인 방법은 문자열을 반환하는 임의의 스크립트를 실행하는 것입니다. toString() 값 표시 작업 옆의 스크립트 실행 작업을 통해 최상위 객체나 참조가 선택된 경우 이를 수행할 수 있습니다. 스크립트 실행 결과는 별도의 대화 상자에 표시됩니다.