InfoQ

InfoQ

新闻

我的书签

登录注册 以永久保存书签。

该内容已经被标记书签!

标记书签错误,请重试!

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

作者 Jon Rose 译者 郭晓刚 发布于 2007年11月14日

领域
架构 & 设计,
运维 & 基础架构,
语言 & 开发
主题
Java ,
编程 ,
面向对象设计 ,
RIA ,
架构 ,
富客户端/桌面 ,
Ruby ,
开放源代码
标签
闭包(Closures) ,
Flex ,
Adobe ,
Adobe集成运行时/AIR ,
Apollo ,
Flash

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

译者 郭晓刚 是InfoQ中文站架构社区编辑,创建并终结过数家软件小企业,翻译过多本技术书籍。

比Java多了方法闭包,其他方面看着很像Java 发表人 曹 云飞 发表于
Re: 比Java多了方法闭包,其他方面看着很像Java 发表人 Guo Xiaogang 发表于
Re: 比Java多了方法闭包,其他方面看着很像Java 发表人 曹 云飞 发表于
Re: 比Java多了方法闭包,其他方面看着很像Java 发表人 Guo Xiaogang 发表于
Re: 比Java多了方法闭包,其他方面看着很像Java 发表人 曹 云飞 发表于
  1. 返回顶部

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

    发表人 曹 云飞

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

  2. 返回顶部

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

    发表人 Guo Xiaogang

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

  3. 返回顶部

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

    发表人 曹 云飞

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

  4. 返回顶部

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

    发表人 Guo Xiaogang

    强类型 != 静态类型

  5. 返回顶部

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

    发表人 曹 云飞

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

深度内容

大规模视频网站的计费与流量管理

本次分享将会就大规模视频网站的计费与流量管理这个话题,从操作层面细细进行讲解和分析,为系统工程师们揭示平日里我们没有关心的另一些内容。同时也希望本次分享能揭示行业中的一些“潜规则”,让互联网行业的流量与带宽管理更为开放与简洁。
本次演讲视频录制于QCon杭州2011

专访Jeffrey Richter:Windows 8是微软的重中之重

Jeffrey Richter以其多本Windows核心技术的经典著作而闻名,同时,他深入掌握微软的.NET等一系列核心技术,2012年1月,Jeffrey Richter在北京接受了InfoQ中文站的专访,谈到Windows 8和WinRT编程,并就异步编程、Windows编程中的可扩展性、性能和安全性方面给出自己的建议。

应用云平台的可用性——从新浪SAE看云平台设计

云计算平台的可用性,相比传统互联网服务而言,更加复杂和困难,也更具有挑战性。本文借助新浪SAE云平台为读者讲述了云平台可用性的定义、如何打造高可用的平台,以及对云计算的用户提出了建议。

JVM定制改进 @ 淘宝

淘宝高度重视Java平台的健康发展,组建了一个团队专注于Java平台的底层部分的性能、功能与稳定性改进;工作主要基于OpenJDK中的HotSpot VM开展,其中一些通用的功能随后也会逐渐反馈给OpenJDK社区。希望能与使用Java平台开发应用的大家交流经验。
本次演讲视频录制于QCon杭州2011

"伤得起"的云计算应用——对云端应用之架构的思考

2011年4月21日至22日是值得云计算从业者纪念的日子。Amazon的IaaS服务出现故障,导致许多商业网站的服务中断,影响非常严重。作为云计算用户,我们需要思考的是,如何保证即便在云服务不可用的情况,我们的应用架构仍然能够屹立不倒?本文正是站在云计算用户的角度试图探讨这一问题。

让交付的速度跟上思考的速度

12人的技术团队,4组刀片服务器,每月20亿的访问量,每日1次准时部署,99.9%的可用性。这可能吗?当然。想知道如何做的吗?百姓网将与您分享他们在DevOps实践过程中的经验和技巧。
本次演讲视频录制于QCon杭州2011

架构之路——穿行在产品和业务之间

篱笆作为一家起源于社区的电子商务公司,反映到技术层面就是同时要面对产品和业务,以及经营战略的变化调整。如何在产品和业务的夹缝之间完成技术架构的抽象与平衡,寻找更有效的价值定位,这当中有些经验教训和个人感悟愿与众人分享。
本次演讲视频录制于QCon杭州2011

特性注入:成功三部曲

本文将对特性注入以及相关方法做一个扫盲性的介绍。我们会解释这个框架的关键要素,并附上实例来证实它们。为了让文章保持相对较短,我们不会深入到某个工具或方法中,而是会给出一些参考资料,以便大家做进一步的研究。