1

런타임 바이트 코드 생성을위한 많은 libs (도구)가 있습니다. ASM, Javassit, CGLIB, BCEL. 이 모든 도구는 javac 컴파일러와 같은 도구와는 달리 자바 바이트 코드를 동적으로 조작 할 수 있습니다.큰 메소드/클래스에 대한 런타임 바이트 코드 생성

바이트 코드를 생성하고 나중에 클래스 로더에로드하는 것이 좋은 점을 알고 있습니다. 나에 대한 질문은 Java 메소드/클래스에 대해 매우 큰 바이트 코드를 생성 할 때 이러한 도구간에 성능 차이점과 문제점이 있는지입니다.

또 다른 시나리오는

다른 Dynamic Java Bytecode Manipulation Framework Comparison이 있습니다 (/ 지속적으로 클래스 로더에 언로드 응용 프로그램은 바이트 코드 클래스와 부하를 생성에 계속)하지만 난이 없어 시간에 실행하고 생성 된 바이트 코드가 사소한하지만 연속 될 것이다 유지 응용 프로그램입니다 대답. 어떤 사람이 유용한 링크를 제공 할 수 있거나 설문 조사/보고서 모두 학술/산업을 형성 할 수 있다면 좋을 것입니다.

답변

0

런타임에 클래스를 생성하는 것은 바이트 배열에 내용을 채우는 것보다 더 흥미로운 것은 아닙니다. JVM이이 내용을 Java 클래스로 해석하도록 지시 한 시점에서 하드 드라이브에서로드 된 사전 컴파일 된 클래스가 런타임 환경에 추가되는 방식과 다르지 않습니다.

바이트 배열을 채우는 것이 간단하기 때문에 내용은 내용을 결정하는 규칙에 따라 달라집니다. 소스 코드를 파싱하고 그 정확성을 검증하는 것은 값 비싼 작업입니다. 반면에, 하드 코드 된 규칙에 따라 코드를 생성하는 것, 예를 들어. (lambda 인스턴스화가 작동하는 것처럼) 하나의 지정된 메소드를 호출하여 인터페이스를 수행하는 것은 일반적으로 하드 드라이브에서 동일한 코드를로드하는 것보다 훨씬 빠르게 작동합니다. 이러한 규칙은 런타임 바이트 코드 생성의 일반적인 사용 사례를가집니다.

성능에 대해 생각하기 전에 동적 바이트 코드 생성에 대해 왜 생각하고 있는지 물어보십시오. 대부분의 실제 시나리오에서이 질문에 대한 답은 성능이 관련성이 있는지 또는 코드를 생성하여 개선 될 것으로 기대되는지에 대한 질문에 대한 답변을 이미 포함하고 있습니다.

1

현실 세계에서는 어떤 프레임 워크를 사용할지는 중요하지 않습니다. 수백만 개의 새로운 메소드를 생성하고 런타임에로드 할 계획이 아니라면 처음에는 나쁜 생각입니다.

0

ASM이 두 가지 이유로 가장 강력하다고 생각합니다. 첫째, 모든 JVM 기능이 최신이며 두 번째로 Visitor Pattern API가 매우 효율적입니다. 이 두 번째 요점은 성능 문제를 해결한다고 생각합니다.