没有合适的资源?快使用搜索试试~ 我知道了~
文章目录1. 内存模型以及分区,需要详细到每个区放什么。2. 堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。3. 对象创建方法,对象的内存分配,对象的访问定位。4. GC 的两种判定方法:5. SafePoint 是什么6. GC 的三种收集方法的原理与特点,分别用在什么地方?7. GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。8. Minor GC 与 Full GC 分别在什么时候发生?9. 几种常用的内存调试工具:jmap、jstack、jconsole、jhat10. 类加载的几个过程:11.JVM 内存分哪几个区,每个区的作用是什么?
资源推荐
资源详情
资源评论
JVM大厂高频面试题,连这些都不知道,还敢说自己学过大厂高频面试题,连这些都不知道,还敢说自己学过JVM?
文章目录文章目录1. 内存模型以及分区,需要详细到每个区放什么。2. 堆里面的分区:Eden,survival (from+ to),老年代,各自的特点。3. 对象创建方法,对象的内存分配,对象的访问
定位。4. GC 的两种判定方法:5. SafePoint 是什么6. GC 的三种收集方法的原理与特点,分别用在什么地方?7. GC 收集器有哪些?CMS 收集器与 G1 收集器的特点。8. Minor GC
与 Full GC 分别在什么时候发生?9. 几种常用的内存调试工具:jmap、jstack、jconsole、jhat10. 类加载的几个过程:11.JVM 内存分哪几个区,每个区的作用是什么?12.如何判断一
个对象是否存活?(或者 GC 对象的判定方法)13.简述 java 垃圾回收机制?14.java 中垃圾收集的方法有哪些?15.java 内存模型16.java 类加载过程?17. 简述 java 类加载机制?18. 类加载
器双亲委派模型机制?19.什么是类加载器,类加载器有哪些?20.简述 java 内存分配与回收策率以及 Minor GC 和Major GC21.JVM线程与原生线程的关系22.简述Java内存管理机
制,以及垃圾回收的原理和使用过Java调优工具23.描述JVM加载class文件的原理机制24.说说JVM原理?内存泄漏与溢出的区别?何时产生内存泄漏?25.GC线程是否为守护线程?
26.Java的类加载器都有哪些,每个类加载器都有加载那些类,什么是双亲委派模型,是做什么的?27.垃圾回收器(GC)的基本原理是什么?垃圾回收器可以马上回收内存吗?如何
通知虚拟机进行垃圾回收?28.GC 是什么?为什么要有GC?
1. 内存模型以及分区,需要详细到每个区放什么。内存模型以及分区,需要详细到每个区放什么。
JVM 分为堆区和栈区,还有方法区,初始化的对象放在堆里面,引用放在栈里面,class 类信息常量池(static 常量和 static 变量)等放在方法区
方法区:主要是存储类信息,常量池(static 常量和 static 变量),编译后的代码(字节码)等数据
堆:初始化的对象,成员变量 (那种非 static 的变量),所有的对象实例和数组都要在堆上分配
栈:栈的结构是栈帧组成的,调用一个方法就压入一帧,帧上面存储局部变量表,操作数栈,方法出口等信息,局部变量表存放的是大基础类型加上一个应用类型,所以还是一个指
向地址的指针
本地方法栈:主要为 Native 方法服务
程序计数器:记录当前线程执行的行号
2. 堆里面的分区:堆里面的分区:Eden,,survival ((from+ to),老年代,各自的特点。),老年代,各自的特点。
堆里面分为新生代和老生代(java8 取消了永久代,采用了 Metaspace),新生代包含 Eden+Survivor 区,survivor 区里面分为 from 和 to 区 ,内存回收时,如果用的是复制算法,从 from 复制到
to,当经过一次或者多次 GC 之后,存活下来的对象会被移动到老年区,当 JVM 内存不够用的时候,会触发 Full GC,清理 JVM 老年区。当新生区满了之后会触发 YGC,先把存活的对象放
到其中一个 Survice区,然后进行垃圾清理。因为如果仅仅清理需要删除的对象,这样会导致内存碎片,因此一般会把 Eden 进行完全的清理,然后整理内存。那么下次 GC 的时候,
就会使用下一个 Survive,这样循环使用。如果有特别大的对象,新生代放不下,就会使用老年代的担保,直接放到老年代里面。因为 JVM 认为,一般大对象的存活时间一般比较久远。
3. 对象创建方法,对象的内存分配,对象的访问定位。对象创建方法,对象的内存分配,对象的访问定位。
new 一个对象
4. GC 的两种判定方法:的两种判定方法:
引用计数法:指的是如果某个地方引用了这个对象就+1,如果失效了就-1,当为 0 就会回收但是 JVM 没有用这种方式,因为无法判定相互循环引用(A 引用 B,B 引用 A)的情况
引用链法: 通过一种 GC ROOT 的对象(方法区中静态变量引用的对象等-static 变量)来判断,如果有一条链能够到达 GC ROOT 就说明,不能到达 GC ROOT 就说明可以回收
5. SafePoint 是什么是什么
比如 GC 的时候必须要等到 Java 线程都进入到 safepoint 的时候 ,VMThread 才能开始执行 GC。
循环的末尾 (防止大循环的时候一直不进入 safepoint,而其他线程在等待它进入safepoint)
方法返回前
调用方法的 call 之后
抛出异常的位置
6. GC 的三种收集方法的原理与特点,分别用在什么地方?的三种收集方法的原理与特点,分别用在什么地方?
标记-清除算法:先标记,标记完毕之后再清除,效率不高,会产生碎片
标记-复制算法:分为 8:2的 Eden 区和 survivor 区,就是上面谈到的 YGC,不适用老年代
标记-整理算法:标记完毕之后,让所有存活的对象向一端移动
7. GC 收集器有哪些?收集器有哪些?CMS 收集器与收集器与 G1 收集器的特点。收集器的特点。
并行收集器:串行收集器使用一个单独的线程进行收集,GC 时服务有停顿时间
串行收集器:次要回收中使用多线程来执行
特点:
CMS 收集器是基于“标记—清除”算法实现的,经过多次标记才会被清除
G1 从整体来看是基于“标记—整理”算法实现的收集器,从局部(两个 Region 之间)上来看是基于“复制”算法实现的
8. Minor GC 与与 Full GC 分别在什么时候发生?分别在什么时候发生?
新生代内存不够用时候发生 MGC 也叫 YGC,JVM 内存不够的时候发生 FGC
9. 几种常用的内存调试工具:几种常用的内存调试工具:jmap、、jstack、、jconsole、、jhat
jstack 可以看当前栈的情况
jmap 查看内存
jconsole可以实时的监控Java程序在运行过程中的内存,cpu,线程的使用情况,并可以对加载的相关类进行分析。
jhat 进行 dump 堆的信息
mat(eclipse )
10. 类加载的几个过程:类加载的几个过程:
加载、链接(包括验证、准备以及解析)、初始化。然后是使用和卸载了
通过全限定名来加载生成 class 对象到内存中,然后进行验证这个 class 文件,包括文件格式校验、元数据验证,字节码校验等。准备是对这个对象分配内存。解析是将符号引用转
化为直接引用(指针引用),初始化就是开始执行构造器的代码
11.JVM 内存分哪几个区,每个区的作用是什么内存分哪几个区,每个区的作用是什么?
java 虚拟机主要分为以下一个区:
方法区:
在该区内很少发生垃圾回收,但是并不代表不发生 GC,在这里进行的 GC 主要是对方法区里的常量池和对类型的卸载
方法区主要用来存储已被虚拟机加载的类的信息、常量、静态变量和即时编译器编译后的代码等数据。
该区域是被线程共享的。
方法区里有一个运行时常量池,用于存放静态编译产生的字面量和符号引用。该常量池具有动态性,也就是说常量并不一定是编译时确定,运行时生成的常量也会存在这个常量池
中。
虚拟机栈:
虚拟机栈也就是我们平常所称的栈内存,它为 java 方法服务,每个方法在执行的时候都会创建一个栈帧,用于存储局部变量表、操作数栈、动态链接和方法出口等信息。
虚拟机栈是线程私有的,它的生命周期与线程相同。
局部变量表里存储的是基本数据类型、returnAddress 类型(指向一条字节码指令的地址)和对象引用,这个对象引用有可能是指向对象起始地址的一个指针,也有可能是代表对象的
句柄或者与对象相关联的位置。局部变量所需的内存空间在编译器间确定
操作数栈的作用主要用来存储运算结果以及运算的操作数,它不同于局部变量表通过索引来访问,而是压栈和出栈的方式
每个栈帧都包含一个指向运行时常量池中该栈帧所属方法的引用,持有这个引用是为了支持方法调用过程中的动态连接.动态链接就是将常量池中的符号引用在运行期转化为直接引
用。
本地方法栈
资源评论
weixin_38571603
- 粉丝: 3
- 资源: 926
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功