Sun VM에서 할 수있는 Dalvik VM (Android의 VM)에서 할 수없는 것은 무엇입니까?
나는 당신이 거의 모든 자바를 실행할 수 있다는 것을 알고 달빅의 VM 당신이 할 수있는 자바의 VM 하지만 제한은 매우 명확하지 않다. 큰 걸림돌이있는 사람이 있습니까? 문제가있는 주요 도서관이 있습니까? Java 바이트 코드 ( Scala , Jython 등)로 컴파일되는 언어가 예상대로 작동하지 않습니까?
Dalvik이 처리하지 않거나 표준 Java 바이트 코드와 동일한 방식으로 처리하지 않을 많은 것들이 있지만 대부분은 상당히 고급입니다.
가장 심각한 예는 런타임 바이트 코드 세대 및 사용자 정의 클래스 로딩. 일부 바이트 코드를 생성 한 다음 클래스 로더를 사용하여로드하고 싶다고 가정 해 보겠습니다. 해당 트릭이 일반 컴퓨터에서 작동한다면 바이트 코드 생성을 변경하지 않는 한 Dalvik에서는 작동하지 않을 것입니다.
그러면 특정 종속성 주입 프레임 워크를 사용할 수 없습니다. 가장 잘 알려진 예는 Google Guice입니다 (일부 사람들은 이에 대해 작업하고 있음을 확신합니다). 반면 AspectJ는 컴파일 단계로 바이트 코드 계측을 사용하므로 작동해야합니다 (누구 시도해도 몰라요).
다른 jvm 언어와 마찬가지로 결국 표준 바이트 코드로 컴파일되고 런타임에 바이트 코드 계측을 사용하지 않는 모든 것은 Dalvik으로 변환 될 수 있으며 작동해야합니다. 사람들이 Android에서 Jython을 실행했으며 정상적으로 작동한다는 것을 알고 있습니다.
주의해야 할 또 다른 사항은 Just In Time 컴파일 이 없다는 것입니다 . 이것은 엄격하게 Dalviks 문제는 아니지만 (원하는 경우 언제든지 즉시 모든 바이트 코드를 컴파일 할 수 있음) Android가이를 지원하지 않으며 그렇게 할 가능성이 낮습니다. 그 결과 표준 자바에 대한 마이크로 벤치마킹은 쓸모가 없었습니다. 테스트에서 컴포넌트는 더 큰 시스템의 일부와는 다른 런타임 특성을 가졌습니다. 안드로이드 폰용 마이크로 벤치 마크는 완전히 의미가 있습니다.
" Dalvik Virtual Machine internals "Google IO 세션이 표시되면 Dalvik이 세대 별 GC를 지원하지 않음을 알 수 있습니다 .
따라서 빈번한 개체 생성 및 삭제 성능이 저하 될 수 있습니다. Java VM은 세대 별 GC를 지원하므로 동일한 상황에서 더 나은 GC 성능을 보여줍니다.
또한 Dalvik은 메서드 입도 JIT 대신 추적 입도 JIT 를 사용 합니다 .
여기에 추가 할 수있는 또 다른 점은 Dalvik이 리플렉션 API를 사용하여 클래스의 필드를 나열 할 때 필드 순서를 유지하지 않는다는 것입니다. 이제, 반사 API는 (이상적으로는 어쨌든에 의존해서는 안) 어쨌든 어떠한 보증을하지만, 다른 VM의 가장 밖에되지 않습니다 할 순서를 보존 할 수 있습니다.
대화에 추가하기위한 것이지 이전 스레드를 되살리려는 의도가 아닙니다. 방금 검색에서 이것을 발견했으며 Jython이 Dalvik과 함께 상자에서 작동하지 않는다고 추가하고 싶습니다. hello world 예제를 시도하면 다음과 같은 결과가 나타납니다.
'Development Tip' 카테고리의 다른 글
-webkit-overflow-scrolling : 터치; (0) | 2020.12.31 |
---|---|
Visual Studio가 MSBuild에 전달하는 매개 변수는 무엇입니까? (0) | 2020.12.31 |
자바 스크립트 익명 함수 끝에 ".call (this)"을 쓰는 이유는 무엇입니까? (0) | 2020.12.30 |
Python 3 인터프리터에 JIT 기능이 있습니까? (0) | 2020.12.30 |
Express.js 응답 시간 초과 (0) | 2020.12.30 |