문제

나는 장난을 치고 있다 Java의 장난감 통역사 그리고 Java Virtual Machine용 바이트코드를 생성할 수 있는 간단한 컴파일러를 작성하는 것을 고려하고 있었습니다.JVM 및 CLI와 같은 가상 머신을 대상으로 하는 컴파일러에서 얼마나 많은 최적화를 수행해야 하는지 생각하게 되었습니다.

JIT(Just In Time) 컴파일러는 상수 폴딩, 핍홀 최적화 등을 수행합니까?

도움이 되었습니까?

해결책

설명하는 두 개의 링크를 추가하겠습니다. 자바의 바이트코드 꽤 괜찮고 그 중 일부는 다양한 최적화 런타임 동안 JVM의.

다른 팁

대부분의 경우 바이트코드 최적화는 아마도 모순일 것입니다.

나는 그것이 사실이라고 생각하지 않습니다.루프 불변량 호이스팅 및 상수 전파와 같은 최적화는 JVM이 자체적으로 수행할 수 있을 만큼 똑똑하더라도 코드 작업을 줄인다는 간단한 장점으로 인해 결코 해를 끼칠 수 없습니다.

최적화는 JVM을 장기 실행 애플리케이션 환경으로 실행 가능하게 만드는 것입니다. SUN, IBM 및 동료들이 가능한 한 효율적인 방식으로 바이트 코드 및 JIT 컴파일 코드를 최적화할 수 있도록 최선을 다하고 있다고 확신할 수 있습니다.

즉, 바이트코드를 미리 최적화할 수 있다고 생각한다면 큰 해를 끼치지 않을 것입니다.

그러나 Java 컴파일러가 구성하는 경향이 있는 일종의 바이트 코드만 제공하면 JVM이 더 나은 성능을 발휘하는 경향이 있다는 점(충돌하지 않음)을 인식할 가치가 있습니다.최적화가 누락되거나 javac에서 생성되는 것과는 다른 올바른 바이트 코드 순열이 발생할 때 JVM이 충돌하는 경우도 알려지지 않았습니다.그런 종류의 일이 지금은 과거에 더 많았기를 바라지만, 알아두어야 할 것일 수도 있습니다.

ProGuard와 같은 난독처리기는 바이트코드에 대해 많은 정적 최적화를 수행합니다.

HotSpot 컴파일러는 컴파일 타임에 가능한 것보다 런타임에 코드를 더 잘 최적화합니다. 결국 작업할 정보가 더 많기 때문입니다.알고리즘뿐만 아니라 바이트코드를 최적화해야 하는 유일한 경우는 Blackberry와 같은 모바일 장치를 대상으로 할 때입니다. 여기서 해당 플랫폼의 JVM은 런타임에 코드를 최적화할 만큼 강력하지 않고 바이트코드만 실행합니다.

대부분의 경우 바이트코드 최적화는 아마도 모순일 것입니다.VM을 제어하지 않는 한 코드 실행 속도를 높이기 위해 어떤 작업을 수행하는지 알 수 없습니다.컴파일러는 최적화된 코드를 생성하기 위해 VM의 세부 사항을 알아야 합니다.

아세라핌에 대한 참고 사항:

일부 제한된 경우에는 비포함 애플리케이션에 대한 바이트코드를 최적화하는 것이 유용할 수도 있습니다.

  1. WebStart 앱과 같이 유선을 통해 코드를 전달할 때 전달 가능/캐시 크기를 최소화하고 클라이언트의 기능/속도를 반드시 알 필요가 없기 때문입니다.

  2. 성능이 중요하고 HotSpot이 통계를 수집하기 전에 시작 시 사용되는 코드의 경우.

다시 말하지만, 좋은 최적화 도구/난독 처리 장치가 수행하는 변환은 매우 도움이 될 수 있습니다.

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