JVM学习笔记(快速版)

JVM

1、常见面试问题

##  1、谈谈堆JVM的理解

##  2、java8中JVM的新内容

##  3、什么是OOM、什么是StackOverFlowError?怎么分析

##  4、JVM的调优常见参数

##  5、内存快照如何抓取

##  6、如何分析Dump文件

2、JVM的位置

3、JVM的体系结构

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-55yUPkq2-1611572145752)(C:\Users\29683\AppData\Roaming\Typora\typora-user-images\image-20210125170651085.png)]

4、类加载器

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-F9qXtWa1-1611572145756)(C:\Users\29683\AppData\Roaming\Typora\typora-user-images\image-20210123162017958.png)]


(1)类加载器种类

启动类加载器(Bootstrap classLoader),
||(向下)
拓展类加载器(Extension classLoader);
||
应用类加载器(ApplicationClassLoader)

5、双亲委派机制(安全)

---如果要实例化一个对象,则会一开始向上逐层查找ClassLoader一直    到顶层的Bootstrap,如果启动类加载器里面有对应的.class比如    java.lang.String,则会使用启动类加载器,执行已有的class。
---如果自己定义一个类如Student是启动类加载器中所没有的则会向下    查找,最终会通过应用类加载器进行实例化。(见上图)
---过程
   1、加载器接收到类加载的请求
   2、将这个请求向上委托给父类加载器进行完成一直向上委托,直到启动类加载器
   3、启动类加载器检查是否能够加载当前这个类,能加载就直接运行,使用当前的加载器,否则抛出异常通知自家在其
    (会出现经典错误 ClassNotFoundException

6、沙箱安全机制

===Java的安全机制,限制Java代码使用系统资源,CPU、内存等

7、Native

(1)、凡是带了native关键字的

说明java语言的作用范围达不到了,需要区底层调用C语言的库。(本地方法接口JNI),会进入本地方法栈,会调用本地方法接口,JNI(java Native Interface)

(2)、JNI的作用

扩展Java的使用,融合人不同的编程语言为Java所用,Java诞生的时候C和C++横行,要想立足就必须调用c,C++的接口,Java在内存中专门开辟了一块标记区域:Native Method Stack,登记native方法,在最终执行的时候加载本地方法库中的方法通过JNI。

8、PC寄存器

9、方法区

静态变量、常量、类信息(构造方法和接口定义)、运行时的常量池存在方法区中,但是实例变量存在堆内存中,和方法区无关(static、final、CLass,常量池)

10、栈

11、三种JVM虚拟机

12、堆

(1)一个JVM只有一个堆内存,可以调节大小。
(2)、OOM,对内存满,OutOfMemoryError:java heap space 
(3)、OOM的解决方法:
		---尝试扩大堆内存
        ---分析内存,看一下那个地方出现问题(Java内存分析工具JProfier插件以及软件客户端)
									=== 分析Dump内存文件,快速定位内存泄漏问题
									===  获得堆中的数据,获得大的对象

13、新生区

=== 类:诞生、成长甚至死亡的地方(90%的对象都活不过Eden区)
=== Eden区:
=== Survivor0(from区):
=== Survivior1(to区):
	(form区和to区不确定,谁空谁是to区)
=== 通过 -XX:MaxTenuringThreshold=15参数设定可以进入老年代时间

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-NPPANyae-1611572145758)(C:\Users\29683\AppData\Roaming\Typora\typora-user-images\image-20210125181839094.png)]14、老年区

15、堆内存调优

16、GC

GC常用算法

常用题目:

1、JVM内存模型以及内存分区,详细到每个区放什么

2、堆里面的分区有哪些?Eden,from,to,老年,说说他们的特点

3、轻GC和Full GC什么时候发生以及作用范围

--- 回收算法:标记清除法、标记整理、引用计数
--- 判断是否回收:

4、复制算法(谁空谁是to区)

好处:没有内部碎片

坏处:浪费了内存空间,to区永远是空的

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Y9snrY5Z-1611572145762)(C:\Users\29683\AppData\Roaming\Typora\typora-user-images\image-20210125182212422.png)]

5、标记清除算法

好处:不需要额外的空间
坏处:两次扫描,严重浪费时间,会产生内部碎片

6、标记压缩:在标记清除算法的基础上消除了内部碎片。

各种算法比较

内存效率:复制算法>标记清除>标记压缩
内存整齐度:复制算法=标记压缩>标记清除
内存利用率:标记压缩=标记清除>复制算法

GC分代收集算法

年轻代:复制算法(存活率低)
老年代:标记清除+标记压缩混合实现(存活率高)

17、JMM(Java Memory Model)

1、什么是JMM

2、有什么用

--作用:缓存一致性协议、用于定义数据读写的规则。
--举例:多个线程如何使用内存就产生了一定的关系,JMM定义了线程和JVM主内存之间的关系:线程之间的共享变量存储		在主内存中,每个线程都有自己的私有的本地内存,如下图,如果同时写入内存如何保持一致性,和			   Synchronized和volatile产生联系
--主要解决共享对象可见性的问题:volatile

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZgxrlEIS-1611572145764)(C:\Users\29683\AppData\Roaming\Typora\typora-user-images\image-20210125184630089.png)]

3、该如何学习

---JMM是抽象的概念,主要学习volatile的用法
---JMM定义的规则(协议):
https://www.cnblogs.com/null-qige/p/9481900.html

4、JMM面试题

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

coder鹏鹏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值