
JVM
文章平均质量分 92
skier~
Java 偏执狂
展开
-
JVM 执行引擎
一、执行引擎概述一、执行引擎概述执行引擎是Java虚拟机核心的组成部分之一。“虚拟机”是相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理机、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集和执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM的主要任务是负责装载字节码到其内部,但字节码并不能够直接运行在操作系统之上,因为字节码指令并非等价于本地机器指令,它内部包含的仅仅只是一些能够原创 2021-12-06 09:21:30 · 158 阅读 · 0 评论 -
JVM 虚拟机栈
一、虚拟机栈概述一、虚拟机栈出现的背景由于跨平台性的设计,Java 的指令都是根据栈来设计的。不同平台 CPU 架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器实现容易,缺点是性能下降,实现同样的功能需要更多的指令。二、初步印象有不少 Java 开发人员一提到 Java 内存结构,就会非常粗粒度的将 JVM 中的内存区理解仅为 Java 堆(heap)和 Java 栈(stack)?为什么?栈是运行时的单位,而堆是存储的单位。即:栈解决程序的运行问题,即程序如原创 2021-12-06 09:19:07 · 231 阅读 · 0 评论 -
JVM 破坏双亲委派模型
双亲委派模型并不是一个具有强制性约束的模型,而是Java设计者推荐给开发者们的类加载器实现方式。在 Java的世界中大部分的类加载器都遵循这个模型,但也有例外的情况,直到Java模块化出现为止,双亲委派模型主要出现过3次较大规模“被破坏”的情况。一、在双亲委派出现之前双亲委派模型的第一次“被破坏”其实发生在双亲委派模型出现之前——即JDK 1.2面世以前的“远古”时代。由于双亲委派模型在JDK 1.2之后才被引入,但是类加载器的概念和抽象类 java.lang.ClassLoader 则在 Java 的原创 2021-12-05 23:29:20 · 372 阅读 · 0 评论 -
JVM 类加载子系统
类加载子系统一、内存结构概述二、类加载器与类的加载过程一、类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载class文件,class文件在文件开头有特定的文件标识。CLassLoader只负责class文件的加载,至于他是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分信息是 Class 文件中常量池部分的内存映射)。二、类加载器Cla原创 2021-12-05 23:27:01 · 77 阅读 · 0 评论 -
JVM 垃圾回收相关概念简述
学过 JVM 的同学都知道,垃圾回收可以说是 JVM 的一个非常重要的知识点了,在我们讲解垃圾回收算法和垃圾回收器之前, 我们先来讲解有关垃圾回收相关的概念吧 ????????????一、垃圾回收概述1、什么是垃圾所谓垃圾回收,那在 JVM 中啥才是垃圾呢?其实,在 JVM 中垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存进行垃圾清理,那么,这些垃圾所占的内存空间会一直保留到应用程序结束,被保留的空间无法被其他对象使用,甚至可能导致内存溢出,也就是常说的原创 2021-12-04 09:06:14 · 261 阅读 · 0 评论 -
JVM 垃圾回收算法
一、垃圾标记阶段的算法之引用计数算法一、垃圾标记阶段:对象存活判断在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象,只有被标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程我们可以称为垃圾标记阶段。那么JVM中究竟是如何标记一个死亡对象的呢?简单来说,当一个对象已经不再被任何的存活对象继续引用时,就可以宣判为已经死亡。判断对象存活的方式一般有两种方式:引用计数算法和 可达性分析算法。二、原创 2021-12-04 09:05:14 · 102 阅读 · 0 评论 -
JVM 垃圾回收器
一、GC分类与性能指标一、垃圾回收器概述垃圾收集器没有在规范中进行过多的规定,可以由不同的产商、不同版本的JVM来实现。由于JDK的版本处于高速迭代的过程中,因此Java发展至今已经衍生出了众多的GC版本。从不同角度分析垃圾收集器,可以将GC分为不同的类型。二、垃圾回收器分类按线程数分,可以分为串行垃圾回收器和并行垃圾回收器。串行回收指的是在同一时间段内只允许有一个CPU用于执行垃圾回收操作,才是工作线程被暂停,直至垃圾收集工作结束。在诸如单CPU处理器或者较小的引用内存等硬件原创 2021-12-03 12:55:11 · 86 阅读 · 0 评论 -
JVM 方法区
一、栈、堆、方法区的交互关系二、方法区的理解一、方法区在哪里?《Java虚拟机规范》中明确说明:”尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾回收或者进行压缩。“但对于 HotSpot JVM 而言,方法区还有一个别名叫做 Non-Heap(非堆),目的就是要和堆分开。所以,方法区看做是一块独立于 Java 堆的内存空间。二、方法区的基本理解方法区(Method Area)与 Java 堆一样,是各个线程共享的内存区域。方法区在 JVM 启动的时候被原创 2021-12-03 12:54:36 · 1020 阅读 · 0 评论 -
JVM 堆
咋废话少说,直接进入重点 ????????????一、堆1、堆(Heap)的核心概述一、堆的核心概述一个JVM实例只存在一个堆内存,堆也是Java内存管理的核心区域。Java堆区在JVM启动的时候即被创建,其空间大小也就确定了。是JVM管理的最大一块内存空间。堆内存的大小是可以调节的。《Java虚拟机规范》规定,堆可以处理物理上不连续的内存空间中,但在逻辑上它应该被视为连续的所有的线程共享Java堆,在这里还可以划分线程私有的缓冲区(Thread Local Allocation Buf原创 2021-12-02 09:28:07 · 224 阅读 · 0 评论 -
JVM 程序计数器
一、PC Register介绍JVM中的程序计数器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。作用:PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引擎读取下一条原创 2021-12-02 09:27:34 · 126 阅读 · 0 评论 -
JVM String Table
一、String的基本特征一、String的基本特征String:字符串,使用一对 “ “ 引起来表示。String 声明为 final 的,不可被继承。String 实现了 Serializable:表示字符串是支持序列化的;实现了Comparable接口:表示String可以比较大小。String在 jdk8 及之前内部定义了final char[] value用于存储字符串数据,jdk9时改为了byte[]。二、String在 jdk9 中存储结构变更tring再也不用char[]来原创 2021-12-01 07:36:21 · 146 阅读 · 0 评论 -
JVM Class文件结构
一、概述字节码文件的跨平台性Java语言:跨平台的语言当Java源代码成功编译成字节码后,如果想在不同平台上运行,则无需再次编译。这个优势已经不再那么吸引人了,Python、PHP、Perl、Ruby、Lisp等有强大的编译器。跨平台似乎已经快成为一门语言必选的特性。Java虚拟机:跨语言的平台Java虚拟机不和包括 Java 在内的任何语言绑定,它只与 “Class 文件” 这种特定的二进制文件格式所关联,无论使用何种语言进行软件开发,只要能将源文件编译为正确的Class文件,那么这种原创 2021-12-01 07:35:37 · 763 阅读 · 0 评论 -
JVM 看这一篇就够了
原谅我这个标题党初识JVM规范从三种角度认识JVMJVM概述JVM:Java Virtual Machine,也就是Java虚拟机所谓虚拟机是指:通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的计算机系统JVM是通过软件来模拟Java字节码的指令集,是Java程序的运行环境JVM主要功能通过 ClassLoader 寻找和装载 class 文件解释字节码成为指令并执行,提供 class 文件的运行环境进行运行期间的内存分配和垃圾回收提供与硬件交互的平台虚.原创 2021-01-24 16:44:54 · 12232 阅读 · 17 评论