八股文JVM连问

JVM整体架构图

在这里插入图片描述

类加载

1.JVM类加载过程
加载.class文件–验证符合规范–准备(静态变量设置内存分配初始值)–解析–初始化
a.说说验证阶段做了什么事情
b.说说准备阶段做了什么事情 private static int a,分配初始默认值
c.说说解析阶段做了什么事情 常量池内的符号引用替换为直接引用
d.说说初始化阶段做了什么事情 赋值,初始化阶段其实就是执行构造器()方法的过程。
2.JVM有哪些类加载器
在这里插入图片描述
启动类加载器(Bootstrap ClassLoader): 用c++编写,是JVM自带的类加载器,负责java平台核心库,用来装载核心类库,该加载器无法直接获取;
扩展类加载器(Extension ClassLoader):负责jre/lib/ext目录下的jar包或 -D java.ext.dirs 指定下的jar包装入工作库
应用程序类加载器(Application ClassLoader): 负责加载用户类路径 classpath 上所有的 jar 包和 .class 文件。
自定义类加载器 :可以支持一些个性化的扩展功能。避免反编译

3.双亲委派模型的好处
在这里插入图片描述
查缓存没有–找到最顶层父加载器没有–依此往下找;
a.性能
b.安全性
4.类装载方式
a隐式装载, 程序在运行过程中当碰到通过new 等方式生成对象时,隐式调用类装载器加载对应的类到jvm中。
b显式装载, 通过class.forname()等方法,显式加载需要的类
5.动态加载
动态加载所需要的类

内存模型 重点

在这里插入图片描述
a.内存独享和内存共享的部分?
共享:堆、方法区
b.堆、栈、本地栈、方法区、程序计数器
堆:new出来的对象和数组等信息
栈:存放局部变量表、操作数帧、动态链接、方法出口信息
局部变量表:存放jvm运行时的局部变量
操作数栈:存放jvm运行时变量的运算
动态连接:每一个栈帧内部都包含一个指向运行时常量池中该栈帧所属方法的引用,包含这个引用的目的就是为了支持当前方法的代码能够实现动态链接(Dynamic Linking)。比如:invokedynamic指令
方法出口信息:返回值
方法区:存放类信息、静态信息、运行时常量池
程序计数器:程序计数器会记录每次当前执行代码的行号指示器
c.用main方法执行来简述jvm动态执行过程

垃圾回收

1.垃圾定位器

引用计数法:

通过给对象增加引用计数器,记录当前对象被引用的次数,当引用次数为0时就会标记为垃圾;
该方法在循环引用的情况下无法解决,会造成内存泄漏,如对象A引用对象B,对象B同时引用对象A(A->B, B->A)。

可达性分析法:

通过规定的一些GC根节点出发去查找,如果一个对象和根节点之间没有引用路径,或引用链不可达,则该对象会被标记为垃圾;
如果出现这种情况:Root->A->B, C->D,则C和D都为垃圾,因为与根节点Root不联通;
Root节点:本地方法栈和虚拟机栈引用的对象;常量和静态变量引用的对象。
2.垃圾回收算法原理
复制算法:两块区域,每次用一块。将不需要回收的对象标记起来,复制到另一块区域,清除原来区域的回收对象。
缺点:内存利用率低
在这里插入图片描述
标记清除算法:标记回收对象,然后进行清除。
缺点:空间连续性差
在这里插入图片描述

标记整理算法:标记清除对象,清除,然后进行整理
缺点:每次都得移动对象
在这里插入图片描述
分代收集算法:
1.新生代采用复制算法;
2.老年代采用标记清除算法;(因为老年代GC很少访问,类也一般不会直接就分配到老年代里面,所以碎片化内存就还好)

3.对象创建过程和垃圾回收过程 重点

分配过程

在这里插入图片描述
a.逃逸分析:栈上分配
b.小对象:tlab-新生代–新生代满了触发youngGC–存活增加晋升年龄–满足16去到老年代
c.大对象:老年代(为了避免为大对象的分配内存时的复制操作而降低效率)
https://www.cnblogs.com/cqqfboy/p/15303967.html

垃圾回收过程

在这里插入图片描述

MinorGC:1.新生代所有空间<老年代剩余
FullGC:

4.垃圾回收器
https://blog.csdn.net/weixin_45970271/article/details/123508686
a.垃圾回收器种类
串行回收器:单线程执行,独占
并行回收器:多线程执行,独占
并发回收器:多线程执行,共享
b.JVM中的垃圾回收器
连线表示可以搭配使用
在这里插入图片描述

JVM调优****实操,难

1.为什么要进行JVM调优?
2.一般会进行哪些操作的调优?
3.如何进行JVM调优?内存飙高怎么排查?如何避免FULLGC

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值