深入Java虚拟机读书笔记[10:20]
字节码中的finally子句表现的很像微型子例程。Java方法与微型子例程使用不同的指令集。跳转到微型子例程的指令是jsr或者jsr_w,将返回地址压入栈。执行完毕后调用ret指令。ret指令并不会从栈中弹出返回地址,而是在子例程开始的时候将返回地址从栈顶取出存储在局部变量,ret指令从局部变量中取出。这是因为finally子句本身会抛出异常或者含有return、break、continue等语句。finally确保会执行到,即使try或者catch中有return等语句。
第十九章 方法的调用与返回实例方法和类方法区别:
a) 实例方法调用之前需要一个示例,类方法不需要
b) 实例方法使用动态绑定,类方法使用静态绑定
调用的指令是invokevirtual和invokestatic。根据引用类型调用使用invokespecial,包括实例初始化、私有方法和super调用方法。在调用的引用类型是接口时使用invokeinterface。invokeinterface必须搜寻方法表而不是使用偏移量,因此速度比invokevirtual慢。
第二十章 指令invokespecial 第二十一章 线程同步Java中使用的同步机制是监视器,监视器支持两种线程:互斥和协作。通过对象锁实现互斥,允许多个线程在同一个共享数据上独立而互不干扰地工作。协作通过Object类的wait和notify方法,允许多个线程为同一个目标而共同工作。监视区域是最小的不可分割的代码块。在同一个监视器中,监视区域只会同时被一个线程执行。Java所使用的监视器被称为wait and notify监视器。Java虚拟机在执行wait命令时可以指定一个暂停时间。唤醒命令有两种:notify和notifyAll。notify命令随意从等待区中选择一个线程并标记为可能苏醒,notifyAll命令将等待区中的所有线程标记为可能苏醒。
类锁用对象锁实现锁住一个类实际上锁住的是类的Class对象。对于对象来说,Java虚拟机维护一个计数器,对象被加锁时计数加1。Java中有两种监视区域:同步语句和同步方法。每一个监视区域都和一个对象引用关联。同步语句块使用monitorenter和monitorexit两个操作码。对方法加锁比同步代码块更加高效。
Java虚拟机(JVM)面试 虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验,解析和初始化,最终形成可以被虚拟机直接使用的java类型。
相关文章
- 深入Java虚拟机读书笔记[8:9]
- java实现第六届蓝桥杯三角形面积
- Java实现 蓝桥杯VIP 算法提高 邮票面值设计
- 【深入Java虚拟机】之四:类加载机制
- 深入理解Java虚拟机(一)
- [Java Spring Data] JPA Example with unit test
- 深入理解JAVA虚拟机--Idea远程执行本地Java代码
- 深入Java虚拟机(2)——Java的平台无关性
- 深入Java虚拟机(1)——Java体系结构
- 《深入理解Java虚拟机》读书笔记
- Interview:Java岗位面试—面试求职攻略之一个JAVA程序员面试心得(非常值得收藏)
- 【Java】java 环境配置(详细教程)
- Simple Logging Facade for Java (SLF4J)作用(java日志框架)
- 【java】Java中-> 是什么意思?
- 深入理解java虚拟机读书笔记(三)
- JAVA编程:java环境安装和helloworld
- Java通过PDF模板导出数据 adobe acrobat的PDF编辑器 itextpdf java导出文件输出流
- 使用Java操作Elasticsearch(Elasticsearch的java api使用)
- mysql-connector-java与Mysql、Java的对应版本
- java-信息安全(十二)-数字证书、CA证书【Java证书体系实现】
- 《深入理解java虚拟机》笔记
- java.lang.OutOfMemoryError: Java heap space
- Java:openjdk: error: Student is abstract; cannot be instantiated;java编译环境