初步JVM内存分析

package com.lzy.JVM;

public class Demo01 {
public static void main(String[] args) {
	A a=new A();
	System.out.println(A.width);
}
}
class A{
	public static int width=100;
	static {
		System.out.println("静态初始化类A");
		width=300;
	}
}

在这里插入图片描述

代码运行,首先会加载类Demo01,方法区形成Demo01类的静态数据,
同时在堆里也会形成一个对象java.lang.Class,代表Demo01类,也就是说可以通过堆里生成的对象访问方法区中Demo01的二进制结构,从而操作这个类的信息。
方法区会先形成A类的静态数据,堆里也会生成java.lang.class对象,代表A类。同样会和方法区中的A的静态数据产生联系,
类加载完之后才真正运行代码,在运行main方法时,栈中会生成一个main的方法栈帧(一个方法对应一个栈帧),代码A a=new A();前半句A a时栈中的main栈帧会生成一个a变量,此时为null;当new A()时通过new调用A类的构造器,所以会调用一个新的方法(这里的方法指A类的构造方法),因为调用了方法,所以此时栈中会形成一个新的栈帧,此时堆里生成一个A的对象,通过“=”将A对象的地址赋给a,此时a就不为空了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值