![](https://img-blog.csdnimg.cn/20201014180756738.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 81
稷下学员
小萌新一枚
展开
-
Java虚拟机(十四)——垃圾回收算法
垃圾回收相关算法标记阶段堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些才是存活对象,哪些是已经死亡的对象。 只有被标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程称为垃圾标记阶段那么JVM中究竟是如何标记一个死亡对象呢?即,当一个对象不再被任何存活对象继续引用时,即可以宣判已经死亡判断对象存活一般有两种方式: 引用技术算法和 可达性分析算法引用计数算法每个对象保存一个整型的 引用计数器属性,用于记录对象被引用的原创 2021-12-13 16:25:37 · 277 阅读 · 0 评论 -
Java虚拟机(十三)——垃圾回收概述
概述垃圾收集,不是Java语言的伴生产物,早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大的提高了开发效率。如今,垃圾收集几乎成为了现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这也是面试的热点。什么是垃圾垃圾是指在运行程序中没有任何指针指向的对象如果不及时对原创 2021-12-11 21:28:34 · 233 阅读 · 0 评论 -
Java虚拟机(十二)——StringTable
String 的基本特性字符串,用""引起来表示声明为final的,不可被继承实现了Serializable接口,表示字符串支持序列化,实现了Comparable接口,表示String可以比较大小。String在JDK8以及以前内部定义了final char[]存储字符串数据 ,JDK9之后改用了final byte []。修改是因为部分字符集使用char会导致一个字节的空间浪费。MotivationThe current implementation of the St原创 2021-12-10 23:09:02 · 530 阅读 · 0 评论 -
Java虚拟机(十)——直接内存概述
直接内存(Direct Memory)概述不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域直接内存是存在Java堆外,直接向系统申请的内存区间来源于NIO,通过存在堆中的DirectByteBuiffer操作本地内存访问直接内存通常性能会优于Java堆因此读写频繁的场合优先考虑使用直接内存Java的NIO库允许Java程序使用直接内存,用于数据缓冲区也可能导致OOM异常OutOfMemoryError:Direct buffer memoryJava堆和原创 2021-12-10 08:45:41 · 741 阅读 · 0 评论 -
Java虚拟机(十一)——执行引擎
执行引擎是Java虚拟机核心的组成部分之一,虚拟机的执行引擎是由软件自行实现的,能够执行不被硬件直接支持的指令集格式;JVM的主要任务就是负责装载字节码到其内部,但是字节码并不能直接运行在操作系统之上。所以需要执行引擎。执行引擎的任务就是 将字节码指令解释/编译为对应平台的本地机器指令才可以工作过程执行引擎在执行的过程中究竟需要执行什么样的字节码指令,完全依赖于PC寄存器每当执行完一项指令操作后,PC寄存器就会更新下一条需要被执行的指令地址当然方法在执原创 2021-12-09 18:26:32 · 537 阅读 · 0 评论 -
Java虚拟机(九)——方法区
堆、栈、方法区的交互关系线程是否共享:三者的交互关系:Person person = new Person();Person存储在方法区,person在Java栈, newPerson()则在Java堆方法区的理解方法区的位置《Java虚拟机规范》中明确说明:“尽管所有的方法区逻辑上属于堆的一部分,但是一些简单的实现可能不会选择去进行垃圾收集或者压缩”对于Hotspot来说,方法区还有一个别名:Non-heap(非堆),目的是与堆分开所以方法区可以看做是一块独立于Java堆的内存空间原创 2021-12-08 09:37:34 · 382 阅读 · 0 评论 -
Java虚拟机(八)——堆
堆-运行时数据区最重要的内容堆的核心概述一个JVM 实例只存在一个堆内存,对也是Java内存管理的核心区域Java堆区在JVM启动的时候就被创建,空间大小也是固定的,是JVM管理的最大的一块内存空间注:堆内存大小可以调节, -Xms 堆的初始大小 -Xmx 堆的最大大小Java虚拟机规范规定,堆可以物理上不连续,但是逻辑上应该被视为连续的所有的线程共享Java堆,在这里可以划分线程私有的缓冲区(Thread Local Allocation Buffer,TLAB)原创 2021-11-30 09:06:28 · 452 阅读 · 0 评论 -
Java虚拟机(七)——本地方法接口与本地方法栈
本地方法接口什么是本地方法?一个Native Method(本地方法)就是一个Java调用非Java代码的接口,,该方法的实现都由 非Java语言实现,比如C/C++。这个特征并非Java所特有,其它很多的编程语言都由这一个机制,C++ 中可以用extern "C"告知C++编译器去调用一个C的函数在定义一个为什么要使用本地方法?与Java环境外交互本地方法存在的主要原因,就是Java应用又是需要与外面环境交互与操作系统交互:通过使用本地方法,我们可以用Java实现Jre与底层原创 2021-11-25 10:14:32 · 177 阅读 · 0 评论 -
Java虚拟机(六)——虚拟机栈
虚拟机栈虚拟机栈概述出现背景:由于跨平台的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点跨平台指令集小编译器容易实现缺点性能下降实现同样的功能需要执行更多的指令。内存中的栈和堆栈是运行时的单位,堆是存储的单位局部变量的基本数据类型放在栈中局部变量的引用数据类型的引用放在栈中,数据存在堆中。默认下,堆空间是运行时数据区最大的一部分区域(某些情况下方法区可能会更大)Java虚拟机中不止有栈和堆,还有其它原创 2021-11-20 20:05:12 · 1025 阅读 · 0 评论 -
Java虚拟机(五)——程序计数器
PC寄存器(程序计数器)概述PC Register介绍JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU寄存器。寄存器存储指令相关的信息,CPU只有把数据装在到寄存器才能够运行。这里的寄存器并非物理寄存器,JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟它是一块很小的内存空间,也是运行速度最快的存储区域JVM规范中,每个线程都有它自己的程序计数器,是线程私有的。生命周期与线程的生命周期保持一致任何时间一个线程都只有一个方法在执行,原创 2021-11-18 13:28:40 · 521 阅读 · 0 评论 -
Java虚拟机(四)——运行时数据区
运行时数据区内部结构概述内存概述内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略。保证了JVM的高效稳定运行。不同的JVM对内存的划分方式和管理机制存在着部分差异结构Java虚拟机定义了若干中程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁,另外一些则是与线程一一对应的,这些与线程对应的数据区会随着线程开始和结束而创建和销毁PC(程序计数器)、原创 2021-10-24 10:40:37 · 108 阅读 · 0 评论 -
Java虚拟机(三)——类加载子系统概述
文章目录类加载子系统虚拟机执行流程类加载子系统作用类加载器角色类加载过程1. 加载(Loading)2. 链接(Linking)验证(verify)准备(Prepare)解析(Resolve)初始化(Initialization)类加载器的分类引导类加载器(启动类加载器)扩展类加载器用户自定义类加载器实现步骤:关于ClassLoader双亲委派机制工作原理优势沙箱安全机制其它知识点判断class对象是否为同一个类的两个必要条件JVM必须知道由启动还是用户类加载器加载Java程序对类的使用方式附:永久代与元空原创 2021-08-11 23:37:40 · 125 阅读 · 0 评论 -
Java虚拟机(二)—主流Java虚拟机分类及发展历程
文章目录Sun Classic VMExact VMHotspot VMJRockit VMIBM J9 VMKVM和CDC/CLDC HotspotAzul VM 、Liquid VMAzul VMLiquid VMApache HarmonyMicrosoft JVMTaobao JVM/Alibaba JVMDalvik VM 及其他虚拟机Graal VMSun Classic VM世界上第一款商用的虚拟机在JDK1.4时被完全淘汰hotspot虚拟机内置了此虚拟机这款虚拟机内部只提供了解原创 2021-08-08 16:27:58 · 421 阅读 · 0 评论 -
Java虚拟机(一)——虚拟机概述
参考书目官方规范文档 The Java Virtual Machine Specification java SE 8 EditionJava 虚拟机规范(JavaSE 8版)–不建议买深入理解Java 虚拟机 第三版 --周志明自己动手写Java虚拟机JVM 的架构模型基于栈式架构的特点设计和实现更简单,适用于资源受限的系统避开了寄存器的分配难题,使用零地址指令方式分配指令流中的指令大部分是零地址指令,其执行过程中依赖于操作栈,指令集更小,编译器更容易实现;但原创 2021-08-04 08:54:15 · 351 阅读 · 0 评论