1.简单名称(Simple Name)
没有类型和参数修饰的方法或字段名称
例如inc方法和字段name
2.全限定名(Fully Qualified Name)
一个类的全限定名是将类全名的.全部替换为/
例如com/itheima/dao/IUserDao.xml
3.描述符(Descriptor)
A descriptor is a string representing the type of a field or method.
4.签名(Signatures)
Java代码层面的方法特征签名:方法名称 + 参数顺序 + 参数类型
字节码层面的方法特征签名: + 返回值 + 受查异常表
5.符号引用
符号引用包括域和方法的符号引用,符号引用由两部分组成:
1)所属的类或接口
2)字段和方法 名字+描述符
Java类从加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括,加载 ,验证 , 准备 , 解析 , 初始化 , 卸载 ,总共七个阶段。其中验证 ,准备 , 解析 统称为连接。
而在解析阶段会有一个步将常量池当中二进制数据当中的符号引用转化为直接引用的过程。
符号引用 :符号引用以一组符号来描述所引用的目标。符号引用可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可,符号引用和虚拟机的布局无关。个人理解为:在编译的时候一个每个java类都会被编译成一个class文件,但在编译的时候虚拟机并不知道所引用类的地址,多以就用符号引用来代替,而在这个解析阶段就是为了把这个符号引用转化成为真正的地址的阶段。
public class Test{
public static void main() {
String s=”abc”;
System.out.println(“s=”+s);
}
}
这个代码中在编译的时候对应的s会被解析成为符号引用,
public class Test{
public static void main() {
System.out.println(“s=”+”abc”);
}
}
而这段代码执行的时候会直接解析成直接引用。
直接引用 :直接引用和虚拟机的布局是相关的,不同的虚拟机对于相同的符号引用所翻译出来的直接引用一般是不同的。如果有了直接引用,那么直接引用的目标一定被加载到了内存中。
直接引用:
1:直接指向目标的指针。(个人理解为:指向对象,类变量和类方法的指针)
2:相对偏移量。 (指向实例的变量,方法的指针)
3:一个间接定位到对象的句柄。
Java类生命周期
https://zhuanlan.zhihu.com/p/67991761
Java对象生命周期
https://zhuanlan.zhihu.com/p/104056490