는 라이브러리/프로그램을 생성하는 데 사용할 수 있 Java bytecode?[마감]

StackOverflow https://stackoverflow.com/questions/291492

  •  08-07-2019
  •  | 
  •  

문제

나는에 대해 알 비씨이엘, 지만,이 프로젝트를 보 죽은 것,그것이 없었 릴리스습니다.그리고-자바-세계에서 이동합니다.예를 들어 JDK1.6 는 새로운 클래스 파일 형식입니다.

그래서 라이브러리를 만드는 데 사용할 수 있는 바이트코드에 대한 JVM.지 않는 경우,라이브러리 프로그램은 너무 좋아,내가 조작할 수 있습에서 생성된 코드를 세부사항,예를 들어 바이트코드-assembler.

는 소프트웨어할 수 있습니까?그것은 너무 쉽게 사용하나요?는 좋은 예입/tutorials?

편집:에 대한 모든 질문:예 javac 괜찮습니다.하지만 생성하기 위한 일부 클래스에서 런타임,경로를 직접 바이트 코드는 것입 청소기입니다.

도움이 되었습니까?

해결책

ASM

http://asm.objectweb.org/

하는 것보다 훨씬 빠릅니다 비씨이엘과 지원 generics 및할 수 있습니다.중 하나는 지점에 대한 그것의 건축:기 위해서는 높은 성능을 보장하기 위해 ASM 주위에 내장되어 파서 발생하는 이벤트는(반면에 비씨이엘 where the parser 구축하는 데이터 구조).이것은 비슷한 차이 SAX 및 DOM parsers.그것은 몇 가지 연습을 얻을 사용하여 이런 종류의 생각을 가지고 있습니다.

편집(다음과 같은 맥도웰의 의견):실제로 방문자를 많이 사용하는에서 ASM,하지만 그것보다 더 중요한 일반 방문자:방문한 데이터 구조 지연장 파서,이렇게 관심이 없는 경우의 특정 부분에서 classfile(예를 들어,당신은 알고 싶은 메서드 이름이지만 당신에 대해 걱정하지 않는 자신의 신체)반환할 수 있습니다 null 에서 visitMethod()메소드가 있습니다.이 파서 건너뛰 방법은 신체 부분을 방지하기(비싼)건축물의 개체를 완전히 설명하는 방법입니다.

다른 팁

CAL (JVM의 Haskell과 유사한 언어)을 구현할 때 ASM을 사용하여 Java와 같은 중간 언어에서 바이트 코드를 생성하는 상당히 완전한 예가 있습니다. 소스를 다운로드하면 http://openquark.org/open_quark/download.html그런 다음 Asmjavabytecodegenerator.java에서 코드와 동일한 폴더에서 Java 모델 클래스에서 코드를 찾을 수 있습니다. 생성 된 코드는 기본적으로 Javac이 할 일, 디버그 주석을 뺀 것입니다.

CAL 구현은 원래 BCEL을 사용했지만 ASM이 상당히 빠르기 때문에 ASM으로 전환되었으며 (아마도 크기의 순서), ASM이 스레드 안전하므로 동시 컴파일이 가능하므로 CAL에 필요한 동시 컴파일이 가능합니다.

Javassist 그리고 cglib 두 가지 좋은 바이트 코드 엔지니어링 라이브러리입니다. 이들은 런타임에 객체의 프록시를 생성하기 위해 Java EE 세계에서 광범위하게 사용됩니다. 최대 절전 모드와 스프링은 이러한 라이브러리를 사용하는 두 가지 주요 프레임 워크입니다.

http://serp.sourceforge.net/ 바이트 코드를 편집 할 때 더 많은 추상화를위한 훌륭한 라이브러리입니다.

ASM 및 CGLIB와 같은 기술이 있지만 추천합니다. Javaassist 그것에 대한 아주 좋은 도서관이기 때문에 예제를 찾을 수 있기 때문입니다. tapestry5 뼈대.

내가 가장 좋아하는 Java Bytecode Creator는 Javac이라고하며 www.sun.com에서 찾을 수 있습니다.

Java 컴파일러 Javac을 사용하지 않는 이유는 무엇입니까? JVM 바이트 코드를 생성하는 데 사용하는 것이 잘못된 것은 무엇입니까?

진지하게. 소스를 가져 가서 자바를 만들고 컴파일하는 데 무엇이 멈추는가?

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top