ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

JVM-类加载(2)

2022-05-23 15:01:40  阅读:142  来源: 互联网

标签:return synchronized 对象 lock finally 引用 JVM 加载


多态原理

当执行 invokevirtual 指令时:

  1. 先通过栈帧中的对象引用找到对象
  2. 分析对象头,找到对象的实际 Class
  3. Class 结构中有 vtable,它在类加载的链接阶段就已经根据方法的重写规则生成好了
  4. 查表得到方法的具体地址工
  5. 执行方法的字节码

异常处理

面试题-1

public int fun1(){
  try {
    return 1;
  } finally {
    return 2;
  }
}

结果是返回2(finally中return会吞掉异常,实际工作中不要这样使用)

面试题-2

public int fun1(){
  int i = 1;
  try {
    return i;
  } finally {
    i = 2;
  }
}

返回结果是1
在try中return时会暂存数据,去执行finally中的代码

synchronized

// 创建了一个对象,将这个对象的引用放入操作数栈,并复制一份
// 第一次消耗掉栈顶的引用,调用构造方法
// 第二次将将引用赋予lock变量
Object lock =  new Object(); 
// 将对象引用加载到操作数栈,表示synchronized开始了
// 对lock对象的引用再一次复制(一个供monitorenter指令使用,另一个供monitorexit指令使用)
synchronized(lock) {
  System.out.println("ok");
}

标签:return,synchronized,对象,lock,finally,引用,JVM,加载
来源: https://www.cnblogs.com/S2Jgogo/p/16298747.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有