jvm笔记

JVM学习笔记

应该明白的问题:

对jvm的理解?java8虚拟机和之前的变化更新?

什么是OOM,什么是栈溢出StackOverFlowError?具体分析?

JVM的常用调优参数有哪些?

内存快照如何抓取,怎么分析Dump文件?

谈谈JVM中,类加载器你的认识?

1. jvm的位置

运行在操作系统之上

2. jvm体系结构

在这里插入图片描述

3. 类加载器

作用:加载.class文件 ----》
在这里插入图片描述
1. 虚拟机自带的加载器
2. 启动类(根)加载器
3. 拓展类加载器(jdk1.8之后改为平台类加载器)
4. 应用程序加载器

4. 双亲委派机制

保证安全性能;APP–>EXC—>BOOT

当一个类加载器加载一个类时,会委托其父类来进行加载;

5. 沙箱安全机制

沙箱安全机制是一个限制程序运行的环境。沙箱机制将Java代码限定在虚拟机特定的运行范围内,并严格限制代码堆本地资源的访问。

6. Native

native:凡是带native关键字的,会去调用底层C/C++语言的库

//进入本地方法栈中,调用本地方法接口(java native interface)

//JNI作用 :拓展Java的使用,融合不同的编程语言为Java多用。

7. PC寄存器

每一个线程都有一个程序计数器,线程私有,指向方法区中的字节码,在执行引擎读取下一条指令。

8. 方法区

方法区是被所有线程共享的

存储已被加载的:静态变量,常量,类信息

9. 栈

  • 栈内存:主管程序的运行,生命周期和线程同步;

  • 线程结束,栈内存释放,栈中,不存在垃圾回收问题;

  • 栈:基本类型+对象的引用+实例的方法

在这里插入图片描述
10. 三种jvm

11. 堆

GC垃圾回收,主要是在伊甸园区和养老区

假设内存满了,OOM,堆内存不够,

在jdk8之后,永久存储区改名(元空间)

在这里插入图片描述

12. 新生区、老年区

13. 永久区

这个区域常驻内存,存放JDK自身携带的Class对象,Interface元数据,存储Java运行时的一些环境

* jdk1.6之前:永久代,常量池在方法区
* jdk1.7   :永久代,常量池在堆中
* jdk1.8   :无永久代,常量池在元空间

14. 堆内存调优

项目中,出现OOM故障,怎么排除?
调整对内存大小  dump文件  分析  jprofile

15. GC(垃圾回收)

 JVM在进行GC时,并不是对三个区域统一进行回收。大部分时候,回收的时新生代

 * 新生代
 * 幸存区(from  to)
 * 老年区

 GC种类:轻GC  ,  重GC
 
 **GC题目:**
 * JVM的内存模型和分区,详细每个区放什么?
 * 对里面的分区有哪些?Eden,from,to,老年区?
 * GC算法?标记清楚算法,标记压缩,复制算法,引用计数器
 * 轻GC和重GC分别用在什么时候?

复制算法
在这里插入图片描述

  坏处:浪费内存空间,一半的幸存区保持空
  好处:没有内存碎片

标记清除算法

 * 优点:节省空间
 * 缺点:两次扫描,浪费时间,产生内存碎片

标记压缩算法
在这里插入图片描述
16. 总结

 * 内存效率:复制算法 > 标记算法 >标记压缩 (时间复杂度)
 * 内存整齐度: 复制算法==标记压缩  > 标记清楚算法
 * 内存利用率: 标记压缩算法= 标记清楚算法  > 腐殖酸算法

 **年轻代**

 * 存活率低
 * 复制算法

 **老年代**

 * 区域大:存活率
 * 标记清楚+标记压缩混合实现
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值