InfoQ

新闻

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

作者 Jon Rose译者 郭晓刚 发布于 2007年11月14日 上午2时20分

社区
Architecture,
Ruby,
Java
主题
开放源代码,
编程,
RIA,
面向对象设计,
富客户端/桌面
标签
Adobe,
Adobe集成运行时/AIR,
Flex,
Flash,
Apollo,
闭包(Closures)

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

5 条回复

回复

比Java多了方法闭包,其他方面看着很像Java 发表人 cao yunfei 发表于 2007年11月16日 上午1时49分
Re: 比Java多了方法闭包,其他方面看着很像Java 发表人 Xiaogang Guo 发表于 2007年11月17日 下午12时19分
Re: 比Java多了方法闭包,其他方面看着很像Java 发表人 cao yunfei 发表于 2007年11月19日 上午1时24分
Re: 比Java多了方法闭包,其他方面看着很像Java 发表人 Xiaogang Guo 发表于 2007年11月19日 上午8时50分
Re: 比Java多了方法闭包,其他方面看着很像Java 发表人 cao yunfei 发表于 2007年11月20日 上午12时47分
  1. 返回顶部

    比Java多了方法闭包,其他方面看着很像Java

    2007年11月16日 上午1时49分 发表人 cao yunfei

    对Java的态度要取其糟粕,取其精华

  2. 返回顶部

    Re: 比Java多了方法闭包,其他方面看着很像Java

    2007年11月17日 下午12时19分 发表人 Xiaogang Guo

    比Java还多了动态语言的优势,比如动态类型和Mixin。

  3. 返回顶部

    Re: 比Java多了方法闭包,其他方面看着很像Java

    2007年11月19日 上午1时24分 发表人 cao yunfei

    AS3支持强类型,那么就应该不是动态类型了吧?

  4. 返回顶部

    Re: 比Java多了方法闭包,其他方面看着很像Java

    2007年11月19日 上午8时50分 发表人 Xiaogang Guo

    强类型 != 静态类型

  5. 返回顶部

    Re: 比Java多了方法闭包,其他方面看着很像Java

    2007年11月20日 上午12时47分 发表人 cao yunfei

    多谢,我搞错了, 强类型与静态类型是正交的概念,完全不同。

独家内容

Tapestry for Nonbelievers

I. Drobiazko和R. Zubairov合作撰写了一篇文章,详细介绍Apache Tapestry 版本5——一个面向组件web框架。文章向读者展示了创建组件方法,并谈到了Tapestry中的IoC以及Ajax的相关特性。

ESB拓扑方案

在本文中,Adrien Louis讨论了两种基于ESB的SOA拓扑方案的优缺点:单个公司级ESB vs. 彼此互联的“部门级”ESB系统。Adrien讨论了每种方案对管理、业务监测、治理、可靠性和编配等问题的影响。

毛新生谈Project Zero和软件新发展

InfoQ中文站有幸与IBM中国开发中心Web 2.0首席架构师毛新生聊了聊Project Zero和软件新发展的相关话题,其中包括Project Zero的组织形式、支持的语言、以及未来发展方向等等。

Google图表及gchartrb初探

Google图表是一项用于生成图表的Web服务。这篇文章详细介绍了Google图表的接口以及可以允许Ruby方便创建图表的gchartrb库。

使用Erlang和Yaws开发REST式的服务

在这篇文章中,Steve Vinoski解释了如何用Erlang和Yaws Web服务器创建REST式Web服务。

Segundo Velasquez与客户眼中的敏捷

在某个软件产品设计的初始阶段,Segundo Velasquez曾以客户的身份与一个敏捷团队共同工作;Deborah Hartmann就这段经历对他进行了采访。

开放平台技术架构剖析

本视频从互联网的分类讲起,介绍了开放平台的类型、开放的价值以及开放平台对开发者的机会和挑战。然后以雅虎的NCP开放平台为例,讲解了NCP的特点、基本架构和具体的开发过程。

用UML做好系统分析

使用UML如何能让我们做好系统分析的工作呢?就让我们通过基金模拟项目,先睹为快,抢先体验一番。 本文节选自《系统分析师UML实务手册》的第二章。