当前位置: 首页 > 面试题库 >

在Dalvik VM(Android的VM)上不能在Sun VM中做什么?

孟和怡
2023-03-14
问题内容

我知道您可以在 Dalvik的VM 中运行几乎所有Java,而在 Java的VM中
可以运行,但局限性不是很清楚。有没有人遇到任何重大绊脚石?任何主要的图书馆有麻烦吗?任何编译为Java字节码的语言( Scala
Jython 等)均无法按预期工作?


问题答案:

Dalvik在许多方面将无法处理或将不会以与标准Java字节码完全相同的方式来处理它们,尽管其中大多数都是相当先进的。

最严重的例子是运行时字节码生成
和自定义类加载。假设您想创建一些字节码,然后使用类加载器为您加载它,如果该技巧在您的普通计算机上有效,那么除非您更改字节码生成,否则保证在Dalvik上不起作用。

这会阻止您使用某些依赖项注入框架,最著名的示例是Google
Guice(尽管我敢肯定有人对此进行了工作)。另一方面,AspectJ应该工作,因为它使用字节码检测作为编译步骤(尽管有人尝试过,我也不知道)。

至于其他jvm语言,最终可以编译为标准字节码并且在运行时不使用字节码检测的任何内容都可以转换为Dalvik,并且可以正常工作。我知道人们确实在Android上运行Jython,而且效果还不错。

要注意的另一件事是 没有及时的编译
。这并不是严格意义上的Dalviks问题(如果愿意,您随时可以随时编译任何字节码),但是Android不支持并且不太可能这样做。结果是,尽管标准Java的微基准测试没有用-
组件在测试中的运行时特性不同于大型系统的组成部分-Android手机的微基准完全有意义。



 类似资料:
  • 从表面上看,具有的优点,使其听起来像将超过。一旦完全成熟,还有什么理由使用吗? 注意:我不是在问vs(如data.table vs dplyr:一个能做得好而另一个做得不好吗?),但是考虑到对于特定的问题,一个比另一个更好,为什么不是使用的工具。

  • 问题内容: 由于Java实现()和Android的虚拟机DalvikVM都是开源的,因此必须有可能在Google的DalvikVM之上实现Sun的JavaVM。这样就可以在android上开箱即用地运行基于JVM的应用程序和语言()。 是否正在持续努力以产生Sun JVM的这种实现? 问题答案: OpenJDK使用本机代码,因此它是一个不平凡的端口……至少有一个用Java编写的VM(JikesRV

  • 问题内容: 当我使用Express二进制文件创建示例Express应用程序时,引导代码包含以下几行: 我对app.router的了解不多。我以为这是处理路由(app.get(),app.post()等)规则的中间件,但是当我删除app.use(app.router)时,这些规则也会执行。线。 那么,该中间件的确切用途是什么? 问题答案: 这来自Express 2.x指南http://express

  • 我仔细地遵循了Minikube上的所有指示(我想)。我在Windows 10(1.7.2版)上安装了它,在Administrator下启动了Powershell控制台,设置了3个代理变量(我在代理后面),启用了Microsoft-VHyper-V,并运行了cmd:minikube start--vm-driver=Hyper-it下载了vm启动映像,然后我得到了以下行输出:*创建Hyper-vm(

  • 另外,为什么在键入Style标记的name属性时执行Ctrl+Space操作时看不到所有的r.attr元素? 请帮忙。谢了。

  • 问题内容: 如果html文件是本地文件(在我的C驱动器上),则可以使用,但是如果html文件在服务器上并且图像文件是本地文件,则无法使用。这是为什么? 任何可能的解决方法? 问题答案: 如果客户端可以请求本地文件系统文件,然后使用JavaScript找出其中的内容,则将是一个安全漏洞。 解决此问题的唯一方法是在浏览器中构建扩展。Firefox扩展和IE扩展可以访问本地资源。Chrome的限制更为严