java对象生命周期分析

本文深入分析Java对象从创建到销毁的全过程,通过字节码解析,揭示对象在类加载器和JVM中的运行机制,探讨堆内存布局及线程安全问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

java对象生命周期分析

说明:本文是我对自己之前学到知识的总结,可能存在许多不足,我希望通过此方式来回顾知识,加强理解,也希望大家能指出文中的错误与不足,互相学习。

  • 通过字节码分析程序中对象是怎样加载运行的
  • 1.代码
public class People{
    public int age = 18;
    public People(){
        this.age = 20;
    }
    public static void main(String[] args){
        People p = new People();
        System.out.println(p.age);
    }
}
输出结果为:20
  • 2.对象在类加载器中执行
    在这里插入图片描述
  • 3.对象在JVM中运行过程
    People.class通过类加载器完成加载后,类的所有信息就保存在了方法区中,JVM通过这些信息找到Main方法,开始执行Main方法,当遇到new关键字时,创建对象,将对象压入栈中执行。

![在这里插入图片描述](https://img-blog.csdnimg.cn/20191207103653376.png
在这里插入图片描述

  • 4.补充:在堆内存中的对象,一般由对象的头部信息(持有指向方法区的指针,对象持有锁标志,GC年龄信息等),实例数据(属性值等信息),对齐填充(JVM要求java的对象占的内存大小应该是8bit的倍数)组成。

总结:程序运行在自己的线程栈中,私有空间,线程安全。在程序加载到JVM中,遇到new创建对象时,会在堆内存中开辟一块空间存放对象信息,堆内存空间被所有程序共享,所以存在线程安全问题。为了使线程安全,我们一般可以通过给临界区资源加锁的方式解决线程安全问题。还可以通过ThreadLocal的方式保证线程安全,ThreadLocal可以看作是每个线程栈中开辟存储临界资源的一种方式,线程栈是线程私有的,所以也能保证线程安全。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值