JProfiler 도움말

필터 및 라이브 상호작용

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

하지만 개별 객체를 볼 수 있는 나가는 참조 뷰는 참조와 기본 타입(primitive) 필드를 제한하는 선택 단계를 수행할 수 있는 훨씬 더 강력한 기능을 제공합니다.

나가는 참조 뷰에서 최상위 객체, 기본 타입 값 또는 참조를 선택하면 Apply Filter→By Restricting The Selected Value 액션이 활성화됩니다. 선택한 항목에 따라 필터 값 대화상자에서 제공하는 옵션이 달라집니다. 어떤 옵션을 구성하든, 새 객체 집합의 객체는 선택한 것과 같은 나가는 참조 체인을 가져야 한다는 제약 조건이 항상 암시적으로 추가됩니다. 필터는 현재 객체 집합을 더 작은 집합으로 제한하여 항상 최상위 객체에 대해 작동합니다.

기본 타입 값 제한은 HPROF 및 JProfiler 힙 스냅샷 모두에서 작동합니다. 참조 타입의 경우, JProfiler가 null이 아닌 값, null 값 및 선택한 클래스의 값을 필터링하도록 지정할 수 있습니다. toString() 메서드의 결과로 필터링하는 기능은 라이브 세션에서만 사용할 수 있으나, JProfiler가 자체적으로 확인할 수 있는 java.lang.String 및 java.lang.Class 객체는 예외입니다.

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

라이브 세션에서 JProfiler는 프로파일된 JVM에서 필터링 스크립트를 실행하고 실제 인스턴스를 스크립트에 전달할 수 있습니다. Apply filter by running a script on live objects에 표시되는 스크립트 에디터에서 프로퍼티에 직접 접근하고 그 boolean 반환값으로 현재 객체 집합에 인스턴스를 유지할지 여부를 결정하는 표현식이나 스크립트를 작성할 수 있습니다.

당연히 이 기능은 JProfiler가 라이브 객체에 접근해야 하므로 라이브 세션에서만 작동할 수 있습니다. 고려해야 할 또 다른 요소는 힙 스냅샷이 생성된 후에 객체가 가비지 컬렉션되었을 수 있다는 점입니다. 그러한 경우, 코드 스니펫 필터가 실행될 때 해당 객체는 새 객체 집합에 포함되지 않습니다.

HPROF 및 PHD 스냅샷을 포함한 스냅샷에서도 작동하는 두 번째 옵션은 Apply filter by running a script on dumped data 액션입니다. 각 인스턴스는 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() 메서드를 통해서만 접근할 수 있습니다.

필터 외에도 개별 객체와 상호작용하기 위해 나가는 참조 뷰에서 제공하는 다른 두 가지 기능이 있습니다. Show toString() Values 액션은 현재 뷰에 표시된 모든 객체에 대해 toString() 메서드를 호출하고 참조 노드에 직접 표시합니다. 노드가 매우 길어져 텍스트가 잘릴 수 있습니다. 컨텍스트 메뉴에서 Show Node Details 액션을 사용하면 전체 텍스트를 확인하는 데 도움이 됩니다.

toString() 메서드를 호출하는 것보다 객체에서 정보를 얻는 더 일반적인 방법은 문자열을 반환하는 임의의 스크립트를 실행하는 것입니다. 최상위 객체 또는 참조가 선택되었을 때 Show toString() Values 액션 옆에 있는 Run Script 액션을 사용하여 이 작업을 수행할 수 있습니다. 스크립트 실행 결과는 별도의 대화상자에 표시됩니다.