![](https://img-blog.csdnimg.cn/20201014180756724.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
java虚拟机底层原理笔记
冬雪是你
正就读于成都大学计算机学院软件工程专业
展开
-
JVM第十六章_垃圾回收相关概念
文章目录1、System.gc()的理解2、内存溢出与内存泄露内存溢出 ( 00M)内存泄露(Memory Leak)3、Stop The World4、垃圾回收的并行与并发并发(Concurrent)并发(Parallel)并发vs并行垃圾回收的并发与并行5、安全点与安全区域安全点(Safepoint)安全区域(Safe Region)6、再谈引用:强引用再谈引用强引用 ( Strong Reference) 一一不回收7、再谈引用:软引用软引用( Soft Reference)一内存不足即回收8、再谈引原创 2020-06-20 23:38:54 · 173 阅读 · 0 评论 -
JVM第十五章_垃圾回收相关算法
文章目录1、垃圾标记阶段的算法之运用技术算法垃圾标记阶段 :对象存活判断方式一: 引用计数算法循环引用小结2、垃圾标记阶段的算法之可达分析性算法方式二:可达性分析(或根搜索算法、追踪性垃圾收集)GC Roots注意:3、对象的finalization机制生存还是死亡?具体过程4、垃圾标记阶段的算法之标记-清除算法垃圾清除阶段标记-清除(Mark-Sweep)算法5、垃圾标记阶段的算法之复制算法复制(Copying)算法优点:缺点:特别的:应用场景:6、垃圾标记阶段的算法之标记-压缩(整理)算法标记-压缩(或原创 2020-06-19 14:02:36 · 209 阅读 · 0 评论 -
JVM第十四章_垃圾概述
文章目录1、什么是垃圾大厂面试题什么是垃圾?2、为什么需要GC3、早期垃圾回收4、Java垃圾回收机制1、什么是垃圾垃圾收集,不是Java语言的伴生产物。早在1960年,第一门开始使用内存动态分配和垃圾收集技术的Li sp语言诞生。关于垃圾收集有三个经典问题:➢哪些内存需要回收?➢什么时候回收?➢如何回收?垃圾收集机制是Java的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java的垃圾收集机制仍然在不断的演进中,不同大小的设备原创 2020-06-19 13:55:36 · 179 阅读 · 0 评论 -
JVM第十三章_StringTable
文章目录1、String的基本特性String在jdk9中存储结构变更String的基本特性2、String的内存分配3、String的基本操作4、字符串拼接操作5、intern()的使用6、G1中的去重操作1、String的基本特性string:字符串,使用一対""引起来表示。String s1 = “atguigu”;//字面量的定义方式String s2 = new string(“hello”);string声明为final的,不可被継承string現了Seria原创 2020-06-19 13:49:18 · 182 阅读 · 0 评论 -
JVM第十二章_执行引擎
文章目录1、执行引擎概述执行引擎的工作过程2、Java代码编译和执行的过程3、机器码、指令、汇编语言机器码指令指令集汇编语言高级语言字节码4、解释器解释器工作机制(或工作任务)解释器分类现状5、JIT编译器Java代码的执行分类问题来了!HotSpot JVM的执行方式案例来了JIT编译器概念解释热点代码及探测方式方法调用计数器热度衰臧回边计数器HotSpot VM可以设置程序执行方式HotSpot VM中JIT分类C1和C2编译器不同的优化策略:总结写在最后1:写在最后2:关于AOT编译器1、执行引擎概原创 2020-06-19 13:41:09 · 214 阅读 · 0 评论 -
JVM第十一章_直接内存
直接内存概述不是虚拟机运行时数据区的一 部分,也不是《Java虚拟机规范》中定义的内存区域。直接内存是在Java堆外的、直接向系统申请的内存区间。来源于NIO,通过存在堆中的DirectByteBuf fer操作Nat ive内存通常,访问直接内存的速度会优于Java堆。即读写性能高。➢因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。➢Java的NIO库允许Java程序使用直接内存,用于数据缓冲区/** * 查看直接内存的占用与释放 */public clas原创 2020-06-19 13:31:14 · 234 阅读 · 0 评论 -
JVM第十章_对象的实例化内存布局与访问定位
文章目录1、对象的实例化大厂面试题对象实例化的过程:对象的属性赋值的操作:2、对象的内存布局3、对象的定位访问句柄访问直接指针1、对象的实例化大厂面试题美团:对象在JVM中是怎么存储的?对象头信息里面有哪些东西?蚂蚁金服:二面:java对象头里有什么以下为,上述脑图结点的解释:对象实例化的过程:1、加载类元信息 2、为对象分配内存 3、处理并发问题 4、属性的默认初始化(零值初始化) 5、设置对象头的信息 6、属性的显示初始化、代码块中初始化、构造器中初始化对象的属性赋原创 2020-06-18 20:59:49 · 202 阅读 · 0 评论 -
JVM第九章_方法区
文章目录1、栈、堆、方法区的交互关系2、方法区的理解Hotspot方法区的演进3、设置方法区大小与OOM4、方法区的内部结构类型信息域(Field)信息方法(Method)信息non-final的类变量5、运行时常量池VS常量池常量池运行常量池6、方法区的使用举例7、方法区的演进细节1.首先明确:只有HotSpot才有永久代。2.Hotspot中 方法区的变化:常见面试题1、栈、堆、方法区的交互关系从线程共享与否的角度来看2、方法区的理解《Java虚拟机规范》中明确说明:“尽管所有的方法区在逻原创 2020-06-18 20:35:30 · 172 阅读 · 0 评论 -
JVM第八章_堆
文章目录1、堆的核心概述2、堆的核心概述-内存细分3、设置堆空间内存大小与OOM4、测试OOM(OutOfMemoryError)5、新生代与老年代6、图解对象分配过程对象分配过程概述7、Minor GC、Major GC与Full GC8、GC举例与日志分析9、堆空间分代思想10、内存分配策略11、为对象分配内存:TLAB12、小结堆空间的参数设置13、堆是分配对象存储的唯一选择吗?逃逸分析概述代码优化之栈上分配代码优化之同步省略代码优化之标量替换11、本章小结1、堆的核心概述一个JVM实例只存在原创 2020-06-18 20:22:34 · 275 阅读 · 0 评论 -
JVM第七章_本地方法栈
本地方法栈(Native Method Stack)Java虚拟机栈用于管理Java方法的调用,而本地方法栈用于管理本地方法的调用。本地方法栈,也是线程私有的。允许被实现成固定或者是可动态扩展的内存大小。( 在内存溢出方面是相同的)➢如果线程请求分配的栈容量超过本地方法栈允许的最大容量,Java虚拟机将会抛出一个StackoverflowError 异常。➢如果本地方法栈可以动态扩展,并且在尝试扩展的时候无法申请到足够的内存,或者在创建新的线程时没有足够的内存去创建对应的本地方法栈,那原创 2020-06-18 19:49:13 · 389 阅读 · 0 评论 -
JVM第六章_本地方法接口
什么是本地方法?简单地讲,一个Native Method就是一个Java调用非Java代码的接口。一个Native Method是这样一个Java方法:该方法的实现由非Java语言实现,比如C.这个特征并非Java所特有,很多其它的编程语言都有这一机制, 比如在C++中 ,你可以用extern "C"告 知C++编译器去调用一个C的函数。"A native method is a Java method whose implementation isprovided by non-java code..原创 2020-06-18 19:46:54 · 134 阅读 · 0 评论 -
JVM第五章_虚拟机栈
文章目录1、虚拟机栈概述虚拟机栈出现的背景初步印象内存中的栈与堆虚拟机栈基本内容2、栈的存储单位3、局部变量表关于Slot的理解Slot的重复利用举例:静态变量 与局部变量的对比补充说明4、操作数栈5、栈顶缓存(Top-of-Stack-Cashing)技术6、动态链接动态链接(或指向运行时常量池的方法引用)7、方法的调用虚方法与非虚方法关于invokedynamic指令方法重写的本质虚方法表8、方法中的返回地址(Return Address)9、一些附加信息10、栈的相关面试题1、虚拟机栈概述虚拟机栈原创 2020-06-18 19:42:55 · 264 阅读 · 0 评论 -
JVM第四章_程序计数器(PC寄存器)
1、PC Register介绍JVM中的程序计数寄存器(Program Counter Register) 中,Register 的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有 把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误吴会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。作用:PC寄存器用来存储指向下一条指令的地址,也即将要执行的指令代码。由执行引原创 2020-06-18 19:32:39 · 313 阅读 · 0 评论 -
JVM第三章_运行时数据区概述及线程
文章目录1、概述概述关于线程间共享说明2、线程1、概述概述内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行。JVM内存布局规定了Java在运行过程中内存申请、分配、管理的策略,保证了JVM的高效稳定运行。不同的JVM对于内存的划分方式和管理机制存在着部分差异。结合JVM虚拟机规范,来探讨一下经典的JVM内存布局。Java虚拟机定义了若千种程序运行期间会使用到的运行时数据区,其中有一些会随着虚拟机启动而创建, 随着虚拟机退出而销毁。另外一些则是与线程一原创 2020-06-18 19:27:16 · 207 阅读 · 0 评论 -
JVM第二章_类加载子系统
文章目录1、内存结构概述2、类加载与类的加载过程类加载器子系统作用类加载器ClassLoader角色类的加载过程3、加载器的分类虚拟机自带的加载器用户自定义类加载器用户自定义类加载器实现步骤4、ClassLoader的常用方法及获取方式关于ClassLoader获取ClassLoader的途径5、双亲委派机制工作原理双亲委派机制优势沙箱安全机制6、其它对类加载器的引用类的主动使用和被动使用1、内存结构概述详细图如果自己手写一个Java虚拟机的话,主要考虑哪些结构呢?类加载器和执行引擎2、类加载原创 2020-06-18 00:16:32 · 152 阅读 · 0 评论 -
JVM第一章_JVM与Java的体系架构
文章目录1、Java与JVM的简介Java生态圈Java跨平台的语言字节码多语言混合编程如何真正搞懂JVM ?2、Java发展的重大事件Java发展的重大事件Open JDK和 Oracle JDK3、虚拟机与Java虚拟机虚拟机Java虚拟机JVM的位置Google的Android系统结构4、JVM的整体结构5、Java代码执行流程6、JVM的架构模型JVM的架构模型7、JVM的生命周期8、JVM的发展历程Sun Classic VMExact VMSUN公司的HotSp VMBEA的JRockitIBM原创 2020-06-18 00:06:17 · 634 阅读 · 0 评论