![](https://img-blog.csdnimg.cn/20190918140012416.png?x-oss-process=image/resize,m_fixed,h_224,w_224)
JVM_虚拟机
文章平均质量分 82
尚硅谷宋红康老师的JVM笔记,建议结合视频进行学习,学习地址在首页
小七学爪哇
这个作者很懒,什么都没留下…
展开
-
01_JVM与Java体系结构
01_JVM与Java体系结构6、JVM的整体结构HotSpot VM是目前市面上高性能虚拟机的代表作之一。它采用解释器与即时编译器并存的架构在今天,Java程序的运行性能早已脱胎换骨,已经达到了可以和C/C++一较高下的地步。7、Java代码执行流程...原创 2021-12-24 14:47:25 · 162 阅读 · 0 评论 -
02_类加载子系统
02_类加载子系统1、内存结构概述2、类加载器与类的加载过程1、类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法去中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)2原创 2021-12-24 15:39:05 · 45 阅读 · 0 评论 -
03_运行时数据区概述及线程
03_运行时数据区概述及线程1、概述 内存是非常重要的系统资源,是硬盘和CPU 的中间仓和桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。 Java虚拟机定义了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁。另外一些则是与线程一 一对应的原创 2022-01-04 14:11:28 · 359 阅读 · 0 评论 -
04_程序计数器(PC寄存器)
04_程序计数器(PC寄存器)1、PC Register 介绍2、举例说明3、两个常见问题1、两个常见问题2、CPU时间片1、PC Register 介绍官网地址:https://docs.oracle.com/javase/specs/jvms/se8/html/ JVM的程序计数寄存器(Program Counter Register)中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里,并非是广义上所指的物理寄存器,原创 2022-01-04 14:15:06 · 128 阅读 · 0 评论 -
05_虚拟机栈
05_虚拟机栈1、虚拟机栈概述2、栈的存储单位3、局部变量表4、操作数栈5、代码追踪6、栈顶缓存技术7、动态连接8、方法的调用:解析与分派9、方法返回地址10、一些附加信息11、战的相关面试题1、虚拟机栈概述 虚拟机出现的背景 由于跨平台型的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。 内存中的栈与堆 栈是运行时的单位,而堆是存储的单位。即:栈解原创 2022-01-04 14:15:55 · 74 阅读 · 0 评论 -
06_本地方法接口
06_本地方法接口06_本地方法接口什么是本地方法?为什么要使用 Native Method ?现状06_本地方法接口什么是本地方法? 简单地将,一个 Native Method 就是一个Java调用非Java代码的接口。一个 Native Method 是这样一个Java方法:该方法的实现由非Java语言实现,比如 C。这个特征并非Java所特有,很多其他的编程语言都有这一机制,比如在C++中,你可以用extern “C” 告知C++编译器去调用一个C的函数。 “A native metho原创 2022-01-04 14:16:21 · 94 阅读 · 0 评论 -
07_本地方法栈
07_本地方法栈本地方法栈(Native Method Stack)本地方法栈(Native Method Stack)Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的)① 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个 StackOverflowError 异常。② 如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申原创 2022-01-04 14:17:00 · 48 阅读 · 0 评论 -
08_堆空间
08_堆1、堆的核心概述1、内存细分2、设置堆内存大小与OOM1、堆空间大小的设置3、年轻代与老年代4、图解对象分配过程5、Minor GC、Major GC、Full GC6、堆空间分代思想7、内存分配策略8、为对象分配内存:TLAB9、小结堆空间的参数设置X、堆是分配对象的唯一选择吗1、堆的核心概述一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java 堆区在 JVM 启动的时候即被创建,其空间大小也就确定了。是 JVM 管理的最大一块内存空间。堆的大小可以调节《J原创 2023-12-01 17:07:22 · 795 阅读 · 1 评论 -
09_方法区
运行时数据区结构图从线程共享与否的角度来看方法区在哪里?所以,方法区看做是一块独立于Java堆的内存空间。方法区的基本理解Hotspot中方法区的演进设置方法区内存的大小如果解决这些OOM?方法区(Method Area)存储什么?《深入理解Java虚拟机》书中对方法区(Method Area)存储内容描述如下: 它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等。 类型信息 对每个加载的类型(类class、接口interface、枚举enum、注解an原创 2023-12-01 17:07:46 · 947 阅读 · 1 评论 -
10_队形的实例化内存布局与访问定位
JVM是如何通过栈帧中的对象引用访问到其内部的对象实例的呢?原创 2023-12-01 17:08:23 · 348 阅读 · 1 评论 -
11_直接内存
不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存空间。来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑直接使用内存。Java的NIO库允许Java程序使用直接内存,用于数据缓冲区也可能导致OutOfMemoryError异常。原创 2023-12-01 17:09:16 · 366 阅读 · 1 评论 -
12_执行引擎
一般来讲,JIT编译出来的机器码性能比解释器高。C2编译器启动时长比C1编译器慢,系统稳定执行以后,C2编译器执行速度远远快于C1编译器。自JDK10起,HotSpot 又加入一个全新的即时编译器:Graal编译器。编译效果短短几年时间就追平了C2编译器。未来可期目前,带着 “试验状态” 标签,需要使用开关参数去激活,才可以使用写在最后2:关于AOT编译器jdk9引入了AOT编译器(静态提前编译器,Ahead Of Time Compiler)原创 2023-12-01 17:09:49 · 803 阅读 · 1 评论 -
14_垃圾回收概述
极大提高了开发效率面试的热点运行程序中没有任何指针指向的对象导致内存溢出。原创 2023-12-01 17:10:49 · 903 阅读 · 1 评论 -
15_垃圾回收相关算法
需要区分出内存中哪些是存活对象,哪些是已经死亡的对象垃圾标记阶段引用计数算法可达性分析算法。原创 2023-12-01 17:11:10 · 885 阅读 · 1 评论 -
16_垃圾回收相关概念
我们希望能描述这样一类对象:当内存空间还足够时,则能保留在内存中;如果内存空间在进行垃圾收集后还是很紧张,则可以抛弃这些对象。【既偏门又非常高频的面试题】强引用、软引用、弱引用、虚引用有什么区别?具体使用场景是什么?在JDK 1.2版本之后,Java对引用的概念进行了扩充,将引用分为 强引用(Strong Reference)、软引用(Soft Reference)、弱引用(Weak Reference)和虚引用(Phantom Reference)4中,这4种引用强度一次逐渐减弱。原创 2023-12-01 17:11:49 · 885 阅读 · 1 评论