加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

Dart的快照和Java字节码有什么区别?

发布时间:2020-12-15 02:50:09 所属栏目:Java 来源:网络整理
导读:我一直在阅读Dart快照,他们经常与Smalltalk图像进行比较.但对我来说,它们听起来很像 Java字节码. 例如: “Dart快照只是令牌流的二进制序列化,通过解析代码生成.快照不是”正在运行的程序的快照“,它是在令牌转换为机器代码之前生成的.因此,没有程序状态是在
我一直在阅读Dart快照,他们经常与Smalltalk图像进行比较.但对我来说,它们听起来很像 Java字节码.

例如:

“Dart快照只是令牌流的二进制序列化,通过解析代码生成.快照不是”正在运行的程序的快照“,它是在令牌转换为机器代码之前生成的.因此,没有程序状态是在快照中捕获.“

而且他们是跨平台的:

“快照格式本身是跨平台的,这意味着它可以在32位,64位机器之间工作,等等.格式已经完成,因此可以快速读入内存,并强调最小化指针修正等额外工作. “

我在某处弄错了吗?

资料来源:
What is the snapshot concept in dart?
http://www.infoq.com/articles/google-dart

解决方法

快照包含表示加载脚本的VM数据结构,其序列化形式类似于Smalltalk图像.为了更好地理解快照中包含的内容,我们应该看看Dart VM在读取脚本时创建的内容:

>库对象,指的是所有顶级结构,如类或顶级方法和变量.
>类对象,包含描述所有方法和字段的所有对象.
>脚本和Tokenstream对象表示所有加载的源代码.
>源代码中所有使用的标识符和字符串常量的字符串对象.

使用与架构无关的格式生成快照时,此对象图将序列化为文件.这允许Dart VM在32位或64位计算机上反序列化此快照文件,并比从一组文件中读取原始脚本快得多地重新创建所有必需的内部VM数据结构(请参阅John的回答).

为了澄清约翰的答案.生成快照时,Dart VM不会解析所有源代码.它只需解析源的顶层就能提取类,方法和字段定义,因为它们在序列化图中表示.特别是方法体不被解析,并且由于脚本语言的惯例,一旦控制到达特定方法,将仅报告错误.

正如Ladicek所指出的,Java字节码的目的完全不同.一旦加载了字节码,您就可以在JVM中创建VM数据结构的快照,以获得类似的效果.

简而言之:快照包含开始执行脚本所需的Dart VM堆上分配的所有数据结构的有效表示.

-Ivan

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读