Sun VM에서 할 수있는 Dalvik VM (Android 's VM)에서 무엇을 할 수 없습니까?

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

  •  04-07-2019
  •  | 
  •  

문제

나는 당신이 거의 모든 Java를 실행할 수 있다는 것을 알고 있습니다. Dalvik의 VM 당신이 할 수있는 자바의 VM 그러나 한계는 명확하지 않습니다. 주요 걸림돌을 만난 사람이 있습니까? 문제가있는 주요 도서관이 있습니까? Java 바이트 코드로 컴파일하는 모든 언어 (스칼라, Jython 등 ...) 예상대로 작동하지 않습니까?

도움이 되었습니까?

해결책

Dalvik이 표준 Java 바이트 코드와 같은 방식으로 처리하지 않거나 처리하지 않을 많은 것들이 있지만 대부분은 상당히 발전했습니다.

그만큼 가장 심각한 예는 런타임 바이트 코드 생성입니다 그리고 맞춤형 클래스 로딩. 바이트 코드를 생성 한 다음 클래스 로더를 사용하여 클래스 로더를로드하고 싶다고 가정 해 봅시다. 해당 트릭이 일반 시스템에서 작동하면 바이트 코드 생성을 변경하지 않는 한 Dalvik에서 작동하지 않도록 보장됩니다.

이를 통해 특정 의존성 주입 프레임 워크를 사용하지 못하게됩니다. 다른 한편으로, Sagne는 바이트 코드 계측을 컴파일 단계로 사용하므로 작동해야합니다 (누군가가 시도한 경우에는 몰라요).

다른 JVM 언어 - 마지막으로 표준 바이트 코드로 컴파일하고 런타임시 바이트 코드 계측을 사용하지 않는 것은 Dalvik으로 변환 될 수 있으며 작동해야합니다. 나는 사람들이 안드로이드에서 Jython을 실행했다는 것을 알고 있습니다.

알아야 할 다른 것은 시간 편집은 아닙니다. 이것은 엄격히 Dalviks 문제가 아닙니다 (원하는 경우 항상 바이트 코드를 즉석로 컴파일 할 수 있습니다). 그러나 Android는이를 지원하지 않으며 그렇게하지 않을 것입니다. 효과적으로 표준 Java에 대한 마이크로 렌치 마킹은 쓸모가 없었지만 구성 요소는 더 큰 시스템의 일부로 테스트에서 런타임 문자 별이 다릅니다.

다른 팁

네가 본다면 "Dalvik Virtual Machine 내부"Google IO 세션, Dalvik이 지원하지 않는다는 것을 찾을 수 있습니다. 세대 GC.

따라서 빈번한 객체 생성 및 삭제의 성능을 저하시킬 수 있습니다. Java VM은 세대 GC를 지원하므로 동일한 상황에서 더 나은 GC 성능을 보여줄 것입니다.

또한 Dalvik은 사용합니다 추적 그리기성 jit 메소드 granuality 대신 jit.

여기에 추가 할 수있는 또 다른 것은 Dalvik이 반사 API를 사용하여 클래스의 필드를 나열 할 때 필드 순서를 보존하지 않는다는 것입니다. 이제 반사 API는 어쨌든 어떠한 보장도하지 않습니다 (따라서 이상적으로는 어쨌든 의존해서는 안됩니다). 하다 주문을 보존하십시오.

대화에 추가하기 위해서는 오래된 실을 부활시키지 않습니다. 나는 방금 내 검색에서 이것을 가로 질러 달렸고, Jython이 Dalvik과 함께 상자에서 작동하지 않는다고 덧붙이고 싶습니다. Hello World 예제를 단순히 시도하면 다음이 발생할 수 있습니다.

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