는 라이브러리/프로그램을 생성하는 데 사용할 수 있 Java bytecode?[마감]
문제
나는에 대해 알 비씨이엘, 지만,이 프로젝트를 보 죽은 것,그것이 없었 릴리스습니다.그리고-자바-세계에서 이동합니다.예를 들어 JDK1.6 는 새로운 클래스 파일 형식입니다.
그래서 라이브러리를 만드는 데 사용할 수 있는 바이트코드에 대한 JVM.지 않는 경우,라이브러리 프로그램은 너무 좋아,내가 조작할 수 있습에서 생성된 코드를 세부사항,예를 들어 바이트코드-assembler.
는 소프트웨어할 수 있습니까?그것은 너무 쉽게 사용하나요?는 좋은 예입/tutorials?
편집:에 대한 모든 질문:예 javac 괜찮습니다.하지만 생성하기 위한 일부 클래스에서 런타임,경로를 직접 바이트 코드는 것입 청소기입니다.
해결책
ASM
하는 것보다 훨씬 빠릅니다 비씨이엘과 지원 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에 필요한 동시 컴파일이 가능합니다.
http://serp.sourceforge.net/ 바이트 코드를 편집 할 때 더 많은 추상화를위한 훌륭한 라이브러리입니다.
ASM 및 CGLIB와 같은 기술이 있지만 추천합니다. Javaassist 그것에 대한 아주 좋은 도서관이기 때문에 예제를 찾을 수 있기 때문입니다. tapestry5 뼈대.
내가 가장 좋아하는 Java Bytecode Creator는 Javac이라고하며 www.sun.com에서 찾을 수 있습니다.
Java 컴파일러 Javac을 사용하지 않는 이유는 무엇입니까? JVM 바이트 코드를 생성하는 데 사용하는 것이 잘못된 것은 무엇입니까?
진지하게. 소스를 가져 가서 자바를 만들고 컴파일하는 데 무엇이 멈추는가?