对象在PHP里面和整型、浮点型一样,也是一种数据类,都是存储不同类型数据用的, 在运行的时候都要加载到内存中去用,那么对象在内存里面是怎么体现的呢?内存从逻辑上说大体上是分为4段,栈空间段、堆空间段、代码段、初始化静态段,程序里面不同的声明放在不同的内存段里面。

数据段(data segment),也叫全局段:通常是指用来存放程序中已初始化且不为0的全局变量如:静态变量和常量

代码段(code segment / text segment):通常是指用来存放程序执行代码的一块内存区域,比如函数和方法

栈空间段 : 是存储占用相同空间长度并且占用空间小的数据类型的地方,比如说整型1,10,100,1000,10000,100000 等等,在内存里面占用空间是等长的,都是64 位4 个字节。

(也就是说存放普通变量的)

那么数据长度不定长,而且占有空间很大的数据类型的数据放在那内存的那个段里面呢?这样的数据是放在堆内存里面的。

栈内存:是可以直接存取的,而堆内存是 不可以直接存取的内存。

对于我们的对象来数就是一种大的数据类型而且是占用空间不定长的类型,所以说对象是放在堆里面的,但对象名称是放在栈里面的,这样通过对象名称就可 以使用对象了。$p1 就是我们实例出来的对象名称,同理,$p2,$p3 也是我们实例出来的对象名称,一个类可以实例出多个对象,每个对象都是独立的,上面的代码相当于实例出来3 个人来,每个人之间是没有联系的,只能说明他们都是人类,每 个人都有自己的姓名,性别和年龄的属性,每个人都有说话和走路的方法,只要是类里面体 现出来的成员属性和成员方法,实例化出来的对象里面就包含了这些属性和方法。\

对于这个条代码,$p1 是对象名称在栈内存里面new Person()是真正的对象是在堆内存 里面的,具体的请看下图:

从上图可以看出$p1=new Person();等号右边是真正的对象实例,在堆内存里面的实体, 上图一共有3 次new Person(),所以会在堆里面开辟3 个空间,产生3 个实例对象,每个对象之间都是相互独立的,使用自己的空间,在PHP 里面,只要有一个new 这个关键字出现就会 实例化出来一个对象,在堆里面开辟一块自己的空间。 每个在堆里面的实例对象是存储属性的,比如说,现在堆里面的实例对象里面都存有姓 名、性别和年龄。每个属性又都有一个地址。 $p1=new Person();等号的右边$p1 是一个引用变量,通过赋值运算符“=”把对象的首地址 赋给“$p1”这个引用变量,所以$p1 是存储对象首地址的变量,$p1 放在栈内存里边,$p1 相当 于一个指针指向堆里面的对象,所以我们可以通过$p1 这个引用变量来操作对象,通常我们也 称对象引用为对象。

php 对象 堆栈,PHP对象在内存堆栈中的分配相关推荐

  1. 45.JVM调优策略、常见问题:内存泄漏(年老代堆空间被占满、持久代被占满、堆栈溢出、线程堆栈满、系统内存被占满)优化方法:优化目标、优化GC步骤、优化总结;案例分析(公司系统参数、网上给的配置参数)

    45.JVM调优策略 45.1.常见问题 45.1.1.内存泄漏 45.1.1.1.年老代堆空间被占满 45.1.1.2.持久代被占满 45.1.1.3.堆栈溢出 45.1.1.4.线程堆栈满 45. ...

  2. Linux环境中堆栈和堆相关内存损坏的基本原理和调试方法介绍

    本文讲的是Linux环境中堆栈和堆相关内存损坏的基本原理和调试方法介绍, 前言 建议阅读本文之前,你对ARM组件的有个基本了解,本文会先为你介绍32位Linux环境中进程的内存布局,然后再介绍堆栈和堆 ...

  3. java char占用多少字节_Java虚拟机:Java对象大小、对象内存布局及锁状态变化

    一个对象占多少字节? 关于对象的大小,对于C/C++来说,都是有sizeof函数可以直接获取的,但是Java似乎没有这样的方法.不过还好,在JDK1.5之后引入了Instrumentation类,这个 ...

  4. java堆栈分析工具_JVM内存分析工具使用

    Java 内存堆栈分析.我们在分析现网问题时候,经常会遇到一些问题从日志上无法分析的疑难问题.在我们举足无措的时候,我们可以分析一些JVM内存,来看看问题出在哪里了. 我们经常用到的一工具: 分析栈内 ...

  5. 使用返回或调用E x i t T h r e a d的方法撤消线程时,该线程的内存堆栈也被撤消

    注意 当使用返回或调用E x i t T h r e a d的方法撤消线程时,该线程的内存堆栈也被撤消. 但是,如果使用Te r m i n a t e T h r e a d,那么在拥有线程的进程终 ...

  6. 数据结构中堆栈和内存堆栈的区别

    最近接触数据结构中的堆栈,想到了初学Java时,关于新实例化或者定义一个对象时候,声明对象,对象的变量名存放在栈内存中,当我们手动new之后,就会在堆内存中开辟一个空间,用来存放变量地址值,并将变量地 ...

  7. C语言:一个涉及指针函数返回值与printf乱码、内存堆栈的经典案例

    C语言:一个涉及指针函数返回值与printf乱码.内存堆栈的经典案例 一个奇怪的C语言问题,涉及到指针.数组.堆栈.以及printf.以下实现: 整数向字符串的转换,返回字符串指针,并在main函数中 ...

  8. jvm性能调优 - 05对象在JVM内存中的分配和流转

    文章目录 前文回顾 大部分正常对象都优先在新生代分配内存 到底什么情况下会触发新生代的垃圾回收? 长期存活的对象会躲过多次垃圾回收? 老年代会垃圾回收吗? 关于新生代和老年代的对象分配,这就完了吗? ...

  9. 一个Java对象到底占用多大内存?

    最近在调研MAT和VisualVM源码实现,遇到一个可疑问题,两者计算出来的对象大小不一致,才有了这样疑惑. 一个Java对象到底占用多大内存? 为了复现这个问题,准备了4个最简单类: class A ...

最新文章

  1. 微信小程序 canvas 内容(宽高) 兼容不同机型
  2. 41 | 案例篇:如何优化 NAT 性能?(上)
  3. 数据结构笔记(十四)-- 串的模式匹配算法
  4. Python字符串isalnum()
  5. c语言 多个线程对同一变量执行memcpy_你可曾听过网络编程中应用线程本地存储?...
  6. 三台服务器的时间同步-Linux
  7. 最全的数据结构和算法,不信过来看看有没有漏掉的
  8. shark恒破解视频的笔记
  9. 百度智能云-文字识别SDK-识别验证码Demo
  10. python怎么添加多行注释_python如何注释多行
  11. JavaScript TypeScript 学习总结
  12. OIF 4.0协议分析心得-1
  13. (struct)结构体变量作为函数参数调用的方法小结
  14. WPS 操作之在指定页插入页码
  15. 网线水晶头接法(附图说明)
  16. STM32学习笔记---OLED页寻址方式
  17. 洛谷 P1293 班级聚会
  18. 二、 常见传感器的检测
  19. 网络营销工具:网上收集的30个常用SEO工具
  20. 扎拉赞恩 服务器 微信群,魔兽世界怀旧服回音群岛扎拉赞恩任务怎么做?WOW怀旧服扎拉赞恩在哪里?...

热门文章

  1. 基于Java的智能问答系统
  2. [Hive]Hive合并小文件
  3. 2018“一带一路”阿里巴巴诸神之战全球创客大赛全面启动
  4. (转)SQL Server数据库状态监控 - 作业状态
  5. HAL驱动的串口编程陷阱
  6. [ACM] hdu 2082 找单词 (母函数)
  7. Android ListView 滑动背景为黑色的解决办法 listview小知识整理
  8. WCF Ria Service“操作失败,指定的命名链接在配置中找不到”错误解决方法
  9. iOS OpenGL ES2.0教程   Lesson03 旋转
  10. 如何在多台linux上同时跑相同的command?