自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(52)
  • 收藏
  • 关注

原创 Java并发编程——锁(干货满满)

锁synchronizedLock接口队列同步器可重入锁(ReentrantLock)本文参考了黑马JUC并发编程Java并发编程的艺术深入理解java虚拟机synchronized在讲锁之前,先回顾一下synchronized的知识在java中,最基本的互斥同步就是synchronized关键字。这是一种块结构(Block Structured)的同步语法。其经过Javac编译后,会分别形成monitorenter和monitorexit两个字节码指令。两者都需要一个reference类型的

2021-10-12 16:40:35 309

原创 MySQL实战45讲 笔记(6)

全局锁和表锁 :给表加个字段怎么有这么多阻碍?全局锁表级锁写在最前,本篇文章来源于对MySQL实战45讲的笔记,主要是为了帮助自己理解。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。本文并非对文章的直接复制,并且肯定有理解不到位的情况,如果希望系统地学习,还是要去官网支持原作者。注意:最好拥有一定的MySQL基础再来看本系列文章,可以去b站搜索动力节点的mysql基础教程,或者翻看我做的走进MySQL系列(笔记做的并不是特别详尽,仅作为参考)全局锁对整个数据库实例加

2021-10-08 16:04:08 157

原创 MySQL实战45讲 笔记(7)

行锁功过:怎么减少行锁对性能的影响?写在最前,本篇文章来源于对MySQL实战45讲的笔记,主要是为了帮助自己理解。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。本文并非对文章的直接复制,并且肯定有理解不到位的情况,如果希望系统地学习,还是要去官网支持原作者。注意:最好拥有一定的MySQL基础再来看本系列文章,可以去b站搜索动力节点的mysql基础教程,或者翻看我做的走进MySQL系列(笔记做的并不是特别详尽,仅作为参考)...

2021-09-30 15:38:03 136

原创 Linux基础(1)——VMware和Centos安装

安装安装VMware安装Centos写在前面,本文主要是对韩顺平图解Linux的提炼,并附带自己的理解,主要是为了自己的学习。但如果能对你们也有所帮助,那再好不过了。安装VMware安装VM比较简单,选一个常用的路径安装下来就行了安装地址随便选一个序列号。安装Centos我这里选择的是7.6版本下载下载地址然后打开VM点击文件–>新建虚拟机启动安装过程一路next过去,直到选择如图所示的版本然后起一个好听的名字,一路next直到选择自定义硬件其中主要对这四项进行配置内

2021-09-24 21:11:15 237

原创 MySQL实战45讲 笔记(5)

深入浅出索引(下)查询语句的搜索覆盖索引最左前缀原则索引下推写在最前,本篇文章来源于对MySQL实战45讲的笔记,主要是为了帮助自己理解。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。本文并非对文章的直接复制,并且肯定有理解不到位的情况,如果希望系统地学习,还是要去官网支持原作者。注意:最好拥有一定的MySQL基础再来看本系列文章,可以去b站搜索动力节点的mysql基础教程,或者翻看我做的走进MySQL系列(笔记做的并不是特别详尽,仅作为参考)查询语句的搜索执行se

2021-09-23 10:31:01 65

原创 Java并发编程——线程状态与线程方法

线程状态与线程方法NEWRUNNABLENEW当线程刚被创建时且还没有调用start()方法时,线程就处于NEW状态。System.out.println(s.getState());s.start();System.out.println(s.getState());NEWRUNNABLE我们顺便也复习一下线程创建的几种方式:通过继承Thread,并实现其run方法可以通过子类普通的继承: public class threadTest extends Thread{ @

2021-09-22 15:35:50 75

原创 线程安全与锁优化(2)——锁优化

线程安全与锁优化(1)——锁优化自旋锁与自适应自旋锁消除接上篇文章:线程安全与锁优化(1)写在最前,本篇文章基本上来源于 《深入理解Java虚拟机》 并发部分 的提炼,并附带自己的理解,主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。自旋锁与自适应自旋自旋锁互斥同步在性能上的影响主要来源于阻塞,即挂起线程和恢复线程的操作都转入内核态实现。然而,大多数情况下,共享数据的锁定只会持续很短的一段时间,为了这段时间进行大开销的工作并不值

2021-09-22 14:13:36 139

原创 MySQL实战45讲 笔记(4)

深入浅出索引(上)索引的常见模型写在最前,本篇文章来源于对MySQL实战45讲的笔记,主要是为了帮助自己理解。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。本文并非对文章的直接复制,并且肯定有理解不到位的情况,如果希望系统地学习,还是要去官网支持原作者。注意:最好拥有一定的MySQL基础再来看本系列文章,可以去b站搜索动力节点的mysql基础教程,或者翻看我做的走进MySQL系列(笔记做的并不是特别详尽,仅作为参考)索引的常见模型一句简单的话来说,索引的出现就是为了

2021-09-21 15:56:34 176

原创 JVM深入理解(6)——垃圾回收(6)

G1垃圾回收器*G1回收器:区域化分代式特点适用场景Region回收细节理解垃圾回收之前记忆集三色标记法增量更新(Incremental Update)原始快照(SATB)写屏障TAMS(Top at Mark Start)G1回收过程由于G1垃圾回收器比较复杂,所以单拉出一篇来细讲。本文参考了诸多文章:G1垃圾回收器详解G1 垃圾回收器JVM(四) G1 收集器工作原理介绍三色标记法与读写屏障G1垃圾收集器详解以及b站尚硅谷的课程。G1回收器:区域化分代式既然已经有了强大GC,为什么发

2021-09-20 10:57:18 209

原创 JVM深入理解(6)——垃圾回收(5)

垃圾回收器*GC分类与性能指标性能指标不同垃圾回收器概述Serial回收器:串行回收ParNew回收器:并行回收Parallel Scavenge回收器:吞吐量优先CMS回收器:低延迟写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。GC分类与性能指标规范中没有进行过多规定。按线程数分:串行,并行垃圾回收器,但都需要STW按工作模式分:并发式,独占式垃圾回

2021-09-20 10:56:34 70

原创 再剖析java基础——内部类

内部类成员内部类局部内部类匿名内部类静态内部类写在前面,本文有部分内容引用自***java核心技术***成员内部类内部类就是构建于一个类里面的类。内部类的特点:不仅可以访问自身的数据域,还可以引用其外部类的变量(包括私有变量)public class outerClass { private int privateNum=0; public int publicNum=1; public class innerClass{ int number;

2021-09-17 20:06:40 58

原创 MySQL实战45讲 笔记(3)

事务隔离:为什么你改了我还看不见? 什么是事务?隔离性与隔离级别写在最前,本篇文章来源于对MySQL实战45讲的笔记,主要是为了帮助自己理解。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。本文并非对文章的直接复制,并且肯定有理解不到位的情况,如果希望系统地学习,还是要去官网支持原作者。注意:最好拥有一定的MySQL基础再来看本系列文章,可以去b站搜索动力节点的mysql基础教程,或者翻看我做的走进MySQL系列(笔记做的并不是特别详尽,仅作为参考)什么是事务?事务

2021-09-16 20:34:58 90

原创 MySQL实战45讲 笔记(2)

日志系统:一条SQL更新语句是如何执行的? 概述redo logbinlog两阶段提交写在最前,本篇文章来源于对MySQL实战45讲的笔记,主要是为了帮助自己理解。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。本文并非对文章的直接复制,并且肯定有理解不到位的情况,如果希望系统地学习,还是要去官网支持原作者。注意:最好拥有一定的MySQL基础再来看本系列文章,可以去b站搜索动力节点的mysql基础教程,或者翻看我做的走进MySQL系列(笔记做的并不是特别详尽,仅作为参考)

2021-09-12 17:14:29 74

原创 MySQL实战45讲 笔记(1)

基础架构:一条SQL查询语句是如何执行的?MySQL基础架构写在最前,本篇文章来源于对MySQL实战45讲的笔记,主要是为了帮助自己理解。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。本文并非对文章的直接复制,并且肯定有理解不到位的情况,如果希望系统地学习,还是要去官网支持原作者。注意:最好拥有一定的MySQL基础再来看本系列文章,可以去b站搜索动力节点的mysql基础教程,或者翻看我做的走进MySQL系列(笔记做的并不是特别详尽)MySQL基础架构...

2021-09-12 15:55:19 300

原创 JVM深入理解(6)——引用

引用*介绍强引用(StrongReference)软引用(SoftReference)- 内存不足即回收代码示例弱引用(WeakReference)- 发现即回收虚引用(PhantomReference)终结器引用(FinalReference)写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。介绍JDK1.2后,java对引用的概念进行了扩充,分为强引用、软

2021-09-11 22:06:26 133

原创 JVM深入理解(6)——垃圾回收(4)

垃圾回收相关概念概述* System.gc()的理解内存溢出与内存泄漏内存溢出(OOM)内存泄漏(Memory Leak)Stop The World垃圾回收的并行与并发并发并行对比写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。System.gc()的理解通过System.gc()或Runtime.getRuntime().gc()的调用,会显式触发Fu

2021-09-11 12:10:46 61

原创 JVM深入理解(6)——垃圾回收(3)

垃圾回收算法(2)* 写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。...

2021-09-10 16:40:17 55

原创 走进MySQL(8)

约束什么是约束?常见约束非空约束写在最前,本篇文章大部分来源于动力节点MySQL入门基础的提炼,并附带自己的理解。主要是为了复习此前学了又忘的数据库。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。什么是约束?在创建表的时候,可以给表中的一些字段加上约束,保证表数据的完整性和有效性约束作用是为了保证:表中数据有效!常见约束非空约束:not null唯一性约束:unique主键约束:primary key外键约束:foreign key检查约束:check (

2021-09-10 12:18:40 37

原创 JVM深入理解(6)——垃圾回收(2)

垃圾回收算法* 标记阶段对象存活判断标记方法一:引用计数算法标记方法一:可达性分析算法(根搜索算法、追踪性垃圾收集)对象的finalization生存还是死亡?写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。两阶段:标记阶段–>清除阶段标记阶段对象存活判断在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存

2021-09-09 20:31:55 53

原创 走进MySQL(7)

DDL & DML表的创建mysql常见数据类型*删除表:DMLinsert插入日期date和datetime的区别updatedelete写在最前,本篇文章大部分来源于动力节点MySQL入门基础的提炼,并附带自己的理解。主要是为了复习此前学了又忘的数据库。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。表的创建语法格式:create table 表名(字段名 数据类型, 字段2 数据类型);在类型后面跟 default, 可以指定默认值mysql常见数据类型

2021-09-08 20:19:11 42

原创 JVM深入理解(3)——运行时数据区(6)

方法区栈、堆、方法区的交互关系方法区的基本理解Hotspot中方法区演进方法区大小与OOM如何解决OOM?方法区内部结构方法区使用举例写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。栈、堆、方法区的交互关系左上角理解:类的结构Person加载到方法区new出来的对象放在堆空间中person变量存放在栈帧中的局部变量表中局部变量表中的引用指向堆中的具

2021-09-08 19:22:56 45

原创 JVM深入理解(6)——垃圾回收(1)

垃圾回收概述* 什么是垃圾常见面试题为什么需要GCJava内存自动管理写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。什么是垃圾关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然

2021-09-08 13:36:51 71

原创 JVM深入理解(5)——字符串常量池

字符串常量池* String基本特性String的内存分配字符串拼接操作代码示例写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。String基本特性两种定义方式使用字面量直接赋值new生成对象声明为 final 不可被继承JDK1.8及之前用char[]数组存储。JDK1.9之后使用byte[]数组容器存储。为什么要改?1.8及

2021-09-08 12:35:00 248

原创 走进MySQL(6)

@TOC写在最前,本篇文章大部分来源于动力节点MySQL入门基础的提炼,并附带自己的理解。主要是为了复习此前学了又忘的数据库。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。子查询什么是子查询?select语句中嵌套select语句,被嵌套的语句称为子查询在select,from,where后面皆可以出现子查询where子句中的子查询案例:比最低工资高的员工姓名和工资?select sal from emp where sal > min(sal);由

2021-09-07 20:00:29 42

原创 走进MySQL(5)

连接查询笛卡尔现象避免笛卡尔现象写在最前,本篇文章大部分来源于动力节点MySQL入门基础的提炼,并附带自己的理解。主要是为了复习此前学了又忘的数据库。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。笛卡尔现象什么是连接查询?从一张表单独查询,称为单表查询多张表联合查询,称为连接查询表连接方式:内连接:等值连接非等值连接自连接外连接:左外连接右外连接全连接(不讲)如果两张表连接不做任何限制,一个表中的每条记录都会匹配另一张表的所有记录。最终等于两

2021-09-07 19:25:58 51

原创 JVM深入理解(4)——执行引擎(2)

JIT编译器问题如何选择?方法调用计数器热度衰减回边计数器问题既然已经内置了JIT编译器,为什么还使用解释器来拖累执行性能呢?程序启动后,解释器可以马上执行,省去编译时间。即响应速度快。编译器需要将代码编译为本地代码,需要一定执行时间,但编译完成后,执行效率高。在此模式下,当Java虚拟器启动时,解释器可以首先发挥作用,而不必等待即时编译器全部编译完成后再执行,这样可以省去许多不必要的编译时间。随着时间的推移,编译器发挥作用,把越来越多的代码编译成本地代码,获得更高的执行效率。同时,解释执行在编

2021-09-06 16:56:56 59

原创 JVM深入理解(4)——执行引擎(1)

执行引擎概述概述java代码编译和执行的过程机器码、指令、汇编语言机器码指令汇编语言字节码解释器分类写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。概述执行引擎是jvm核心的组成部分之一虚拟机是相对于物理机的概念,两者都有代码执行能力。区别在于物理机的执行引擎直接建立在处理器、缓存、指令集和操作系统层面上,而虚拟机的执行引擎是由软件自行实现的。因此不受物

2021-09-06 16:12:46 90

原创 JVM深入理解——直接内存

直接内存简介问题写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。简介为什么要讲它?JDK8以后,使用元空间,元空间使用的就是本地(直接)内存。直接内存不是运行时数据区的一部分,也不是JVM规范中定义的内存区域。它是在Java堆外,直接向系统申请内存区间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内

2021-09-06 14:46:10 228

原创 对象实例化内存布局与访问定位

对象实例化内存布局与访问定位常见面试题对象的实例化创建对象的方式创建对象的步骤对象的内存布局对象头实例数据对齐填充图示表示对象的访问定位写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。常见面试题对象的实例化创建对象的方式new: 直接new;静态方法返回;Class的newInstance()方法: 反射的方式,只能调用空参的构造器,权限必须为p

2021-09-05 20:54:50 87

原创 走进MySQL(4)

分组分组函数(多行处理函数)分组查询总结分组函数(多行处理函数)多个数据对应一个结果countsumavgmaxmin注:必须先分组才能使用,如果没有分组,整张表默认为一组。分组函数自动忽略null,不需要提前对null处理count(*) 和 count(字段) 区别在于,前者统计表的行数,后者统计不为null的数量。不能直接使用在where子句中,比如select sal from emp where sal > min(sal); 是无效的。(在分组查询部分解释)所有

2021-09-03 20:30:43 44

原创 走进MySQL(3)

查询排序多字段排序按字段位置排序(了解)综合条件排序数据处理函数常见单行处理函数接上篇文章查询写在最前,本篇文章大部分来源于动力节点MySQL入门基础的提炼,并附带自己的理解。主要是为了复习此前学了又忘的数据库。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。排序排序指令:order by, 默认升序(但也可加asc指定升序)mysql> select sal from emp order by sal -> ;+---------+| sal

2021-09-03 19:20:51 69

原创 JVM深入理解(3)——运行时数据区(5)

堆概述内存细分内存大小与OOM年轻代与老年代对象分配过程GC接上篇文章虚拟机栈继续讲解。写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。概述一个JVM实例仅存在一个堆内存。在JVM启动时就被创建,空间大小也被确定了,是JVM管理的最大内存空间。(大小可以调节)JVM规范:堆可以处于物理上不连续的内存空间中,但逻辑上是连续的(链表?)所有线程共享jav

2021-09-03 17:14:40 67

原创 逃逸分析及优化

逃逸分析及优化逃逸分析栈上分配同步省略标量替换写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。逃逸分析逃逸分析是通过分析对象的动态作用域,当一个对象在方法内被定义后,它可能被外部方法引用,比如:作为调用参数传递,称为方法逃逸;如果被外部线程访问,则称为线程逃逸。不同的逃逸程度,也对应着不同的优化方法。逃逸分析默认开启,可以通过指令-XX:-DoEscap

2021-09-03 17:13:38 168

原创 走进MySQL(2)

查询简单查询别名字段中的计算条件查询模糊查询写在最前,本篇文章大部分来源于动力节点MySQL入门基础的提炼,并附带自己的理解。主要是为了复习此前学了又忘的数据库。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。简单查询注:sql不区分大小写查询一个字段:select 字段 from 表名;查询多个字段:select 字段1,字段2,字段3 from 表名;查询所有字段:select * from 表名;缺点:效率低(将*转为字段名)可读性差别名a

2021-08-30 20:25:24 51

原创 走进MySQL(1)

初识MySQLWindows服务登录常用命令1基本单位SQL语句分类:常用命令2写在最前,本篇文章大部分来源于动力节点MySQL入门基础的提炼,并附带自己的理解。主要是为了复习此前学了又忘的数据库。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。Windows服务(注:本文跳过了安装、卸载MySQL等操作)如何寻找mysql服务?计算机(此电脑)---->管理---->点击服务---->找到mysql服务(默认自动启动,表示下一次开机自动启动该服务)

2021-08-30 19:47:48 47

原创 JVM深入理解(3)——运行时数据区(4)

本地方法介绍什么是本地方法?为什么使用?本地方法栈接上篇文章虚拟机栈继续讲解。写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。介绍什么是本地方法?native method就是java调用非java代码的接口,并非由java语言实现。定义本地方法时,用native修饰即可,而不需要用java代码写方法体。(native不能与abstract同用)为什

2021-08-30 17:22:24 42

原创 JVM深入理解(3)——运行时数据区(3)

虚拟机栈背景基本内容栈的存储单位栈运行原理栈帧的内部结构接上篇文章程序计数器继续讲解。写在最前,本篇文章大部分来源于b站尚硅谷JVM全套教程的提炼,并附带自己的理解。主要是为了帮助自己理解,和用于复习。如果同时还能对其他人有所裨益,那就更好不过了。如果有谬误的地方,还请不吝指出。背景由于跨平台的设计,Java指令都是栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的。优点:跨平台、指令集小、编译器容易实现缺点:性能下滑、实现同样功能需要更多指令栈是运行时的单位,而堆是存储的单位即

2021-08-30 17:01:49 62

原创 栈帧——方法返回地址

方法返回地址介绍介绍存放调用该方法的pc寄存器的值无论通过哪种方式退出一个方法,都要回到该方法被调用的位置。正常退出时,调用者的pc计数器的值作为返回地址,即调用该方法的指令的下一条指令的地址。异常退出时,返回地址通过异常表来确认,栈帧一般不会保存此信息。当执行引擎遇到任意方法返回的字节码指令(return),会有返回值传递给上层的方法调用者。注:一个方法调用完成后使用哪一个返回指令需要根据方法返回值的实际类型而定。包括ireturn, lreturn, freturn, dreturn, a

2021-08-30 15:16:08 1267

原创 栈帧——动态链接

动态链接介绍代码说明介绍每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用,包含这个引用就是为了支持当前方法的代码能够实现动态链接。在java源文件被编译到字节码文件中时,所有变量和方法引用都作为符号引用保存在class文件的常量池里。比如:描述一个方法调用了另外方法时,就是通过常量池中指向方法的符号引用来表示的。动态链接就是把符号引用转为调用方法的直接引用的过程代码说明在console中,调用javap -v xx.class解析任一字节码文件,我们可以得到一个常量池:我们查

2021-08-30 14:30:47 2518

原创 栈帧——操作数栈

操作数栈介绍代码说明介绍操作数栈也称表达式栈在方法执行过程中,根据字节码指令,往栈里写入数据或提取数据,即入栈/出栈。某些字节码指令把值压入操作数栈,其余指令将操作数取出栈。使用他们后再把结果压入栈。比如:执行复制、交换、求和等操作。操作数栈主要用于保存计算过程的中间结果,同时作为计算过程中临时的存储空间。操作数栈是JVM执行引擎的一个工作区,当一个方法刚开始执行得时候,一个新的栈帧也会随之被创建出来,其操作数栈是空的。每一个操作数栈都会有一个明确的栈深度用于存储数值,最大深度在编译器就

2021-08-28 14:50:25 2753 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除