PHP中使用静态方法和属性是否使用更少的内存?

问题描述 投票:22回答:8

我正在开发一个Web应用程序,该应用程序每秒可以看到数十个并发用户。我有一个将在同一页面加载中实例化很多次的类。在该类中,我具有一些在每个对象上始终相同的属性,因此我正在考虑将这些属性声明为static,以减少实例化此类的多个实例时将要使用的内存。在同一页面请求期间。

这样做会不会为该应用程序使用更少的内存,因为PHP只能将静态属性的值存储一次?这样会节省并发用户的内存,还是只是在每个PHP进程内?

这对方法如何起作用?如果这意味着对象可以回收相同的方法,那么如果尝试保存在内存中,为什么不将类的所有方法都声明为静态方法?

我不完全理解为什么以及何时将属性或方法声明为静态,但是我确实理解,将它们声明为静态可以在不实例化类的对象的情况下访问它们(这感觉就像是hack。 ..这些方法和属性应该在其他地方...不?)。我对static声明影响内存使用的方式特别感兴趣,以尽力将Web服务器上的内存使用率保持在尽可能低的水平……而且总的来说,这样我对发生的事情有了更好的了解。 >

我正在开发一个Web应用程序,该应用程序每秒可以看到数十个并发用户。我有一个将在同一页面加载中实例化很多次的类。在该类中,我有一些属性...

php memory-management memory-leaks static-methods
8个回答
18
投票

当您将类方法/变量声明为静态时,它绑定到该类而不是对象,并由该类共享。从内存管理的角度来看,这意味着将类定义加载到堆内存时,将在此处创建这些静态对象。当在堆栈存储器中创建类的实际对象并且完成对静态属性的更新时,指向包含静态对象的堆的指针将更新。这确实有助于减少内存,但不会减少太多。



4
投票

在PHP中使用静态方法和属性是否使用较少的内存?


1
投票

静态方法调用在许多迭代中都更快,但是静态方法并不能真正节省内存。


1
投票

通常,是的。静态方法和属性使用较少的内存。但是,差异很小。


0
投票

我不是PHP的内存管理专家,但我会说您不会节省太多。是否保存以及节省多少取决于某些方面:


0
投票

我刚刚改进了斯坦尼斯拉夫链接的基准以使其生效:


-1
投票

如果共享数据,请使用静态。它更快,并节省了对象实例化的过程。当您需要单个入口点时,单例会胜于静态。我大约在1周前在自己的博客上介绍了此内容。

© www.soinside.com 2019 - 2024. All rights reserved.