- mongodb - 在 MongoDB mapreduce 中,如何展平值对象?
- javascript - 对象传播与 Object.assign
- html - 输入类型 ="submit"Vs 按钮标签它们可以互换吗?
- sql - 使用 MongoDB 而不是 MS SQL Server 的优缺点
我的理解是,Google 不喜欢 Oracle 在 Java ME 中使用 JRE 的许可政策,所以它只是重写了它使用自己的 JVM 规范模仿 JRE,但行为有点不同,尤其是当它出现时让事情变得更高效、更安全。
所以,如果我的理解是正确的,那就意味着当javac
在一些Java源代码上运行并编译成“二进制”字节码,兼容的 JVM 会解释不同于 Dalvik 的字节码(在某些情况下)。这是与生俱来的Dalvik 和其他(兼容的)JVM 之间的区别。
如果我到目前为止所说的任何内容不正确,请先纠正我!
现在,如果 Android 带有自己的编译器(它可能),并以不同的方式编译 Java 源代码(Dalvik 兼容)方式比 javac
,然后我可以理解一些代码(不是用 Android SDK 编译的)不会在安卓设备:
MySource.java --> javac --> MySource.class (JRE-compliant) --> JVM --> running Java app
MySource.java --> android-compiler --> MySource.class (Dalvik-compliant) --> Dalvik JVM --> running Android app
但是,您似乎使用 javac
来编译 Android 应用程序!?!?所以看起来我们有这个:
MySource.java --> javac --> MySource.class (JRE-compliant) --> JVM --> running Java app
MySource.java --> javac --> MySource.class (JRE-compliant) --> Dalvik JVM --> running Android app (???)
如果使用javac
将所有源码编译成字节码,那么为什么Dalvik不能运行某些类型Java 代码?
我昨天问了一个非常相似的问题,虽然它在技术上得到了回答(在重新阅读我的问题之后我知道我只是不够具体)没有人能够解释 Dalvik 所固有的使得无法从 Google Guice 或 Apache Camel 等项目运行 Java 代码。有人告诉我,为了让 Camel 在 Dalvik 上运行,我必须获得 Camel 的源代码,然后它必须“使用 Android SDK 构建”,但我无法弄清楚这意味着什么或暗示什么.
以 Camel 为例,你有这个(简化的):
RouteBuilder.java --> javac --> RouteBuilder.class --> jartool --> camel-context-2.9.jar --> JVM --> running Camel ESB
RouteBuilder.java --> javac --> RouteBuilder.class --> jartool --> camel-context-2.9.jar --> Dalvik JVM --> doesn't work !!! (???)
很明显,Dalvik JVM 内部发生了一些事情,阻止了它运行某些类型的 Java 代码。我试图了解哪些类型的 Java 代码在“输入”到 Dalvik JVM 时不会运行。
编辑:在“但是 Camel 3.0 将在 Android 上运行!”之前我知道 - 这不是我的问题!
最佳答案
I'm trying to understand what types of Java code will not run when "fed" into the Dalvik JVM.
Dalvik JVM 在以下方面与其他 JVM 不同:
它使用特殊的 DEX 格式来存储应用程序二进制文件与 JAR和标准 Java 虚拟机使用的 Pack200 格式。谷歌声称 DEX 生成的二进制文件比 JAR 更小。我觉得他们可以使用 Pack200 取得同样的成功,但他们决定去他们的在这方面有自己的方式
Dalvik JVM 针对运行多个 JVM 进程进行了优化同时
Dalvik JVM 使用基于寄存器的架构与基于堆栈的架构其他 JVM 的架构,旨在加速执行和减少二进制大小
它使用自己的指令集(不是标准的 JVM 字节码)
一个人可以运行(如果需要)多个独立的 Android 应用程序在单个 JVM 进程中
应用程序执行可以跨越多个 Dalvik JVM 进程“自然”。为了支持它补充:
基于Parcel和Parcelable的特殊对象序列化机制类。从功能上讲,它与标准 Java 具有相同的目的可序列化,但会导致数据占用空间更小,并且可能对类版本的差异更宽松
基于Android执行进程间调用(IPC)的特殊方式Android 接口(interface)定义语言 (AIDL)
直到 Android 2.2 Dalvik JVM 不支持 JIT 编译,这对 Android 应用程序性能产生不利影响。在 2.2 中添加显着提高常用应用程序的执行速度
关于java - Android:javac 与 Dalvik,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11374477/
我在 PID 上使用 showmap 命令,但我无法理解报告中的这一部分: 16384 3752 689 0 3132 0 620
在哪里可以找到 dalvik 操作码列表以及相应的允许操作数及其大小(8 位/16 位/32 位/62 位) 最佳答案 This给出 dalvik vm 中存在的每个操作码的所有详细信息和 this给
当我们在桌面系统上运行其他虚拟机时,是否可以直接在 Dalvik 虚拟机上执行任务? 最佳答案 如果我正确理解了您的问题:我正在考虑 task在问题中提到 apk (如果是这样,那么以下答案可能对 y
对此进行了一些研究,并发现了一些关于在应用程序中面临相同问题的人的帖子。我也在我的应用程序的谷歌控制台中遇到了这个崩溃,并关注了我发现的帖子( java.lang.ClassNotFoundExcep
我知道这可能是 Android 中的一个基本问题。但是什么是 Dalvik 和 dalvik-cache? 最佳答案 Dalvik 是 Android 使用的虚拟机。它通常被认为是一个 Java 虚拟
关于在运行时动态生成 java 字节码并将其加载到正在运行的 Dalvik VM 中,这个问题已被多次询问(并回答),但是有没有办法在运行时将 dex 文件/字节码加载到应用程序中? 谢谢 最佳答案
Android 中 Dalvik Bridge Function 和 Dalvik Native Function 调用有什么区别? 最佳答案 简单来说, Android 是基于 Linux 的操作系
我想获取标准 Java 库的 Dalvik 字节码,我的意思是,Android 使用的 java 库(例如 java.util.* 集合)。 我需要获取这些类文件,因为我想分析它们,不是全部,而是像
我正在尝试学习 smali,但有一些问题无法通过谷歌搜索找到。 1)我创建了一个简单的测试用例来更好地解释自己 const-string v1, "Start" :try_start_0 const-
在我的应用程序中,我将一些数据存储在 Application 类中: public HashMap> getConfigs() { if (mConfigs != null) {
Java 规范允许编译器和 VM 重新排序内存写入以提高效率。 Dalvik VM 是否具体利用了这一点? 免责声明:我无意依赖顺序,即使 Dalvik 不这样做(此外编译器也可能这样做),但很高兴知
我已经下载并安装了 SDK。但是我的手机没有显示在 Dalvik 调试监视器中。 请帮帮我,这是怎么回事?我已经杀死了服务器。并重新启动。但是 adb devices 没有列出我的设备。我知道在 ec
我有一个正在运行的 dalvik 实例: /system/bin/dalvikvm ... -Xmx100m ... memmap 看起来像: b01f6000-b05b7000 rwxp 00000
如果我知道变量的模式,例如 R.id.edit_x where x (1..N),我如何才能获得对给定 EditText 的引用,例如 findViewByID(R.id.edit_1)。 Dalvi
我刚刚做了一个基准测试来比较局部变量、成员变量、其他对象的成员变量和getter setter 的访问性能。基准测试在循环中增加了 10 次 mio 迭代的变量。这是输出: BENCHMARK:本地1
在我的 Dalvik 调试监视器中 在删除所有以前的日志消息后显示与以前的日志消息具有不同标记的新日志消息。这意味着日志一直在清除自身并且只显示几行。我将如何查看所有日志消息? 最佳答案 我也经常遇到
我试图了解为 Android 中的每个进程分配了多少内存。据我了解,对于每个应用程序进程,都有一个单独的 Zygote 进程实例,Zygote 将 fork Dalvik VM。 我写了一个小的示例
我使用的是 Android 2.2 SDK,无法让 MultiUserChat 类中的静态 block 执行。我试图将其强制加载为 try { String qual = MultiUserC
我们正在为 Android jelly bean 开发一个项目。我们的平台是arm-based,内核版本是3.1.10。在我们的开发过程中,我们发现在dalvik中发生应用崩溃的概率非常低。根据以下回
每个 ANR 转储都列出了 ANR 发生时所有线程的状态。我知道 WAIT 是什么意思,但是 SUSPENDED 和 MONITOR 是什么意思? 提前致谢... 最佳答案 Dalvik 线程状态总结
我是一名优秀的程序员,十分优秀!