首页
学习
活动
专区
圈层
工具
发布
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    面向对象Java开发——对象的内存原理和内存图

    在使用Java开发时,面向对象是重点和难点,而要理解面向对象的问题,最重要的还是要搞清楚其在内存中的原理和内存图,本文记录了Java对象在内存中的情况,包括this,基本数据类型和引用数据类型以及局部变量和成员变量的原理...目录 预备知识 一、一个对象的内存图 二、多个对象的内存图 注意 三、两个引用指向同一个对象内存图 四、this的内存原理 五、基本数据类型和引用数据类型的区别 六、局部变量和成员变量的区别 ----...一、一个对象的内存图 创建一个对象,要经历以下7个步骤 加载class文件 申明局部变量 在堆内存中开辟一个空间 默认初始化 显示初始化 构造方法初始化 将堆内存中的地址值赋值给左边的局部变量 比如说运行代码...二、多个对象的内存图 同理,如果要处理不止一个对象,那么也来举个例子,比如说有两个对象,只要出现new,就说明要创建一个对象,在堆空间内开辟块空间,创建几个就开辟几块,且相互独立。...,也能通过001也能找到堆内存的空间,相当于就是两个变量都指向了同一个对象。

    1.3K20

    Java 对象在内存

    平常工作中,我们只new一个对象,却基本不关心这个对象到底占了我们多少空间....今天就一起看下,对象的空间占用情况 首先,内存中的对象是由以下几部分构成的: 结合上图以下类为例,看下内存空间的占用情况 public class MyObject { int i = 123...对齐补全: JVM中开辟的内存空间必须是8字节的倍数, 如果缺少位数,需要补全为8的倍数; 以上各字段共28字节,需补全4字节 所以MyObject对象共占用8+4+0+16+4=32字节 下面利用openjdk...提升执行效率 头部空间补全 在关闭指针压缩之后,在看数组对象的内存空间,就可以发现产生了数据补全的情况 Mark down使用8字节 Klass pointer 使用8字节 数组长度 使用4字节 头部数据补全.../A Instance size: 40 bytes Space losses: 4 bytes internal + 0 bytes external = 4 bytes total 以上,就是一个对象内存的占用情况

    41010

    对象内存计算神器

    今天给大家介绍一个对象内存计算神奇。jvm内存溢出的时候,我们可以通过很多方法查看原因,很多时候也需要查看具体是哪一个大对象导致内存溢出。...这里要介绍的是lucene提供的专门用于计算堆内存占用大小的工具类:RamUsageEstimato maven坐标: 4.0.0 RamUsageEstimator就是根据java对象在堆内存中的存储格式,通过计算Java对象头、实例数据、引用等的大小...常用方法API: //计算指定对象及其引用树上的所有对象的综合大小,单位字节 long RamUsageEstimator.sizeOf(Object obj) //计算指定对象本身在堆空间的大小,单位字节...如果非要说这种方式有什么缺点的话,那就是这种方式计算所得的对象头大小是基于JVM声明规范的,并不是通过运行时内存地址计算而得,存在与实际大小不符的这种可能性。

    4.5K40

    JS面向对象

    面向对象特点封装 让使用的人不考虑内部实现,只考虑功能使用,把内部代码保护起来,提供api接口让用户调用继承 从父类继承出一些方法和属性,利于代码复用多态 不同对象作用于同一操作产生不能效果JS三大对象宿主对象所有非本地对象都属于宿主对象所有...DOM和BOM对象都属于宿主对象嵌入到网页的JS来说,宿主对象就是浏览器提供的,比如:Window和Documnet等本地对象包括:Object、Array、Date、RegExp、Boolean、Number...构造函数/创建实例 通过this添加的对象和属性都指向当前对象,所以在实例化的时候,通过this添加的方法和属性都会在内存中复制一份。...this.start = function () {// console.log("走这里了吗 ");// };// } demo1和demo2占据不同的内存空间...优点:在内存中创建一次,实例化对象都会指向prototype对象;通过实例创建的方法和属性不会开辟新的空间,可以判断实例的类型 缺点:共享一份原型function Fn(val){ this.color

    1.6K10
    领券