Java知识分享网 - 轻松学习从此开始!    

Java知识分享网

Java1234官方群25:java1234官方群25
Java1234官方群25:838462530
        

实战springboot+CAS单点登录课程(免费领取)

SpringBoot打造全栈在线教育平台实战课程

毕设代做论文包查重联系人QQ:1982956321毕设大神 毕设代做论文包查重

66套java实战课程无套路领取

Java1234 VIP课程

领取微信扫码登录Java实现视频教程

Java1234至尊VIP(特价活动)

2020年Jvm内存面试问题总结 PDF 下载


分享到:
时间:2020-11-07 11:19来源:http://www.java1234.com 作者:转载  侵权举报
2020年Jvm内存面试问题总结 PDF 下载
失效链接处理
 2020年Jvm内存面试问题总结  PDF 下载


本站整理下载:
提取码:kd62 
 
 
相关截图:
 
主要内容:

Jvm内存面试问题总结(2020)
●jvm中有哪几块内存?
●堆内存
●放对象
●所有线程共享
●栈内存
●放代码的线程。
●线程独有,自由有自己的栈内存。
●永久代(java8之前)
●放我们的类
●放常量池
●线程计数器
●本地方法栈
●放动态库
●堆内存是如何分配的?
●年轻代(默认情况下eden区和s1 / s2区的比例是 8:1:1)
●eden区
●Survivor 区(两个Survivor区大小完全一样)
●Survivor  1 区
●Survivor   2 区
●年老代(默认和年轻代一样)
●java8之后对内存分布做了什么改进?
●主要是 永久代里面的变化
●本来永久代中放了一些类和常量池
●java8以后永久代就没有了
●将常量放入了堆里面
●将类放入了metaspace中
●metaspace是不占用jvm内存空间的,占用的是本地空间。
●jvm是如何运行起来的?
●1 类加载器 先加载war、jar中的class,将我们的类加载到metaspace中
●2.spring容器会基于反射技术将metaspace中的类创建出一个实例bean。将bean加载到堆内存中。
●3. 当线程处理请求的时候,在自己线程独享的内存空间中,每个方法拿到一个栈帧 ,局部变量全部放到栈帧里面去,同时局部变量会去堆内存中引用一个对象,方法层层嵌套,进行压栈。
●jvm在什么情况下会触发gc垃圾回收?
●1. 如果说eden满了,必然会触发gc垃圾回收。youngGC 简称ygc
●此时回收没有人引用的对象。
●静态变量/局部变量引用不会被回收。
●被引用的对象不会被回收。
●常见的垃圾回收算法都有什么?
●引用计数法
●通过引用计数器标记占内存中的变量对堆内存中变量的引用数量,当gc垃圾回收的时候,发现引用计数器中的值是0 ,则被回收.
●引用计数法的缺点 : 无法解决循环引用的问题. 
●标记清除法
●降垃圾回收分成两个阶段, 标记阶段和 清除阶段
●标记阶段,jvm会暂停jvm中的所有线程并开启GC线程. 有一个最大的ROOT对象, 从ROOT对象开始,依次标记,最终没有指向ROOT对象的对象 就是垃圾对象. 
●清除阶段 , 清除垃圾对象 .
●标记清除法优缺点: 解决的了引用计数算法中的循环引用的问题. . 但是每次GC都要扫描全部对象,并且要暂停所有线程,  效率较低 , 同时会产生内存碎片. 
●标记整理法 (JDK1.8 老年代 GC垃圾回收)
●在标记清除算法上做了优化, 第一阶段标记阶段是一样的.
●整理阶段, 把所有被标记的对象全部压缩到内存的一端.
●清理阶段 , 清除所有未被整理的垃圾对象.
●优缺点: 解决了内存碎片化的问题, 但是比标记清除算法更加消耗cpu . 因为中间多了一步对对象的移动这个操作.
●复制算法(JDK1.8 年轻代 GC垃圾回收 Survivor区)
●两块内存大小一样的内存空间,在使用的使用依次使用其中的一个,另一个清除.留做下次使用.如此循环.
●优缺点:在垃圾对象多的时候,效率高,并且在清理后内存无碎片. 但是垃圾对象较少的时候不适用,因为频繁复制,消耗资源. 另一个缺点就是内存只能使用50% .
●分代算法
●根据垃圾回收的特点选择不同的算法.
●老年代 GC垃圾回收
●年轻代 GC垃圾回收  Eden + Survivor ( 0 / 1 ) 区
●年轻代垃圾回收算法?YGC
●对于年轻代而言,大部分对象的生存周期都很短。eden大部分对象都是垃圾!~
●对于年轻代的垃圾回收算法,是复制算法,每次垃圾回收,将没有被回收的对象复制到一个s区,然后将eden区整个清空。完成一次young GC。下一次ygc 时,将eden区和刚刚的s区中的对象筛选一次,将筛选的结果复制存入空白是s区,此时将刚刚被筛选的eden区和s区中的对象全部清空。完成又一次yGC。总的说就是两个s区和eden区进行配合重复完成ygc。

 
 
------分隔线----------------------------
锋哥公众号


锋哥微信


关注公众号
【Java资料站】
回复 666
获取 
66套java
从菜鸡到大神
项目实战课程