[基础] 学习笔记(二)

类加载器干了什么事情?

第一步:加载
第二步:验证
第三步:准备
第四步:解析
第五步:初始化
第六步:使用
第七步:卸载

加载:

将class 文件加载进去

验证:

1、验证class文件的版本和能不能兼容当前JVM版本。
2、验证class文件是否满足JVM规范(class文件的第一个字节码为‘魔术值’),为16进制的代码(3DEF5…)

准备:

举例:public static int xx = 100; 定义了一个加上static关键字的变量值,是跟着类文件走的。
把类成员初始化为初始值(初始值是Java内定的初始值,不是自己给予的初始值),final的类变量除外。(final 字段直接初始化为自己设定的值)

解析:

把符号引用解析为直接引用(类似于将英文转为内存地址可以直接访问)
符号引用:就是我们写的xx变量,xx对象的引用,如 Integer xxx = new Integer();
xxx 就是符号引用.
直接引用:
就是内存地址。 0x0000001
解析就是要把类似于xxx,xx这种符号引用替换为直接引用即内存地址。

初始化:

把我们定义的static变量或者static静态代码块按顺序组织成 构造器(也称作类构造器)来初始化变量。
就是将自己定义的数据赋值给变量。也就是存放在对应的内存地址中。

方法区:

所有关于类的信息都是保存在 方法区中。
怎么保存?通过常量池来保存。生成了一个代表所有类信息的对象classInstance。

字节码:

javap -c xxx
将指定字节码反编译为字节码指令输出

本地方法栈:

JNI 将C语言或者C++ 编码的程序压缩在JNI中执行。

堆内存:

堆内存是多线程共享的,所以当多线程共同访问堆内存中公共资源的时候,要保证堆内存中数据的安全性。

线程栈是线程独有的。代表每个线程都拥有独立的线程栈(堆栈)

TLspace: 多线程中,优先在自己的线程栈中创建使用,如果独有的线程栈不够用了,就会在堆内存中创建使用。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值