JVM指令集、类加载子系统介绍 Jvm
Jvm整体架构图:
Jvm指令集架构:
指令集架构分为两种:
1.基于栈的指令集架构(Java编译器是基于栈的指令集架构)。
2.基于寄存器指令架构。
栈的指令架构:
优势:跨平台、零地址指令、指令集更小、移植性高。(编译器更容易实现)
劣势:指令多,性能下降(实现同样的功能需要更多指令)
寄存器指令架构:
优势:性能优秀、执行效率高,指令少
劣势:移植性...
Synchronized底层实现原理 并发编程
synchronized介绍:
synchronized 关键字在多线程环境下作为线程安全的同步锁
synchronized作用:
1.同步代码块(当前对象锁[this] 或 自定义对象锁)
2.同步静态方法(当前类的Class实例,Class数据存在永久代中,该类全局锁)
3.同步非静态方法(当前对象锁)
同步代码块:
//...
JVM栈帧内部结构-局部变量表 Jvm
栈帧内部结构:
1) 局部变量表(Local Variables)
2) 操作数栈(Operand Stack)或表达式栈
3) 动态链接(Dynamic Linking)或指向运行时常量池的方法引用
4) 方法返回地址(Return Address)或方法正常退出或异常退出的定义
5) 一些附加信息
局部变量表(Local Variables):
局部变...
JVM栈帧内部结构-操作数栈 Jvm
基本概念:
操作数栈是基于数组的方式实现的。
在方法执行过程中,根据字节指令,往栈中写入(入栈/push)数据或提取(出栈/pop)数据。
某些字节码指令将值压入操作数栈,其余的字节码指令将操作数取出栈,使用它们后再把结果压入栈。(比如:复制,交换,求和等操作)
操作数栈主要用于保存计算过程的中...
JVM运行时数据区-程序计数器 Jvm
运行时数据区分为:
程序计数器(PC寄存器)、虚拟机栈、本地方法栈、方法区、堆区
线程共享区:方法区,堆区。
线程独立区:程序计数器(PC寄存器)、虚拟机栈、本地方法栈。
JVM线程:
1.一个JVM线程对应一个Runtime(运行时数据区)
2.JVM允许一个应用有多个线程并执行。
3.当一个Java线程准备好执行后,此时操作系统的本地线...
JVM运行时数据区-虚拟机栈 Jvm
Java虚拟机栈(Java Virtual Machine Stack):
基本概述:
跨平台设计,Java指令根据栈来设计的,不同平台CPU架构不同,所以不能设计为基于寄存器的
线程私有的,每个线程创建时都会创建一个虚拟机栈,其内部保存一个个栈帧(Stack Frame),一个栈帧对应一个Java方法。
内存中的栈与堆的区别:
堆:存储数据区域
栈:运...
Java内存模型-volatile可见性 Java基础
Java内存模型:
Java线程内存模型与CPU缓存模型类似,基于CPU缓存模型建立,Java线程内存模型是标准化的,用于屏蔽各种硬件和操作系统的内存访问差异。
主要分为三大模块: 线程、工作内存、主内存
Java内存模型数据原子操作:
read(读取) 从主内存读取数据
load(载入) 将主内存读取到的数据写入工作内存
us...
Java内存模型-volatile有序性 Java基础
/**
* @Description:Java内存模型-有序性
* @Author:chenxi
* @Date:2020/3/22
**/
public class JMMOrderTest {
private static int a, b = 0;
private static int x, y = 0;
publ...
JVM栈帧内部结构-方法返回地址 Jvm
方法返回地址(Return Address):
存放调用该方法的PC寄存器的值。
方法结束方式:
1) 正常结束
2) 出现未处理异常,非正常退出(通过异常完成出口退出的不会给他的上层调用者生产任何的返回值)
无论通过哪种方式退出,在方法退出后到该方法被调用的位置,方法正常退出时,调用者的PC计数器的值作为返回地址,即调用该方法的指令的下一条指令地址,而通过...
MySql索引数据结构以及存储引擎 Mysql
MySql索引数据结构:
1.二叉树
2.红黑树
3.Hash表
4.B-Tree
二叉树(Binary Search Tree):
存储结构:每个结点最多有两个子树的树结构。子树通常被称为“左子树”(left subtree)和“右子树”(right subtree)。
1.若左子树不空,则左子树上所有结点的值均小于它的根结点的值
2.若右子树不空,则右子...