JVM知识白话讲解

首先JVM全称java虚拟机,是java面试过程中常问的问题,这里对JVM作讲解,足以应付面试,以后工作中如果用到,还需要深耕,学习以下知识大概1小时就可以应付一般的面试了

一、JVM内存结构

以上蓝色部分表示线程私有的,表示每个线程单独都有一份:栈、本地方法栈、程序计数器。黄色部分表示线程共有的部分:堆、方法区。

首先看线程私有的部分:栈:栈是一种先进后出的数据结构,代码的运行就是压栈弹栈的过程;本地方法栈:java底层保留了许多c写的方法,这些c写的native方法就是依靠本地方法栈执行;程序计数器:程序计数器是用来记录方法执行到哪一步了,最简单来说递归调用时,jvm如何知道执行到哪了就靠程序计数器。

其次看线程共享的部分:堆:堆是最大的一块内存,简单说所有代码中new出来的对象都存在堆内存中,堆内存中有两代:新生代和老年代,其中新生代发生的垃圾回收叫新生代GC,也叫轻GC;老年代发生的垃圾回收叫老年代GC,也叫Full GC;这两个垃圾回收有区别,Full GC耗时且会使得JVM暂停,所以项目会卡,轻GC很快,所以JVM调优其实是在想办法让Full GC的次数少一些。

新生代:新生代中分为三个区域:Eden区,from区(s0区),to区(s1区)

老年代:老年代中存放的是幸存区中活到15岁就会被放到老年代

方法区:方法区中存放的是静态变量,常量,类信息

二、类加载机制

类加载机制分为三个阶段

1.加载阶段

由不同的类加载器将.class文件从硬盘读取到内存中,类加载器有三种:

(1)启动类加载器:加载jre的核心包

(2)扩展类加载器:加载jre的ext目录下的扩展jar包

(3)系统类加载器:加载我们自己编写的类

加载机制:

(1)全盘委托机制:当一个classloader加载一个类时,这个类依赖和引用的其他类也由这个classloader加载

(2)双亲委派机制:默认会向当前类加载器的parent加载器加载,parent加载器加载不了才会使用下一层的加载器加载。

2.连接阶段

(1)验证

验证字节码文件的正确性

(2)准备

给类的静态变量分配内存,给默认值

(3)解析

类加载器装载当前类引用和依赖的其他类

3.初始化阶段

执行静态代码块和程序员给变量的赋值

三、垃圾回收算法

1.判断是否是垃圾的两个算法

(1)引用计数法

(2)可达性分析法

2.垃圾回收算法

(1)标记-清除算法

(2)复制算法

(3)标记-整理算法

(4)分代收集法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值