![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
jvm
文章平均质量分 94
猿小羽
技术本身是不值钱的,只有和业务结合的技术才是值钱的!
技术是为了实现某个业务,进而通过业务赚钱!
展开
-
两篇文章带你搞懂GC垃圾回收之基础篇
文章目录1.JVM GC回收哪个区域的垃圾?2.判断对象可以回收的方法2.1 引用计数法2.2 可达分析算法2.3 什么对象可以当作GC Roots?虚拟机栈中的引用对象全局的静态的对象常量引用本地方法栈中JNI引用的对象3.垃圾回收算法3.1 标记清除算法3.2 复制算法3.3 标记压缩算法3.4 分代回收算法4.垃圾回收器理解什么是STW?4.1 Serial 和 Serial Old 回收器4.2 ParNew 回收器4.3 Parallel Scavenge 回收器4.4 Parallel Old原创 2020-11-08 17:44:42 · 6407 阅读 · 17 评论 -
一文搞定 JVM 面试,教你吊打面试官~
实现通过类的全限定名获取该类的二进制字节流的代码块叫做类加载器。Java中有如下四种类加载器引导类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的核心类库,比如rt.jar、charsets.jar等,该加载器无法被Java程序直接引用。扩展类加载器:负责加载支撑JVM运行的位于JRE的lib目录下的ext扩展目录中的JAR类包。系统类加载器:负责加载ClassPath路径下的类包,主要就是加载你自己写的那些类。自定义加载器:负责加载用户自定义路径下的类包。原创 2022-09-05 17:39:54 · 1749 阅读 · 0 评论 -
第二章 - 类加载器子系统
第二章 - 类加载器子系统1.内存结构概述先上中文版熟悉之后可以直接上英文版假设我们想自己手写一个Java虚拟机的话,必须考虑哪些结构类加载器执行引擎2.类加载子系统2.1 类加载器子系统的作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,原创 2022-05-11 22:59:54 · 694 阅读 · 0 评论 -
第十七章 - 垃圾回收器
第十七章 - 垃圾回收器文章目录第十七章 - 垃圾回收器1.GC 分类与性能指标1.1 垃圾收集器分类1.1.1 按线程数分1.1.2 按工作模式分1.1.3 按碎片处理方式分1.1.4 按工作的内存区间分1.2 评估 GC 的性能指标1.2.1 评估 GC 的性能指标:吞吐量(Throughput)1.2.2 评估 GC 的性能指标:暂停时间(pause time)1.2.3 吞吐量 vs 暂停时间2.不同的垃圾回收器概述2.1 垃圾回收器发展史2.2 7 款经典的垃圾收集器2.3 7 款经典收集器与垃原创 2022-01-25 14:56:04 · 1531 阅读 · 9 评论 -
第十六章 - 垃圾回收相关概念
第十六章 - 垃圾回收相关概念文章目录第十六章 - 垃圾回收相关概念1.System.gc( )的理解1.1 手动 GC 来理解不可达对象的回收2.内存溢出与内存泄露2.1 内存溢出(OOM)2.2 内存泄露(Memory Leak)2.2.1 Java中出现内存泄露的例子3.Stop The World4.垃圾回收的并行与并发4.1 程序中的并行与并发4.1.1 并发(Concurrent)4.1.2 并行(Parallel)4.1.3 并发和并行对比4.2 垃圾回收中的并行与并发5.安全点与安全区域5原创 2022-01-23 18:27:25 · 984 阅读 · 0 评论 -
第十五章 - 垃圾回收相关算法
第十五章 - 垃圾回收相关算法文章目录第十五章 - 垃圾回收相关算法1.标记阶段:引用计数算法1.1 垃圾标记阶段:对象存活判断1.2 引用计数算法1.3 小结2.标记阶段:可达性分析算法2.1 可达性分析算法(根搜索算法、追踪性垃圾收集)2.2 基本思路2.3 GC Roots3.对象的finalization机制3.1 生存还是死亡?3.2 具体过程4.MAT与JProfiler的GC Roots溯源4.1 MAT是什么?4.2 获取dump文件方式一:命令行使用 jmap方式二:使用JVisualV原创 2022-01-22 11:09:22 · 1192 阅读 · 0 评论 -
第十四章 - 垃圾回收概述
第十四章 - 垃圾回收概述文章目录第十四章 - 垃圾回收概述1.什么是垃圾1.1 **大厂面试题**1.2 什么是垃圾?2.为什么需要GC3.早期垃圾回收4.Java垃圾回收机制担忧GC主要关注的区域1.什么是垃圾垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Lisp语言诞生。关于垃圾收集有三个经典问题:哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的原创 2022-01-22 11:19:05 · 819 阅读 · 0 评论 -
第十三章 - StringTable
第十三章 - StringTable文章目录第十三章 - StringTable1.String的基本特性1.1 String在jdk9中存储结构变更1.2 String的基本特性2.String的内存分配3.String的基本操作4.字符串拼接操作5.intern( )的使用5.1 **面试题**5.2 intern的使用:JDK6 vs JDK7/85.2.1 练习(对JDK不同版本intern的进一步理解)5.3 intern的效率测试:空间角度6.StringTable的垃圾回收7.G1中的Str原创 2022-01-22 11:15:57 · 1523 阅读 · 5 评论 -
第十二章 - 执行引擎
第十二章 - 执行引擎文章目录第十二章 - 执行引擎1.执行引擎概述1.1 执行引擎的工作流程2.Java代码编译和执行过程3.机器码、指令、汇编语言3.1 机器码3.2 指令3.3 指令集3.4 汇编语言3.5 高级语言C、C++源程序执行过程3.6 字节码4.解释器4.1 解释器工作机制4.2 解释器分类4.3 现状5.JIT编译器5.1 Java代码的执行分类5.2 HotSpot JVM的执行方式5.3 概念解释5.4 热点代码及探测技术方法调用计数器回边计数器5.5 HotSpotVM 可以设置原创 2022-01-22 11:15:27 · 1004 阅读 · 0 评论 -
第十一章 - 直接内存(Direct Memory)
第十一章 - 直接内存(Direct Memory)文章目录第十一章 - 直接内存(Direct Memory)1.直接内存概述2.BIO 与 NIO3.直接内存与OOM1.直接内存概述不是虚拟机运行时数据区的一部分,也不是《Java虚拟机规范》中定义的内存区域直接内存是在Java堆外的、直接向系统申请的内存区间来源于NIO,通过存在堆中的DirectByteBuffer操作Native内存通常,访问直接内存的速度会优于Java堆。即读写性能高因此出于性能考虑,读写频繁的场合可能会考虑使用原创 2022-01-22 11:14:55 · 3736 阅读 · 0 评论 -
第十章 - 对象的实例化内存布局与访问定位
文章目录1.对象的实例化1.1 大厂面试题1.2 创建对象的方式1.3 创建对象的步骤1.3.1 判断对象对应的类是否加载、链接、初始化1.3.2 为对象分配内存1.3.3 处理并发安全问题1.3.4 初始化分配到的空间1.3.5 设置对象的对象头1.3.6 执行init方法进行初始化2.对象的内存布局2.1 对象头2.2 实例数据2.3 对齐填充2.4 内存布局总结3.对象的访问定位3.1 句柄访问3.2 直接指针(HotSpot采用)1.对象的实例化1.1 大厂面试题美团对象在JVM中原创 2020-11-30 15:36:50 · 1536 阅读 · 0 评论 -
第九章 - 方法区
文章目录1.栈、堆、方法区的交互关系2.方法区的理解2.1 方法区的位置2.2 方法区的理解2.3 Hotspot中方法区的演进过程3.设置方法区大小与OOM3.1 JDK7 永久代3.2 JDK8 元空间3.3 方法区OOM3.4 如何解决OOM?4.方法区的内部结构4.1 方法区结构4.1.1 类型信息4.1.2 域(Field)信息4.1.3 方法(Method)信息4.2 域信息特殊情况4.3 运行时常量池5.方法区使用举例6.方法区的演进细节6.1 永久代演进过程6.2 永久代为什么要被元空间替代原创 2020-11-30 10:18:33 · 4507 阅读 · 8 评论 -
第八章 - 堆
文章目录1.堆的核心概述1.1 认识堆内存1.2 查看堆内存1.3 堆内存分区(重要)2.设置堆内存大小与OOM2.1 设置堆空间大小2.2 OOM举例3.年轻代与老年代3.1 Java 对象分类3.2 配置新老比例4.图解对象分配过程4.1 对象分配过程4.2 图解对象分配(重要)4.3 特殊情况说明4.4 常用调优工具5.GC垃圾回收器5.1 分代收集思想(面试必问)5.2 Young/Minor GC5.3 Major GC5.4 Full GC5.5 GC 日志分析6.堆空间分配思想7.内存分配策略原创 2020-11-27 20:51:07 · 4282 阅读 · 6 评论 -
第七章 - 本地方法栈
文章目录1.本地方法栈2.注意事项1.本地方法栈Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小(在内存溢出方面和虚拟机栈相同)如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackoverflowError 异常。如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那么Java原创 2020-11-27 20:54:35 · 1443 阅读 · 0 评论 -
第六章 - 本地方法接口
文章目录1.本地方法2.native 方法举例3.为什么要使用Native Method?1.本地方法简单地讲,一个Native Method是一个Java调用非Java代码的接囗一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C。这个特征并非Java所特有,很多其它的编程语言都有这一机制,比如在C++中,你可以用extern "C"告知C++编译器去调用一个C的函数。“A native method is a Java method whose i原创 2020-11-27 20:52:47 · 1474 阅读 · 0 评论 -
第五章 - 虚拟机栈
文章目录1.虚拟机栈概述1.1 虚拟机栈出现的背景1.2 内存中的栈与堆1.3 虚拟机栈的基本内容1.3.1 虚拟机栈的特点1.3.2 虚拟机栈的异常1.3.3 设置栈内存大小2.栈的存储单位2.1 栈的运行原理2.2 栈帧的内部结构3.局部变量表3.1 局部变量表介绍3.2 关于 Slot 的理解3.3 Slot 的重复利用4.操作数栈(Operand Stack)4.1 操作数栈的特点4.2 操作数栈的作用5.代码追踪6.栈顶缓存技术(Top Of Stack Cashing)7.动态链接(Dynami原创 2020-11-22 10:53:51 · 4478 阅读 · 6 评论 -
第四章 - 程序计数器
文章目录1.PC 寄存器介绍2.PC 寄存器的作用3.代码示例4.两个常见面试题5.CPU时间片官网文档1.PC 寄存器介绍JVM中的程序计数寄存器(Program Counter Register),Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一原创 2020-11-20 20:39:40 · 2414 阅读 · 1 评论 -
第三章 - 运行时数据区概述及线程
文章目录1.前言2.运行时数据区结构2.1 运行时数据区与内存2.2 线程的内存空间3.线程3.1 JVM线程3.2 JVM系统线程1.前言本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载 --> 验证 --> 准备 --> 解析 --> 初始化,这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们的运行时数据区比如大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据原创 2020-11-20 19:37:19 · 3176 阅读 · 2 评论 -
第二章 - 类加载器子系统
文章目录1.内存结构概述2.类加载子系统2.1 类加载器子系统的作用2.2 类加载器ClassLoader角色2.3 类的加载过程2.3.1 加载(Loading)阶段2.3.2 链接(Linking)阶段2.3.3 初始化(Initialization)阶段3.类加载器的分类3.1 虚拟机自带的加载器3.1.1 启动类加载器(引导类加载器)3.1.2 扩展类加载器3.1.3 系统类加载器3.2 用户自定义类加载器3.3 关于 ClassLoader3.3.1 获取 ClassLoader 的途径4.双亲委原创 2020-11-20 15:41:36 · 8506 阅读 · 11 评论 -
第一章 JVM和Java体系架构
文章目录1.jvm前言2.开发人员的病态3.架构师在想什么4.为什么学习jvm5.Java VS C++6.TIOBE 排行榜7.Java 生态圈8.Java的跨平台性9.字节码10.多语言混合编程11.自己写个jvm12.Java的重大事件13.虚拟机介绍13.1 虚拟机概念13.2 Java虚拟机14.jvm的位置15.jvm的整体结构16.Java代码执行流程17.JVM架构模型17.1 两种架构的举例17.2 反编译字节码文件17.3 总结18.jvm生命周期1.jvm前言作为Java工程师原创 2020-11-18 10:53:08 · 13871 阅读 · 4 评论