Java类从加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括,加载 ,验证 , 准备 , 解析 , 初始化 ,卸载 ,总共七个阶段。其中验证 ,准备 , 解析 统称为连接。

   而在解析阶段会有一个步将常量池当中二进制数据当中的符号引用转化为直接引用的过程。

符号引用 :符号引用以一组符号来描述所引用的目标。符号引用可以是任何形式的字面量,只要使用时能无歧义地定位到目标即可,符号引用和虚拟机的布局无关。个人理解为:在编译的时候一个每个java类都会被编译成一个class文件,但在编译的时候虚拟机并不知道所引用类的地址,多以就用符号引用来代替,而在这个解析阶段就是为了把这个符号引用转化成为真正的地址的阶段。

public class Test{

public static void main() {
     String s=”adc”;

System.out.println(“s=”+s);

}

}

这个代码中在编译的时候对应的s会被解析成为符号引用,

public class Test{

public static void main() {

System.out.println(“s=”+”abc”);

}

}

而这段代码执行的时候会直接解析成直接引用。

直接引用 :直接引用和虚拟机的布局是相关的,不同的虚拟机对于相同的符号引用所翻译出来的直接引用一般是不同的。如果有了直接引用,那么直接引用的目标一定被加载到了内存中。

直接引用可以是: 

1:直接指向目标的指针。(个人理解为:指向对象,类变量和类方法的指针)

2:相对偏移量。      (指向实例的变量,方法的指针)

3:一个间接定位到对象的句柄。

最新文章

  1. XSS之xssprotect(转)
  2. 电脑上不安装Oracle时,C# 调用oracle数据库,Oracle客户工具
  3. thinkphp怎么实现图片验证码
  4. CentOS 7 上安装 redis3.2.3安装与配置
  5. eclipse打包apk
  6. C# 生成xml文件
  7. tomcat server需要重启的时刻
  8. java文件末尾追加内容的两种方式
  9. opacity_不透明度 cursor_鼠标形状
  10. 十、Struts2结果集
  11. [转]Ubuntu中root用户和user用户的相互切换
  12. MySQL · BUG分析 · Rename table 死锁分析
  13. FastJson基本使用
  14. git常用命令,助你快速入门
  15. 1. Java Static和Final使用总结
  16. numpy C语言源代码调试(一)
  17. 详解原生JS回到顶部
  18. 调试nodejs项目接口,使用Posman,用req.body拿不到数据
  19. selenium基础用法(爬虫)
  20. getObjectURL 上传图片预览

热门文章

  1. [BZOJ1406]密码箱
  2. 定义一个Collection接口类型的变量,引用一个Set集合的实现类,实现添加单个元素, 添加另一个集合,删除元素,判断集合中是否包含一个元素, 判断是否为空,清除集合, 返回集合里元素的个数等常用操作。
  3. 二、JAVA基本数据类型:内置数据类型,引用类型
  4. php \r\n
  5. CentOS上升级gcc编译器使支持C++11
  6. SQLserver触发器实现A表insert到B表
  7. pycharm 的调试模式 MAC版
  8. 如何用Caffe训练自己的网络-探索与试验
  9. Python全栈之路----函数----高阶函数
  10. 数组,集合,字符串,bean,map