微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

JVM-类加载2

多态原理

当执行 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");
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐