深入Java虚拟机读书笔记[10:20]

简介:

第十章 栈和局部变量操作

第十一章 类型转换

第十二章 整数运算

第十三章 逻辑运算

第十四章 浮点运算

第十五章 对象和数组

第十六章 控制流

第十七章 异常

以上一些是操作码相关的内容,

第十八章 finally子句

微型子例程

字节码中的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两个操作码。对方法加锁比同步代码块更加高效。

目录
相关文章
|
22天前
|
存储 监控 算法
深入探索Java虚拟机(JVM)的内存管理机制
本文旨在为读者提供对Java虚拟机(JVM)内存管理机制的深入理解。通过详细解析JVM的内存结构、垃圾回收算法以及性能优化策略,本文不仅揭示了Java程序高效运行背后的原理,还为开发者提供了优化应用程序性能的实用技巧。不同于常规摘要仅概述文章大意,本文摘要将简要介绍JVM内存管理的关键点,为读者提供一个清晰的学习路线图。
|
2月前
|
存储 算法 Java
Java虚拟机(JVM)的内存管理与性能优化
本文深入探讨了Java虚拟机(JVM)的内存管理机制,包括堆、栈、方法区等关键区域的功能与作用。通过分析垃圾回收算法和调优策略,旨在帮助开发者理解如何有效提升Java应用的性能。文章采用通俗易懂的语言,结合具体实例,使读者能够轻松掌握复杂的内存管理概念,并应用于实际开发中。
|
5月前
|
存储 算法 安全
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
Java面试题:Java内存模型及相关知识点深度解析,Java虚拟机的内存结构及各部分作用,详解Java的垃圾回收机制,谈谈你对Java内存溢出(OutOfMemoryError)的理解?
79 0
|
3月前
|
存储 算法 Java
深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制
本文介绍了 JVM 的内存区域划分、类加载过程及垃圾回收机制。内存区域包括程序计数器、堆、栈和元数据区,每个区域存储不同类型的数据。类加载过程涉及加载、验证、准备、解析和初始化五个步骤。垃圾回收机制主要在堆内存进行,通过可达性分析识别垃圾对象,并采用标记-清除、复制和标记-整理等算法进行回收。此外,还介绍了 CMS 和 G1 等垃圾回收器的特点。
133 0
深入解析 Java 虚拟机:内存区域、类加载与垃圾回收机制
|
4月前
|
Java
Java常见JVM虚拟机指令(47个)
Java常见JVM虚拟机指令(47个)
80 3
Java常见JVM虚拟机指令(47个)
|
5月前
|
监控 Oracle Java
(一)JVM成神路之初识虚拟机 - 探寻Java虚拟机的前世今生之秘
JVM(Java Virtual Machine)Java虚拟机的概念大家都不陌生,Java之所以可以做到“一次编译,到处运行”的跨平台性,其根本原因就在于JVM。JVM是建立在操作系统(OS)之上的,Java虚拟机屏蔽了开发人员与操作系统的直接接触,我们在通过Java编写程序时,只需要负责编写Java代码即可,关于具体的执行则会由JVM加载字节码后翻译成机械指令交给OS执行。
101 1
|
4月前
|
Java 数据安全/隐私保护 Windows
【Azure Developer】使用Java代码启动Azure VM(虚拟机)
【Azure Developer】使用Java代码启动Azure VM(虚拟机)
|
4月前
|
存储 Java API
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
【Azure Developer】通过Azure提供的Azue Java JDK 查询虚拟机的CPU使用率和内存使用率
|
5月前
|
存储 Ubuntu Java
【Linux】已解决:Ubuntu虚拟机安装Java/JDK
【Linux】已解决:Ubuntu虚拟机安装Java/JDK
199 1
|
5月前
|
监控 算法 Java
深入理解Java虚拟机:内存管理与性能优化
在Java的世界里,虚拟机(JVM)是幕后的守护者,它默默地支撑着每一个字节码的运行。本文将揭开JVM的神秘面纱,探讨其内存管理机制及如何通过调优提升应用性能。从堆内存的分配到垃圾回收的策略,再到实践中的性能监控与调优技巧,我们将一同走进JVM的内部世界,学习如何让我们的Java程序跑得更快、更稳。