시작 에이전트 VM 시작
구현 후 VM이 시작된 후 언젠가 에이전트를 시작 메커니즘을 제공 할 수 있습니다. 이것이 어떻게 시작되는지에 대한 세부 사항은 구현 특정이지만 일반적으로 응용 프로그램이 이미 시작되었으며 주 메소드가 이미 호출되었습니다. VM이 시작된 후 구현이 에이전트 시작을 지원하는 경우 다음이 적용됩니다.
에이전트 JAR의 매니페스트는 에이전트 클래스 속성을 포함해야합니다. 이 속성의 값은 에이전트 클래스의 이름입니다.
에이전트 클래스는 public static agentmain 메소드를 구현해야합니다.
시스템 클래스 로더 (ClassLoader.getSystemClassLoader)는 에이전트 JAR 파일을 시스템 클래스 경로에 추가하는 메커니즘을 지원해야합니다.
에이전트 JAR이 시스템 클래스 경로에 추가됩니다. 이것은 일반적으로 응용 프로그램 주 방법을 포함하는 클래스를로드하는 클래스 로더입니다. 에이전트 클래스가로드되고 JVM이 agentmain 메소드를 호출하려고 시도합니다. 또한
public static void agentmain(String agentArgs);
에이전트 클래스를 할 수 있습니다 : 다음 JVM은 호출을 시도합니다 에이전트 클래스는이 메소드를 구현하지 않는 경우
public static void agentmain(String agentArgs, Instrumentation inst);
: JVM은 먼저 에이전트 클래스에서 다음 메소드를 호출하려고 시도 명령 줄 옵션을 사용하여 에이전트를 시작한 경우 사전 방법을 사용하십시오. VM 시작 후 에이전트가 시작되면 premain 메소드가 호출되지 않습니다.
에이전트에는 agentArgs 매개 변수를 통해 해당 에이전트 옵션이 전달됩니다. 에이전트 옵션은 단일 문자열로 전달되며 추가 구문 분석은 에이전트 자체에서 수행해야합니다.
agentmain 메서드는 에이전트를 시작하는 데 필요한 초기화를 수행해야합니다. 시작이 완료되면 메소드가 리턴되어야합니다. 에이전트 클래스를로드 할 수 없거나 에이전트 클래스에 일치하는 agentmain 메소드가 없기 때문에 에이전트를 시작할 수없는 경우 JVM이 중단되지 않습니다. agentmain 메소드가 캐치되지 않은 예외를 throw하면 무시됩니다.
추신 : 나는 결코 이것을 시도한 적이 없습니다. 작동하는지 여부를 알려주세요.
감사합니다. 더 간단한 '에이전트 jar'에 대한 옵션이 될 수 있지만이 특정 jar는 내부에 jar가 있습니다. 또한 'agentmain()'메소드를 구현하는 래퍼 클래스를 만들어야합니다. 클래스 경로가로드하려고 할 때 문제가 발생합니다. 글 머리 기호를 물고'agents' 디렉토리에 추가하고 시작 스크립트에 추가 할 것입니다. 장기간에 마이그레이션 할 플랫폼은 배치시 자동으로이 에이전트 jar를 감지하므로 임시 솔루션으로이 에이전트를 사용할 수 있습니다. –
런타임 첨부는 클래스가 첨부시로드되지 않는다고 보장하지 않습니다. 그러나로드 된 클래스는 다른 모양을 허용하지 않고 다른 메소드 구현을 제공하기 위해서만 변경할 수 있습니다. –