• PHP内存模型


    php为单进程的,由apache代执行,每一个请求,由apache从进程池中取出进程,初始化数据结构,创建进程.

    变量共享,类似于session的内容,为所有进程所共享,即单例模式.默认是采用磁盘文件实现session的管理

    即static变量,是一次请求说单独的享有的,不能被所有请求所共享.

    session共享

    由于每次请求代由apache创建进程,所以由session共享问题,php是使用文件的机制达到session共享.

    内存管理

    和C语言一样,同样具有相关的函数
    https://www.php.net/manual/zh/internals2.memory.management.php

    php生命周期

    这里一张图概述

    8ce302c402d81f00c37449068763d2be_1338x2269

    Zend虚拟机

    php的引擎为Zend虚拟机
    其中Zend虚拟机和js虚拟机类似,感觉一个内容
    运行流程

    2019-05-04-00-05-49----

    Zend和php关系

    Zend Technologies公司来管理PHP的开发

    内存泄漏

    由于php属于高级语言,自动管理内存,但是依旧会有内存泄漏的问题.

    使用valgrind进行内存泄漏的分析

    php内存管理

    分为三层 存储层(storage)、堆层(heap)和接口层(emalloc/efree)

    06-02-01-zend-memeory-manager

    一张图

    php是使用链来管理的.

    一张图

    06-02-02-free_buckets

    定义一个数组指针,每次通过数组指针指向所请求的内存空间

    在单个请求初始化的时候,内核会初始化free_buckets列表,其是一个数组指针,通过存储的是双向链表的头尾指针,用来达到对内存的管理

    关于js的内存

    js的内存的使用原型链的方式,有一个总的windows节点,每次创建的时候,会挂载到windows节点上

    关于java内存

    之前说明的全是动态语言的内存机制,现在说明静态语言,以java为例,每次写好java文件以后,编译生成class文件,class文件即定义了内存的结构,使用装载命令,装载进入内存,即内存结构被固定化. 在运行的期间,当使用new命令,将会根据class文件定义的内存模型,在jvm的虚拟机中的创建出一样的对象,并进行指向,运算的时候,本质通过栈进行运算.

    通过这种方式,静态语言模拟动态语言.

    关于动静态语言

    静态语言定义好的内存结构,进行运算即可

    动态语言,和原型链类型,进行加载上去即可.

    垃圾回收

    之前php只是简单的引用计数法进行垃圾回收.
    不想看了 http://docs.php.net/manual/zh/features.gc.collecting-cycles.php
    https://researcher.watson.ibm.com/researcher/view.php?person=us-bacon

    在无知的道路上缓步前行
  • 相关阅读:
    Docker启动ubuntu容器中使用sudo后报错,bash: sudo: command not found
    Redis持久化rdb&aof
    Python3中copy模块常用功能及其他几种copy方式比较
    学习笔记:tkinter模块常用参数(python3)
    Python核心编程第二版(中文).pdf 目录整理
    11、487-3279
    10、Crashing Balloon
    9、Exponentiation
    8、Fire Net
    7、Reverse Root
  • 原文地址:https://www.cnblogs.com/melovemingming/p/10908843.html
Copyright © 2020-2023  润新知