Java对象创建与销毁过程 笔记

26 篇文章 0 订阅
9 篇文章 0 订阅

什么是java对象

包括java的基础类型、自定义Class 定义的变量。

对象的创建过程

举个例子,Object o= new Object() 的创建过程是怎么样的呢?如下图所示。

  1. 首先,申请空间。
  2. 创建对象。
  3. 已创建对象地址指向变量。

举个例子,Object  o= new Object();

对象的结构

对象的结构一般分为三部分:

  1. markworld。markwold存储了对象的锁信息,偏向锁状态,分代代年龄,Hash Code等信息。**markcode的存储的信息根据锁的状态进行调整。**如下图所示。
    在这里插入图片描述
  2. 类型 指针,即对象指向它的类元数据的指针,虚拟机通过这个指针来确定这个对象是哪个类的实例。
  3. 对齐部分。由于 HotSpot VM 的自动内存管理系统要求对象对象起始地址必须是8字节的整数倍,换句话说, 就是对象的大小必须是8字节的整数倍。而对象头部分正好是8字节的倍数( 1 倍 或者 2 倍), 因此,当对象实例数据部分没有对齐时,就需要通过对齐填充来补全。

对象的内存怎么过程

如下图所示。创建对象时:

  1. 先判断栈空间能不能放入对象,如果可以直接放栈空间,用完直接出栈结束。
  2. 栈空间不够大的情况,再判Eden空间够不够大,如不够,直接放老年代,最后通过FGC 垃圾回收。
  3. Eden如果够大,再判断TLAB(线程本地缓存)是否够大,够大放TLAB,通过YGC垃圾回收。
  4. TLAB不够大,那就放Eden区,通过YGC垃圾回收。

PS:实际TLAB也是放在Eden区,只不过TLAB是线程专属的,性能更好,优先使用。

在这里插入图片描述

Java 对象,你Get到了吗?

  • 3
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Java和Python在创建对象方面有一些相同点,也有一些不同点。 相同点: 1. 使用关键字创建对象:在Java中使用关键字 "new",而在Python中使用关键字 "class"。 2. 实例化对象:无论是Java还是Python,都需要通过实例化来创建对象。在Java中,使用类的构造函数来实例化对象;在Python中,使用类的初始化方法 "__init__" 来实例化对象。 3. 对象属性和方法:在Java和Python中都可以为对象定义属性和方法。 不同点: 1. 类的定义方式:在Java中,类的定义通常是以类名、成员变量和成员方法的形式进行;而在Python中,类的定义通常是以 "class" 关键字、属性和方法的形式进行。 2. 数据类型声明:Java是一种静态类型语言,需要在定义对象时显式声明变量的数据类型;而Python是一种动态类型语言,不需要声明变量的数据类型。 3. 构造函数:在Java中,构造函数与类名相同,并且可以有多个重载形式;而在Python中,构造函数是类的初始化方法 "__init__",只能有一个。 4. 继承机制:Java支持单继承和多实现,即一个类只能继承自一个父类,但可以实现多个接口;Python支持多继承,即一个类可以同时继承自多个父类。 5. 销毁对象:在Java中,对象销毁由垃圾回收机制自动处理;而在Python中,对象销毁由解释器通过引用计数机制和垃圾回收机制共同处理。 这些是Java和Python在创建对象方面的一些相同与不同之处。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值