首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用静态和实例方法使用AS3对象内存

使用静态和实例方法使用AS3对象内存
EN

Stack Overflow用户
提问于 2010-11-17 01:02:07
回答 1查看 1.3K关注 0票数 4

这一直是我的一个长期的好奇心,我还没有来得及分析以找出答案,也还没有看到它被问到(对于AS3):

假设我有一堂课:

代码语言:javascript
复制
class MyClass {
   public function myMethod():String {
       return "some return value";
   }
}

它将被实例化很多次:

代码语言:javascript
复制
for (var i:Number = 0; i < 10000; i++) {
   var myObject:MyClass = new MyClass();
   trace(myObject.myMethod);
}

myMethod更改为静态会对我的应用程序的内存占用有什么影响吗?

mxmlc是否足够聪明,可以对该函数进行单个引用?

基本上,如果我保持我的方法是非静态的,就会有:

与静态版本没有区别只要内存是concerned

  • 10,000小实例引用单个function

  • 10,000函数字节码就会复制

在记忆里?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2010-11-17 01:49:23

是的,内存的使用会有所不同。基本上,因为在一种情况下,您有一个类,而在另一个类中,您有一个类和10000个实例。

不过,函数本身的代码不会重复10,000次。在这两种情况下,内存中只有一个函数。撇开语义不谈,实例方法基本上是一个静态函数,它将对实例的引用作为其第一个参数传递。

这个参数在Actionscript中是隐藏的,就像在大多数语言中一样(虽然我认为其他语言,比如Python,让您在函数定义中声明一个self/this参数;但是,您不必在调用时显式地传递它)。

每个对象都存储对其方法的引用(在实际运行时类型中声明的方法以及继承的方法),通常是在一个名为vtable的结构中。调用这些方法的协议通常包括在表中查找函数,并调用它传递对调用该方法的this对象的引用,以及其余的参数(如果有的话)。

无论如何,静态选项在某些情况下可能是一个合法的选择(最明显的是当您没有状态可保留时,因此您确实不需要对象),但是一般来说,实例方法更灵活,限制性更小。无论如何,我会说,在几乎每一种情况下,选择一种或另一种选择都是不明智的,因为其中一种选择占用的内存较少。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4200602

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档