JVM学习笔记

1.字节码文件

代码经过javac编译生成字节码文件,然后字节码文件经过Java虚拟机的解释进行运行。
字节码文件的开头几个字节是:0xCAFEBABE(又称魔数)
字节码文件的组成:
在这里插入图片描述

工具arthas,动态监控修改运行中的系统
在这里插入图片描述
在这里插入图片描述
字节码信息反编译源码

2.类的生命周期

在这里插入图片描述
应用场景:运行时常量池,类加载器的作用,多态的原理,类加密解密

生命周期:
在这里插入图片描述

–1.加载阶段
在这里插入图片描述
所谓不同的渠道:本地文件、动态代理生成、网络传输
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

–2.连接阶段
分为三个小步骤:
在这里插入图片描述
验证:
在这里插入图片描述
准备:
在这里插入图片描述
在这里插入图片描述
解析:
在这里插入图片描述

–初始化阶段:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述


3.类加载器

在这里插入图片描述
JDK8及之前版本中默认的类加载器:
启动类加载器BootstrapClassLoader(可以用参数扩展加载的核心类),扩展类加载器ExtentionClassLoader(加载通用类),应用程序类加载器ApplicationClassLoader(加载自定义类)
JDK9及之后
在这里插入图片描述
在这里插入图片描述


– 双亲委派机制
由于JVM中有多个类加载器,双亲委派机制的核心是解决一个类到底由谁加载的问题(优先级:Boot,Ext,Application)
在这里插入图片描述
在这里插入图片描述


向上查找:如果找到则直接返回已加载的对象
向下加载:检查该类是否在自己配置的加载路径中


–打破双亲委派机制
在这里插入图片描述


打破双亲委派机制:重写loadclass方法
在这里插入图片描述
在这里插入图片描述
自定义类加载器能加载java.lang.String吗?不能,java开头的包在底层被保护起来了,不能自己加载
自定义类加载器的默认父类:
在这里插入图片描述
参考Tomcat的应用隔离机制:
在这里插入图片描述
在这里插入图片描述
类加载器小结:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

4.运行时数据区(内存管理)

在这里插入图片描述

在这里插入图片描述
程序计数器:记录当前执行的字节码指令地址、保存线程切换上下文
在这里插入图片描述
在这里插入图片描述
java虚拟机栈:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
栈默认大小取决于OS和计算机体系结构
在这里插入图片描述
在这里插入图片描述
堆:OOM
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
默认堆大小
在这里插入图片描述
建议
在这里插入图片描述
方法区:
在这里插入图片描述
JDK7及之前:方法区在堆上分配永久代,不合理
JDK8及之后:方法区放在元空间中,不受JVM限制,可以使用OS内存上限

字符串常量池:intern()手动将字符串加入常量池,8之后存放于堆上
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
静态变量存储位置:堆中Class对象,脱离永久代

垃圾回收

在这里插入图片描述

方法区回收:

在这里插入图片描述
在这里插入图片描述

堆回收:

判断堆上对象是否被引用:引用计数法、可达性分析法(java采用的)
1.引用计数法:为对象维护一个引用计数器(简单易用,但是频繁维护影响性能,且无法解决循环引用)
2.可达性分析法:将对象分为两类(根对象、普通对象)
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

垃圾回收算法:
在这里插入图片描述
几种垃圾回收算法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
标记清除算法:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
复制算法:
在这里插入图片描述
在这里插入图片描述
标记整理算法(标记压缩算法):
优化标记清除算法的内存碎片问题,移动碎片到连续空间中

分代GC(主流):
堆被分为:新生代(Eden、Survivor)+老年代

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

youngGC用的复制算法,年龄到15晋升到老年代,老年代满了后:
在这里插入图片描述
在这里插入图片描述

垃圾回收器:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
G1垃圾回收器:
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
G1垃圾回收方式:
1.youngGC
2.MixedGC
在这里插入图片描述
!!与之前的回收算法不同的是第3步,不是整个GC,而是选择部分区域GC,算是一种改进的复制算法。选择的依据是每个区的平均耗时,作为下次GC的参考,以此来满足用户配置的最大暂停时间
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

=============================== 分割线:面试篇 =====================================
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值