JVM
大象大象你的鼻子怎么那么长
学海无涯乐作舟,直挂云帆济沧海
展开
-
JVM之垃圾回收(1-概述+算法)
文章目录1.概述什么是垃圾大厂面试题为什么需要GC早期垃圾回收Java垃圾回收机制2. 垃圾回收相关算法2.1 标记阶段:法1_引用计数法 (java没有采用)2.2 标记阶段:法2_可达性分析算法2.3 对象的finalization机制2.4 清除阶段:法1_标记-清除算法2.5 清除阶段:法2_复制算法2.6 清除阶段:法3_标记-压缩(整理,Mark-Compact)算法2.7 小结2.8 分代收集算法2.9 增量收集算法、分区算法 1.概述 什么是垃圾 Java = (C++)– 什么是垃圾(原创 2020-09-29 23:57:16 · 1816 阅读 · 0 评论 -
JVM之字符串常量池StringTable
文章目录1.String的基本特性2.String的内存分配3.String的基本操作4.字符串拼接操作5.intern()的使用new String("ab")会创建几个对象,new String("a")+new String("b")呢关于String.intern()的面试题总结String的intern()的使用6.StrtingTable的垃圾回收7.G1中的String去重操作 1.String的基本特性 String:字符串,使用一对""引起来表示。 String sl = “hell原创 2020-09-27 17:30:04 · 518 阅读 · 0 评论 -
JVM之执行引擎
文章目录执行引擎概述Java代码编译和执行过程什么是解释器( Interpreter),什么是JIT编译器?为什么说Java是半编译半解释型语言?机器码、指令、汇编语言机器码指令指令集汇编语言高级语言字节码C、C++源程序执行过程解释器JIT编译器HotSpot VM 为何解释器与JIT编译器共存热点代码及探测方式方法调用计数器热度衰减回边计数器HotSpot VM 可以设置程序执行方式HotSpot VM 中的JIT分类C1和C2编译器不同的优化策略 执行引擎概述 执行引擎是Java虚拟机的核心组成部原创 2020-09-27 17:12:14 · 706 阅读 · 1 评论 -
JVM之运行时数据区(对象的实例化内存布局与访问定位+直接内存)
1.对象的实例化 1.1 创建对象的方式 new 最常见的方式 变形1 : Xxx的静态方法 变形2 : XxBuilder/XxoxFactory的静态方法 Class的newInstance():反射的方式,只能调用空参的构造器,权限必须是public Constructor的newInstance(Xxx):反射的方式,可以调用空参、带参的构造器,权限没有要求 使用clone() :不调用任何构造器,当前类需要实现Cloneable接口,实现clone() 使用反序列化:从文原创 2020-09-26 23:44:35 · 125 阅读 · 0 评论 -
JVM之运行时数据区(方法区)
文章目录1. 堆、栈、方法区的交互关系2. 方法区的理解3.设置方法区大小与OOM方法区OOM4.方法区的内部结构类型信息域信息(成员变量)方法信息non-final的类变量运行时常量池5.方法区的使用举例6.方法区的演进细节永久代为什么要被元空间替换StringTable 为什么要调整如何证明静态变量存在哪7.方法区的垃圾回收8. 总结面试题: 1. 堆、栈、方法区的交互关系 运行时数据区结构图 堆、栈、方法区的交互关系 2. 方法区的理解 《Java虚拟机规范》中明确说明:‘尽管所有的方法区在逻辑上原创 2020-09-26 22:49:43 · 499 阅读 · 0 评论 -
JVM之运行时数据区(堆)
文章目录1.核心概述1.1 配置jvm及查看jvm进程1.2 分析SimpleHeap的jvm情况1.3 堆的细分内存结构2.设置堆内存大小与OOM2.1 查看堆内存大小2.2 堆大小分析2.3 OOM3.年轻代与老年代4.图解对象分配过程4.1 概述4.2 对象分配的特殊情况4.3 代码举例4.4 常用调优工具5.Minor GC、Major GC、Full GC6.堆空间分代思想7.内存分配策略8.为对象分配内存:TLAB(线程私有缓存区域)9.小结堆空间的参数设置10.堆是分配对象的唯一选择么(不是)原创 2020-09-13 13:46:07 · 219 阅读 · 0 评论 -
JVM之运行时数据区(PC寄存器、虚拟机栈、本地方法栈)
文章目录1.程序计数器(PC寄存器)1.1 作用1.2 代码示例1.3 面试常问2.虚拟机栈2.1概述2.1.1 背景2.1.2 内存中的堆与栈2.1.3 虚拟机栈是什么2.1.4 栈的特点2.1.5 栈中可能出现的异常2.1.6设置栈的内存大小2.2 栈的存储结构和运行原理2.2.1 原理2.2.2 栈帧的内部结构2.3 局部变量表(Local Variables)2.3.1 概述2.3.2 变量槽slot的理解与演示2.3.3 slot的重复利用2.3.4 静态变量与局部变量的对比及小结2.4 操作数栈原创 2020-09-12 22:34:32 · 650 阅读 · 1 评论 -
JVM之内存与线程
文章目录内存与线程1. 内存2. 分区介绍3. 线程4. JVM系统线程 内存与线程 1. 内存 内存是非常重要的系统资源,是硬盘和cpu的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了JAVA在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的jvm对于内存的划分方式和管理机制存在着部分差异(对于Hotspot主要指方法区) 2. 分区介绍 java虚拟机定了了若干种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建,随着虚拟机退出而销毁原创 2020-09-12 22:32:56 · 333 阅读 · 0 评论 -
JVM之类加载子系统
文章目录JVM架构图1.类加载子系统作用1.1 类加载器ClassLoader角色1.2 加载1.3 链接1.3.1 验证1.3.2 准备1.3.3 解析1.4 初始化2.类加载器分类2.1 自定义类与核心类库的加载器2.2 虚拟机自带的加载器2.3 用户自定义类加载器3 ClassLoader的常用方法及获取方法3.1 ClassLoader类,它是一个抽象类,其后所有的类加载器都继承自ClassLoader(不包括启动类加载器)3.2 ClassLoader继承关系3.3 获取ClassLoader的途原创 2020-09-02 20:40:19 · 151 阅读 · 0 评论