2009-11-05 5 views
12

현재 Java 바이트 코드를 대상으로 장난감 컴파일러를 작성하고 있습니다.컴파일러 최적화 : Java 바이트 코드

.class 파일을 작성하기 전에 방출 된 바이트 코드에서 수행 할 수있는 다양한 간단한 구멍 올림 최적화에 대한 일종의 카탈로그 (요약 정보 일 수도 있음)가 있는지 알고 싶습니다. 실제로이 기능을 가진 라이브러리를 알고 있지만 직접 구현하고 싶습니다.

+2

대부분의 최적화는 Java 컴파일러에서가 아니라 런타임에서 수행됩니다. 런타임 최적화없이 목표 성능 결과 또는 성능 결과가 있습니까? –

+0

실제 목표는 컴파일러 학습입니다. 필자는 컴파일 시간 최적화가 최적화되어 다른 소프트웨어에 그대로 두는 대신 진행 상황을 직접 확인하고 구현할 수 있다고 생각합니다. –

답변

19

당신은 Proguard를 알고 있습니까? http://proguard.sourceforge.net/

이것은 많은 최적화를 구현하는 훌륭한 바이트 코드 최적화 프로그램입니다. 목록에 대한 FAQ를 참조하십시오 : http://proguard.sourceforge.net/FAQ.html

  • 상수 표현을 평가하십시오.
  • 불필요한 필드 액세스를 제거하고 메서드를 호출하십시오.
  • 불필요한 가지를 제거하십시오.
  • 불필요한 비교와 instanceof 테스트를 제거하십시오.
  • 사용하지 않는 코드 블록을 제거하십시오.
  • 동일한 코드 블록을 병합하십시오.
  • 가변 할당을 줄입니다.
  • 쓰기 전용 필드와 사용하지 않는 방법 매개 변수를 제거하십시오.
  • 인라인 상수 필드, 메서드 매개 변수 및 반환 값
  • 인라인 메서드는 짧거나 번만 호출됩니다.
  • 꼬리 재귀를 단순화 호출합니다.
  • 클래스와 인터페이스를 병합합니다.
  • 가능한 경우 메서드를 비공개로 고정하고 최종로 설정합니다.
  • 가능한 경우 클래스 을 정적으로 끝내십시오.
  • 개의 구현이있는 인터페이스를 바꿉니다.
  • 는 은 * ... (2)에 의한 1 ... < <
  • 선택적 제거 로깅 코드 교체 같은 이상의 틈 구멍 (200)의 최적화를 수행한다.

소스 코드를 자세히 살펴보면 어떻게 구현되는지 알 수있을 것입니다.

+0

아마도 .NET 버전이 있습니까? – leppie

+0

클래스 및 인터페이스 병합 : 컴파일러는 형식 계층 구조를 축소 할 수 있음을 어떻게 알 수 있습니까? 개인 인터페이스에 대해서만 확신 할 수 있습니다. –

+0

고마워, 내가 살펴볼거야. –

관련 문제