좋습니다. Google의 누군가에게이 질문을해야하지만 다른 의견을 원합니다.
Android에서도 네이티브 코드 애플리케이션을 지원하지만 주요 개발 도구는 Java입니다. 그런데 왜? 모바일 장치에서 코드를 해석하는 것이 너무 느리지 않습니까? Froyo를 소개 할 때 Google은 새로운 JIT 컴파일러가 2 ~ 5 배 빠른 애플리케이션을 구현할 수 있다고 말했습니다. 즉, 네이티브 코드를 통해 Java를 사용하면 2 배 더 느립니다.
예, 가상 머신이 프로그램을 더 잘 제어 할 수 있기 때문에 관리 코드 응용 프로그램을 사용하는 것이 시스템 안정성 측면에서 더 안전하다는 것을 알고 있지만 여전히이 성능 저하가 엄청나고이를 사용해야하는 이유를 알 수 없습니다.
답변
몇 가지 사항 :
-
Java는 알려진 언어이며 개발자는이를 알고 있으므로 배울 필요가 없습니다.
-
포인터 산술이 없기 때문에 C / C ++ 코드보다 Java로 자신을 촬영하는 것이 더 어렵습니다.
-
VM에서 실행되므로 모든 전화기에 대해 다시 컴파일 할 필요가 없으며 보안이 쉽습니다.
-
많은 수의 Java 용 개발 도구 (포인트 1 참조)
-
여러 휴대폰에서 이미 Java ME를 사용했기 때문에 Java는 업계에서 널리 알려졌습니다.
-
속도 차이는 대부분의 애플리케이션에서 문제가되지 않습니다. 저수준 언어로 코딩해야한다면
답변
바이트 코드 수준에서 Android는 Java를 사용하지 않습니다. 소스는 Java이지만 JVM을 사용하지 않습니다.
답변
시스템 안정성 향상은 휴대폰과 같은 장치에서 매우 중요 합니다.
보안 은 더욱 중요합니다. Android 환경을 통해 사용자는 탁월한 보안없이 진정으로 불쾌한 방식으로 휴대폰을 악용 할 수있는 반 신뢰성 앱을 실행할 수 있습니다. 가상 머신에서 모든 앱을 실행하면 VM 구현에 결함이없는 한 앱이 OS 커널을 악용 할 수 없음을 보장합니다. 결과적으로 VM 구현은 크기가 작고 잘 정의 된 보안 표면을 가지고 있습니다.
아마도 가장 중요한 것은 프로그램을 가상 머신 용 코드로 컴파일 할 때 새 하드웨어 용으로 다시 컴파일 할 필요가 없다는 것입니다. 전화 칩 시장은 다양하고 빠르게 변화하고 있으므로 큰 문제입니다.
또한 Java를 사용하면 사람들이 작성한 앱이 스스로 악용 될 가능성이 줄어 듭니다. 버퍼 오버런, 포인터 실수 등이 없습니다.
답변
원시 코드가 반드시 Java 코드보다 빠르지는 않습니다. 네이티브 코드가 더 빨리 실행될 수 있음을 보여주는 프로필 데이터는 어디에 있습니까?
왜 자바인가?
-
Android는 다양한 하드웨어 플랫폼에서 실행됩니다. 실제 이점을 확인하려면 이러한 다양한 플랫폼 각각에 대해 네이티브 코드를 컴파일하고 최적화해야합니다.
-
이미 Java에 능숙한 개발자가 많이 있습니다.
-
Java는 개발자의 삶을 편하게 해주는 많은 라이브러리와 도구를 통해 엄청난 오픈 소스 지원을 제공합니다.
-
Java는 메모리 누수, 잘못된 포인터 사용 등과 같은 네이티브 코드에 내재 된 많은 문제로부터 사용자를 보호합니다.
-
Java를 사용하면 샌드 박스 애플리케이션을 만들 수 있고 하나의 나쁜 앱이 전체 OS를 무너 뜨리지 않도록 더 나은 보안 모델을 만들 수 있습니다.
답변
우선 구글에 따르면 안드로이드는 자바를 사용하지 않는다. 이것이 오라클이 구글을 고소하는 이유입니다. 오라클은 Android가 일부 Java 기술을 침해한다고 주장하지만 Google은 Dalvik이라고 말합니다.
둘째, 1995 년 이후로 Java 바이트 코드 인터프리터를 본 적이 없습니다.
실제 벤치 마크를 통해 성능 추측을 뒷받침 할 수 있습니까? 귀하가 제공하는 부정확 한 배경 정보를 감안할 때 귀하의 추정 범위가 정당화되지 않은 것 같습니다.
답변
자바는 안드로이드에서 구글을 사용하는 것에 대해 꽤 설득력있는 주장을 가지고있다. 그것은 개발자의 거대한 기반을 가지고있다. 이 모든 개발자는 모바일 플랫폼 용으로 개발할 준비가되어 있습니다.
기술적으로 말하면 Android는 순수 Java를 사용하지 않습니다 .
답변
다른 곳에서 언급했듯이 주요 문제는 Android가 다양한 하드웨어에서 실행되도록 휴대용 OS로 설계되었다는 것입니다. 또한 기존의 많은 모바일 개발자에게 익숙한 프레임 워크와 언어를 기반으로합니다.
마지막으로, 나는 그것이 미래에 대한 내기라고 말하고 싶습니다. 어떤 성능 문제가 존재하든 하드웨어가 향상됨에 따라 무의미해질 것입니다. 개발자는 POSIX / Unix API로 코딩했습니다.
대부분의 애플리케이션에서 네이티브보다 VM 기반 언어를 사용하는 오버 헤드는 크지 않습니다 (Twitter와 같은 웹 서비스를 사용하는 앱의 병목은 대부분 네트워킹입니다). Palm WebOS는 또한 이것을 보여줍니다. 자바 대신 자바 스크립트를 메인 언어로 사용합니다.
거의 모든 VM JIT가 네이티브 코드로 컴파일된다는 점을 감안할 때 원시 코드 속도는 종종 네이티브 속도와 비슷합니다. 높은 수준의 언어로 인한 많은 지연은 다른 요소 (복잡한 개체 런타임, 경계 검사를 수행하여 메모리 액세스를 ‘안전성’검사하는 등)보다 VM 오버 헤드와 관련이 적습니다.
또한 응용 프로그램을 작성하는 데 사용되는 언어에 관계없이 많은 실제 작업이 하위 수준 API에서 수행된다는 점을 기억하십시오. 최상위 언어는 종종 API 호출을 함께 연결하는 것입니다.
물론이 규칙에는 전화 하드웨어의 한계를 뛰어 넘는 게임, 오디오 및 그래픽 앱과 같은 많은 예외가 있습니다. iOS에서도 개발자는 이러한 영역에서 속도를 높이기 위해 종종 C / C ++를 사용합니다.