![](https://img-blog.csdnimg.cn/20190918135101160.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM学习
文章平均质量分 61
主要分为类加载器、运行时数据区、执行引擎的学习和深究,通过视频学习和各大博主的资料整理出自己的理解
Carl·杰尼龟
一定要坚持,因为下次努力不知道要等到什么时候
展开
-
Java内存模型JMM
堆栈和硬件内存结构之间的关系JMM详解原创 2024-06-05 17:23:34 · 106 阅读 · 0 评论 -
JMM详解
Java线程之间的通信由Java内存模型控制,JMM决定了一个线程对共享变量的写入何时对另一个线程可见JMM定义了线程和主内存之间的抽象关系:线程之间的共享变量存储在主内存(堆)中,每个线程都有一个私有的本地内存,本地内存中存储了该线程以读/写共享变量的副本。从硬件内存结构的角度来说,本地内存并不存在,本地内存实际是包括了缓存、写缓冲区、寄存器以及其他的硬件和编译器优化线程A与线程B之间如果要通信首先,线程A把本地内存A中更新过的共享变量刷新到主内存中去。原创 2024-06-05 17:22:25 · 1007 阅读 · 0 评论 -
堆栈和硬件内存结构之间的关系
使用synchronized块,同步块保证在任何给定时间,只有一个线程可以进入同步块,同步块还保证在同步块内访问的所有变量都将从主存储器中读入,当线程退出同步块时,所有更新的变量将再次刷新回主存储器,无论变量是否声明为volatile。两个线程都有Local variable 1局部变量,但是指向了两个不同的共享变量Object1和Object5,因为两个线程的局部变量相互独立,因此每个线程只引用了两个对象中的一个,并不是两个都可以访问。硬件内存结构不区分线程栈和堆,在硬件上,线程栈和堆都位于主存储器中。原创 2024-06-05 17:13:54 · 1155 阅读 · 0 评论 -
Class类
Class类存在于java.lang包下,Class类的实例表示Java运行时的类(class and enum)或接口(interface and annotation),数组也同样被映射为一个Class对象,所有具有相同元素类型和维数的数组都共享该class对象,基本数据类型和void关键字同样表现为class对象Class的特点:Class类也是类的一种,与class关键字不一样(平时描述中也要区分Class和class的区别)原创 2024-05-27 09:21:15 · 764 阅读 · 0 评论 -
详解Java之main方法
public static void main(String[] args){…}这是Java程序的入口,是main方法的方法签名为什么要采用这种签名方式?首先了解几个概念:原创 2022-06-01 15:45:08 · 538 阅读 · 0 评论 -
初入JVM
学习路径提出问题1.为什么JAVA可以跨平台?2.都知道Java是半解释半编译语言,为什么这么说?3.classfile去哪了?如果都知道通过类加载器加载到内存,是怎么在内存中执行指令的?4.类加载器为什么可以加载类,怎么加载类?5.垃圾回收怎么回收垃圾?6.既然垃圾回收可以回收垃圾,为什么要分为新生代、老年代7.为什么要在JDK1.7以后把永久代换成元空间?8.常见的StackOverflowError和OOM是怎么产生的?9.为什么在学习Java基础的时候,代码是这样执行的,sta原创 2021-06-25 16:38:02 · 62 阅读 · 0 评论 -
JVM--类加载器ClassLoader
1.类加载器类加载器子系统负责从文件系统或网路中加载class文件类加载器怎么识别的class文件?class文件在文件开头有一个特定的文件标识(ca fe ba be)只要是有这个特定的文件标识就会被类加载器加载1.1类加载器分类1.引导类加载器(BootStrap ClassLoader):主要负责加载核心类库、加载ExtClassLoader和AppClassLoader,并指定为这个两个加载器的父加载器(引导类加载器是使用C/C++编写的,Java获取不到,因此返回为null)2.自原创 2021-06-25 18:16:28 · 178 阅读 · 2 评论 -
JVM--运行时数据区
运行时数据区Java虚拟机在执行Java程序的过程中会把它所管理的内存区域划分为若干个不同的数据区域,不同的区域有不同的用途以及创建和销毁时间;有些区域随着虚拟机进程的启动而存在,有些区域则是依赖线程的启动和结束而建立和销毁。内存区域栈(Stack)堆(Heap)方法区(Method Area)本地方法区(Native Method Area)程序计数器(Program Counter Register)栈特点: * 先进后出,后进先出 * 线程私有,内存大小固定,且原创 2021-06-28 09:56:40 · 148 阅读 · 1 评论 -
JVM--执行引擎
执行引擎执行引擎:由JVM自己实现的(操作系统的执行引擎是由硬件实现),将字节码文件解释/编译为对应平台上的机器码指令。主要包括了:解释器(interpreter)、JIT编译器、探测器(热点代码探测器·)和垃圾回收器解释器:用于解释字节码文件转换为本地机器码,解释效率高,执行效率低(执行重复代码需要重复解释)字节码解释器:在执行时通过纯软件代码模拟字节码的执行,效率低模板解释器:将每一条字节码和一个模板函数相关联,模板函数中直接产生这条字节码执行时的机器码,从而很大程度上提高了解释器原创 2021-06-28 00:17:16 · 103 阅读 · 1 评论 -
JVM--本地方法接口
本地方法接口native:调用本地c/c++方法来调用操作操作系统Native凡是带了native关键字的,说明Java的作用范围达不到,需要去调用底层C语言的本地方法库首先会进入将native方法加载到本地方法栈调用本地方法接口JNIJava在内存区域中专门开辟了一块标记区域:本地方法栈(native Method stack),用于登记native方法最终执行的时候会通过JNI调用本地方法库...原创 2021-06-28 10:00:55 · 60 阅读 · 0 评论 -
JVM--线程
JVM线程1.JVM线程是指程序执行过程中的一个线程实体,JVM允许一个应用并并行多个线程。2.Hotspot JVM中的Java线程与原生操作系统线程有直接的映射关系(这个映射关系就是靠C/C++实现的)3.当线程创建后需要在运行期间JVM将本地存储、缓冲区分配、同步对象、栈、程序计数器等准备好后,映射到原生操作系统创建原生线程。4.JVM线程结束后,原生系统上的线程也会随之被回收5.操作系统负责调度所有线程,并把他们分配到任何可用的CPU上6.当原生线程初始化完毕,就会调用Java线程的原创 2021-07-08 14:22:18 · 93 阅读 · 0 评论 -
JVM--垃圾回收机制
目录1.JVM堆的基本结构2.GC垃圾回收机制2.1GC回收器分类2.2GC收集器使用的过程1.JVM堆的基本结构1. JVM堆空间分为:Java堆和方法区(元空间/永久代)2. Java堆从GC的角度可以细分为:新生代和老年代(因此JVM堆可以分为三大区:新生代、老年代、永久代)3. 新生代又可以细分为:Eden区、两个幸存区(Survivor-From区、Survivor-To区) * Eden区:new出来的对象都会存储到Eden区(较大对象会直接存储到老年区) * Survivor原创 2021-07-08 15:14:20 · 82 阅读 · 0 评论 -
JVM--垃圾回收算法
目录1.GC垃圾回收算法1.1可达性分析算法1.2引用计数器算法(已淘汰)1.3 复制算法1.4标记清除算法1.5标记整理算法1.GC垃圾回收算法1.1可达性分析算法实现过程: 1.可达性分析算法根据GC Root(根对象)作为起始点,按照从上到下的方式遍历确认GC Root->obj是否可达 2.每一条路径称为一条引用链,如果目标对象与GC Root没有任何引用链相连,则标记为不可达 3.在触发GC回收之前对象会自动调用内部的终止方法finalize(),该方法可以通过重写来复活该对象(原创 2021-07-08 15:15:41 · 98 阅读 · 0 评论