php静态方法什么时候开始占用内存呢?不同php进程会共用静态方法吗?

php静态方法是什么时候开始占用内存呢?

比如一个类

class Test {
    public static function test1(){}
    public static function test2(){}
    ...
}

我考虑了如下几个情况:

  1. 在执行php代码的时候,就扫描静态方法,不管有没有include., 效率太低应该不会使用。

  2. 在我include 'Test.php'的时候,会不会扫描类,把静态方法,加载进内存。这时候的话,应该就把所有方法都加载进内存了。

  3. 假如2不成立,则是否在调用方法Test::test1();的时候,加载进内存,如果这时候加载的话,是仅加载当前方法,还是加载当前类所有的静态方法?


不同php进程会共用静态方法吗?

如下图

图片描述

这里有位大神说了下Nginx和Php-fpm进程和线程:https://segmentfault.com/q/10...

如果是这样的话,一个Php-fpm进程服务一个客户端,但是如果并发太高,不会有很多进程吗?按照进程通信来讲,不同客户端的请求,属于不同的进程,应该不会互相影响,应该进程所占内存中都有一份静态方法的缓存,但是如果一个客户端有多次请求的话,看文章说是阻塞的单线程模型,那应该每次请求都要等上次请求完成才开始执行,是否这时候会清楚静态方法的缓存,还是继续保存?如果清除的话,应该就不会共用静态方法了。

阅读 8.5k
4 个回答
  • php静态方法是什么时候开始占用内存呢?

    • 当你把这个类require或include进去的时候

  • 不同php进程会共用静态方法吗?

    • 首先,进程是系统进行资源分配和调度的基本单位,所以执行每个php脚本的php-fpm进程所使用的内存是互相隔离的

    • 其次,php脚本的生命周期是在脚本执行完毕结束,脚本所占用的内存一般会被回收

    • 因此,不同php进程会一般情况下不会共用静态方法

  • 静态方法不占用内存;

  • 静态变量会占用内存,重复调用不占用;(所以在TCP等长连接协议情况下处理业务,静态变量会减少资源消耗)

  • 载入文件会占用内存;

  • 创建对象会占用内存;(载入类,但不new不会)

  • 大部分框架,在命名空间下,use了;但还没有new,不会载入文件,也不会创建对象;只有new了之后才会载入文件,也就跟着占用内存;

  • 在http请求过程中,请求完成,对应的内存就会释放;(不同请求不共用静态资源)


以上个人理解!

不会,因为处理完每个请求后都会释放内存

首先,在不考虑代码缓存支持的情况下,不同的处理进程之间没有任何的代码共享关系,静态方法也不会驻留在内存中。

其次,PHP的类、函数都是在载入(include)时解析和装在进内存的,也就是你说的第二种方式。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏