Dart VM仍在使用吗?

Dra*_*Fax 23 dart flutter

我一直在使用dart/flutter进行一些项目,我真的非常喜欢它.

我已经读过,在构建移动应用程序时,dart使用本机代码构建本机应用程序.但我也读过dart有自己的VM性能.

我想要了解的是,如果该VM是您构建移动应用程序时使用的VM,或者它是否正在构建其为本机应用程序编译的其他代码.如果它做了别的什么,飞镖VM仍然用于什么?

Vya*_*rov 50

简短回答:是的,在构建移动应用程序时仍然使用Dart VM.

现在更长的答案:Dart VM有两种不同的操作模式:JIT one和AOT one.

在JIT模式下,Dart VM能够动态加载Dart源,解析它并在运行时将其编译为本机机器代码以执行它.在开发应用程序时使用此模式,并提供调试,热重新加载等功能.

在AOT模式下,Dart VM不支持动态加载/解析/编译Dart源代码.它仅支持加载和执行预编译的机器代码.然而,即使预编译的机器代码仍然需要VM来执行,因为VM提供包含垃圾收集器的运行时系统,dart:*库运行所需的各种本机方法,运行时类型信息,动态方法查找等.此模式用于已部署的应用程序.

AOT模式的预编译机器代码来自哪里?当您在发布模式下构建应用程序时,此代码由Flutter应用程序中的(特殊模式)VM生成.

您可以在此处阅读有关Dart VM如何执行Dart代码的更多信息.

  • 对于颤振,这个答案似乎是错误的:https://flutter.dev/docs/resources/faq#how-does-flutter-run-my-code-on-android (3认同)

小智 10

在发布模式下使用Dart VM时,按照软件实现虚拟计算机处理器的传统意义上讲,它不是真正的VM(虚拟机),它具有自己的机器语言,不同于硬件的机器语言。

这就是引起原始问题混乱的原因。在发布模式下,Dart VM本质上是一个运行时库(与所有高级语言所需的运行时库没有太大区别)。