抖音技术能力大揭密!钜惠大礼、深度体验,尽在火山引擎增长沙龙,就等你来! 立即报名>> 了解详情
写点什么

从 Java 开发者的角度看 ActionScript 虚拟机

2007 年 11 月 14 日

ActionScript Virtual Machine 2(AVM2)在 Flash Player 9 运行时环境中执行 ActionScript 3.0(AS3)字节码。ActionScript 3 是一种面向对象编程语言,用于在 Adobe Flex 和 AIR 中构建 Flash 应用程序。AS3 完全符合 ECMAScript 标准第 3 版。

对 Java 开发者来说,虚拟机的概念并不新鲜,但 AVM2 中还是有好些特性值得一观。 Per Olesen 上周发表了一篇博客文章讨论 AVM2 中若干值得注意的特性,包括:强类型、方法闭包、即时(JIT)编译器和垃圾收集。

类型信息
AS3 支持强类型,Olesen 说:

在 AS3 之前,代码编译后所有类型信息都会被剥除。在运行时,所有东西都只是动态类型的小原子。从 AS3 起,类型信息会一直保留到运行时。 ……使用类型明确的变量可以提高性能表现和降低内存消耗。

方法闭包
AS3 支持方法闭包,Olesen 说:

AS3 给我们提供了方法闭包,也就是说我们可以创建实为函数的变量,并四处传递它,而该函数仍然保持着它被创建之时的上下文环境(也就是说“this”仍然是定义函数时的那个“this”)。

在 Gary Grossman 和 Emmy Huang 的文章《 Action Script 3.0 概观》中,他们描述了方法闭包的主要用途:

由于方法闭包,ActionScript 3.0 中的事件处理得以提供内建的事件委托,从而得到了简化。 myButton.addEventListener(“click”, someMethod);

即时(JIT)编译器
JIT 编译这种技术将字节码转换成原生机器码来提高性能。Adobe 的文档《ActionScript Virtual Machine 2 (AVM2) Overview》详细解说了它对开发者的影响:

在实践中,AVM2 可经由 JIT 在运行时转换代码,但这并不会影响程序执行的语义,只会影响性能。

Olesen 指出了开发者应当注意的一个影响:

AVM2 的 JIT 有一个地方应该注意:构造器是不被 JIT 的,因此如果你的一个类里有严重影响性能的代码,把它移出构造器。

垃圾收集
Olesen 从大框架上描绘了 AVM2 中的垃圾收集:

内存管理和垃圾收集器属于 MMgc 子项目。它采用了一种延迟引用计数(Deferred Reference Counting,DRC)机制,并结合一个增量的、保守的标记 / 清除收集器。当然,垃圾收集器实现已经为达到最佳的客户机性能作了优化,它使用小尺度(30ms)的时间片。

如果读者想查阅更多资料来源, Farata Systems 有一篇文章详细比较了 Java 5 和 ActionScript 3 的语法异同。另外,在 Mozilla Tamarin Project 的资料中可以找到 AVM2 的更多信息。(译注: Tamarin 是 Adobe 将 AVM2 捐献给 Mozilla 之后的产物,目标是构建一个高效、开源的 ECMAScript 4 实现。)Tamarin 是 Flash Player 9 和 AIR 平台使用的 AVM2 实现。另外,Adobe 有一个专门为 Java 开发者服务的 Flex 社区网站: http://flex.org/java/

对于 Java 开发者来说,ActionScript 的语法以及虚拟机架构与 Java 都有不少相似之处,这应当会让学习过程变得轻松一些。

查看英文原文: Understanding the ActionScript Virtual Machine for Java Developers

2007 年 11 月 14 日 02:201416
用户头像

发布了 225 篇内容, 共 49.6 次阅读, 收获喜欢 30 次。

关注

评论

发布
暂无评论
发现更多内容

云计算带来的变革将如何在2021年加速创新

浪潮云

云计算

产品训练营-第五周作业

羽室

跨云迁移过程中的数据同步及一致性校验实践(二)

UCloud技术

迁移 数据传输 数据库迁移 数据迁移

数据产品经理实战-用户运营体系搭建

第519区

算法 数据产品 数据运营

Mac 下配置 Intellij IDEA + Tomcat 出现权限问题的解决办法

少平

tomcat

“蚂蚁牙黑”太火,想玩就用ModelArts做一个

华为云开发者社区

AI 动画 modelarts 图像

字节跳动力推的OKR,是未来企业发展的标配吗?

ToB行业头条

神经网络攻防:01.模型到底是什么?

P小二

神经网络 网络安全 AIPwn AI安全 P小二

入选SIGMOD2021的时间序列多周期检测通用框架RobustPeriod如何支撑阿里业务场景?

阿里云大数据AI技术

人工智能 数据库 大数据

产品训练营 - 第五周 - 作业

邹小胖

产品经理训练营

一个15年的架构师谈“如何成为一名优秀的解决方案架构师”

华为云开发者社区

架构 软件 架构师 华为云

Spring中的事务使用注意事项

少平

spring

开工第一周,有哪些助你弯道超车的好书?

博文视点Broadview

重磅!京东云自研第四代云主机发布;曝国外物理学家开发出用于量子计算机的汇编语言

京东科技开发者

微软 开发者 量子计算机 谷歌

华为AR&VR黑科技:以“自由视角”360度尽展舞台唯美

华为云开发者社区

华为 算法 视频 AR&VR 全息显示

公安合成作战系统!智慧警务情指行一体化建设解决方案

源中瑞-龙先生

公安合成作战系统开发 产品解决方案 情指行一体化 公安

Elasticsearch Search Options 搜索参数

escray

elastic 七日更 28天写作 死磕Elasticsearch 60天通过Elastic认证考试

小心你的个人信息——GitHub 热点速览 v.21.09

HelloGitHub

GitHub 终端工具 开源项目 社交

Java 中各种DTO,POJO 等的概念

少平

工作日志3-1

技术骨干

Linux入门篇 —— 手把手教你 Linux 三种网络配置方法

若尘

Linux 网络

隧道建设手段结合科技能有多强大?盾构机可视化让工程化繁为简

一只数据鲸鱼

物联网 数据可视化 3D可视化 盾构机 隧道工程

SARIF:DevSecOps工具与平台交互的桥梁

华为云开发者社区

安全 DevSecOps SARIF 自动化平台 OASIS

ETL工具—Taskctl 如何搭建配置作业类型的管理

会飞的鱼

大数据处理 kettle 运维自动化 海豚调度 ETL

跨云迁移过程中的数据同步及一致性校验实践(一)

UCloud技术

迁移 数据传输 数据库迁移 数据迁移

左手画条龙右手画彩虹——认知负荷理论

Justin

心理学 28天写作 游戏设计

阿里巴巴Druid,轻松实现MySQL数据库加密!

王磊

Java springboot Druid

vivo 官网资源包适配多场景的应用

vivo互联网技术

低代码 无服务器云函数

FindBugs:Java 静态代码检查

少平

代码审查

关于 Synchronized 的一个点,网上99%的文章都错了

yes

Java JVM

一场由fork引发的超时,让我们重新探讨了Redis的抖动问题

华为云开发者社区

数据库 redis 华为云 GaussDB fork

Study Go: From Zero to Hero

Study Go: From Zero to Hero

从Java开发者的角度看ActionScript虚拟机-InfoQ