15_垃圾回收相关算法
摘要:1 垃圾标记阶段的算法之引用计数算法 1.1 垃圾标记阶段:对象存活判断 在堆里存放着几乎所有的Java对象实例,在GC执行垃圾回收之前,首先需要区分出内存中哪些是存活对象,哪些是已经死亡的对象。只有被标记为已经死亡的对象,GC才会在执行垃圾回收时,释放掉其所占用的内存空间,因此这个过程可以称为垃圾
阅读全文
14_垃圾回收概述
摘要:1 什么是垃圾 垃圾收集,不是 Java 语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。 关于垃圾收集有三个经典问题: 哪些内存需要回收? 什么时候回收? 如何回收? 垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言
阅读全文
13_StringTable
摘要:1 String的基本特性 String:字符串,使用一对""引起来表示。 String s1 = "hello"; // 字面量的定义形式 String s2 = new String ("hello"); String 声明为 final 的,不可被继承。 String: 实现了 Seriali
阅读全文
12_执行引擎
摘要:1 执行引擎概述 执行引擎是 Java 虚拟机核心的组成部分之一。 “虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的
阅读全文
11_直接内存
摘要:1 直接内存概述 直接内存不是虚拟机运行时数据区的一部分,也不是《Java 虚拟机规范》中定义的内存区域。 直接内存是 Java 堆外的、直接向系统申请的内存区间。 来源于 NIO,通过存在堆中的 DirectByteBuffer 操作 Native 内存。 通常,访问直接内存的速度会优于 Java
阅读全文
10_对象的实例化、内存布局与访问定位
摘要:大厂面试题 美团: 对象在 JVM 中是怎么存储的? 对象头信息里面有哪些东西? 蚂蚁金服 二面:java 对象头里有什么? 1 对象的实例化 对象实例化 创建对象的方式 new 最常见的方式 变形1:Xxx的静态方法 变形2:XxxBuilder/XxxFactory 的静态方法 Class 的
阅读全文
09_方法区
摘要:1 栈、堆、方法区的交互关系 从线程共享与否的角度来看 2 方法区的理解 2.1 方法区在哪里? 《Java 虚拟机规范》中明确说明:“尽管所有的方法区在逻辑上是属于堆的一部分,但一些简单的实现可能不会选择去进行垃圾收集或进行压缩。” 但对于 HotSpot JVM 而言,方法区还有一个别名叫做 N
阅读全文
08_堆
摘要:1 堆的核心概述 一个 JVM 实例只存在一个堆内存,堆也是 Java 内存管理的核心区域。 Java 堆区在 JVM 启动时即被创建,其空间大小也就确定了。是 JVM 管理的最大一块空间。 堆内存的大小是可以调节的。 《Java 虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应
阅读全文
07_本地方法栈
摘要:Java 虚拟机栈用于管理 Java 方法的调用,而本地方法栈用于管理本地方法的调用。 本地方法栈也是线程私有的。 允许被实现成固定或者是可动态扩展的内存大小。(在内存溢出方面是相同的) 如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java 虚拟机将会抛出一个 StackOverflowE
阅读全文
06_本地方法接口
摘要:什么是本地方法 简单地讲,**一个 Native Method 就是一个 Java 调用非 Java 代码的接口。**一个 Native Method 是这样一个 Java 方法:该方法的实现由非 Java 语言实现,比如 C 语言。 在定义一个 native method 时,并不提供实现体(有些
阅读全文
05_虚拟机栈
摘要:1 虚拟机栈概述 1.1 虚拟机出现的背景 由于跨平台的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。 优点是跨平台,指令集小,编译器容易实现。缺点是性能下降,实现同样的功能需要更多的指令。 1.2 内存中的栈与堆 栈是运行时的单位,堆是存储的单位。 即
阅读全文
04_程序计数器
摘要:1 PC Register介绍 JVM中的程序计数器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。 这里并非是广义上所指的物理寄存器,或许将其翻译为pc计数器(或指令计数器)会更
阅读全文
03_运行时数据区概述及线程
摘要:内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM高效稳定地运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。 Java虚拟机定义了若干种程序运行期间会使用到的运行
阅读全文
02_类加载子系统
摘要:1 内存结构概述 2 概述类的加载器及类加载的过程 类加载子系统作用 类加载器子系统负责从文件系统或网络中加载class文件,class文件在文件的开头有特定的文件标识。 ClassLoader只负责class文件的加载,至于它是否能运行,则由Execution Engine决定。 加载的类信息被存
阅读全文
01_JVM与Java体系结构
摘要:1 JVM的整体结构 2 Java代码执行流程 3 JVM的生命周期 虚拟机的启动 Java虚拟机的启动是通过引导类加载器(bootstrap class loader)创建一个初始类(initial class)来完成的,这个类是由虚拟机的具体实现指定的。 虚拟机的执行 一个运行中的Java虚拟机
阅读全文