T. *_*nes 21 php static-methods memory-leaks memory-management
我正在开发一个Web应用程序,每秒可以看到几十个并发用户.我有一个类将在同一页面加载中多次实例化.在那个类中,我有一些属性在每个对象中总是相同的,所以我正在考虑声明这些属性,static
以减少在同一个类的多个实例被实例化时将使用的内存.页面请求.
这样做会为这个应用程序使用更少的内存,因为PHP只能存储一次静态属性的值吗?这样做会在并发用户之间节省内存,还是只在每个PHP进程中节省内存?
这对方法有何影响?如果这意味着对象可以循环使用相同的方法,那么为什么在尝试保存内存时,不会将类的所有方法都声明为静态?
我不清楚为什么以及何时会声明属性或方法是静态的,但我确实理解将它们声明为静态允许在不实例化类的对象的情况下访问它们(这感觉就像一个黑客...这些方法和属性应该在其他地方......不是吗?).我特别感兴趣的是static
声明影响内存使用的方式,以便在我的网络服务器上尽可能降低内存使用率......总的来说,我对发生的事情有了更好的理解.
rai*_*ace 18
当您将类方法/变量声明为静态时,它将被绑定并由类共享,而不是对象.从内存管理的角度来看,这意味着当类定义加载到堆内存中时,会在那里创建这些静态对象.当在堆栈内存中创建类的实际对象时,并且在完成静态属性的更新时,将更新包含静态对象的堆的指针.这确实有助于减少记忆,但不是很多.
从编程范例来看,人们通常选择使用静态变量来获得架构优势而不是内存管理优化.换句话说,当你想要实现单例或工厂模式时,可能会像你提到的那样创建静态变量.它提供了更强大的方法来了解"类"级别的内容,而不是"对象"级别的内容.
看看静态与单身测试:http://moisadoru.wordpress.com/2010/03/02/static-call-versus-singleton-call-in-php/
注意:由于某些原因,stackoverflow没有显示multilne主题,所以我正在添加图片.
Number of runs Singleton call time (s) Static call time (s)
100 0.004005 0.001511
1,000 0.018872 0.014552
10,000 0.174744 0.141820
100,000 1.643465 1.431564
200,000 3.277334 2.812432
300,000 5.079388 4.419048
500,000 8.086555 6.841494
1,000,000 16.189018 13.696728
Run Code Online (Sandbox Code Playgroud)
在此处查看更多详细信息:https://stackoverflow.com/a/3419411/260080
归档时间: |
|
查看次数: |
7713 次 |
最近记录: |