Java-JVM

JVM的主要组成部分及作用

组件作用
类加载器(ClassLoader)把java代码转换成字节码
运行时数据区(Runtime Data Area)将字节码加载内存中
执行引擎(Execution Engine)将字节码翻译成系统底层指令,然后执行
本地库接口(Native Interface)执行引擎执行过程中,需要使用到本地接口来实现所有程序功能

说一下JVM运行时数据区

内存区域简介
程序计数器(Program Counter Register)当前线程所执行的字节码的行号指示器,用来记录控制执行流程
Java 虚拟机栈(Java Virtual Machine Stack)描述java方法执行的内存模型,方法执行时存储各种数据用,用于存储局部变量、操作数栈、动态连接、方法出口等信息
本地方法栈描述Native方法执行时的内存模型,用于执行Native方法时存储各种数据
Java 堆(java heap)JVM内存中最大的一块,被所有线程共享,保存对象实例用
方法区(Method Area)用于存储被JVM加载的各种信息,比如常量、静态变量等,即编译后的代码等数据

堆栈区别

功能用来存放对象用来执行方法
共享性所有线程共享线程私有
大小

队列和栈是什么,区别

队列
是什么用于存储数据的一中数据结构
特点先进先出先进后出

什么是双亲委派模型

类加载器收到类加载请求时,会先向请求负加载器完成,每一层加载器都是该逻辑,一直到顶层加载器,当父加载器无法加载时,子加载器才会自己加载

说一下类装载的执行过程

1、加载:加载class文件
2、检查:检查加载是否正确
3、准备:给类中的静态变量分配内存空间
4、解析:JVM将符号引用换成直接引用
5、初始化:给静态变量和静态代码块初始化

怎么判断对象是否可以被回收

1、引用计数器:当引用为0时回收
2、可达性分析:当一个对象到GC roots都没有任何引用链相连时,该对象就是可以回收的

Java中有哪些引用类型

引用类型特点
强引用发生GC的时候不会被回收
软引用有用但不是必须的对象,发生内存溢出之前会被回收
弱引用有用但不是必须的对象,在下一次GC时会被回收
虚引用无法通过虚引用获得对象,用PhantomReference实现虚引用,用途是在gc时会返回一个通知

JVM有哪些垃圾回收算法

算法简介
标记-清除算法标记无用对象,然后进行垃圾回收
标记-整理算法标记无用对象,然后让对象向一端移动,然后清除端边界以外的内存
复制算法将可用内存划分成容相等的两份,当一块用完的时候,将存活的对象复制到另一块内存中,然后清除当前内存区域
分代算法根据对象存货周期分成几个内存区域,一般是分为新生代和老年代,新生代采用复制算法,老年代采用标记-整理算法

JVM有哪些垃圾回收器

垃圾回收器简介
Serial最早的单线程串行垃圾回收器
Serial OldSerial回收器的老年代版本,同样单线程,可以作为CMS的备选方案
ParNew是Serial的多线程版本
Parallel和ParNew很像,是多线程,但是Parallel是吞吐量优先,可以牺牲等待时间换区吞吐量
Parallel OldParallel的老年代版本,Parallel使用的是复制回收算法,Parallel Old使用的是标记-整理回收算法
CMS一种以获得最短停顿时间为目标的收集器,适合B/S系统
G1一种兼顾吞吐量和停顿时间的收集器,JDK9之后的默认收集器

详细介绍下CMS收集器

全称Concurrent Mark-Sweep
核心特点一种牺牲吞吐量为代价的为了获取最短停顿时间的垃圾回收器
适合场景要求服务响应速度的应用
配置方式启动JVM的参数上加上“-XX:+UseConcMarkSweepGC”来指定
垃圾回收算法标记清除算法
缺点由于标记清除算法会导致内存碎片出现,当剩余内存不能满足需求时,会出现Concurrent Mode Failure,此时系统会调用Serial Old进行垃圾回收,此时性能会将降低

新生代、老年代回收器有哪些,区别

新生代回收器Serial、ParNew、Parallel Scavenge
老年代回收器Serial Old、Parallel Old、CMS
整堆回收器G1
区别新生代回收器一般采用复制算法回收,优点是效率高,缺点是浪费内存;老年代一般采用标记整理方式回收

简述分代垃圾回收器是如何工作的

分代回收器有两个大的分区,新生代使用的是复制算法,老年代使用标记整理算法回收,大对象会直接进入老年代分区,新生代对象年龄达到15时,也会进入老年代分区

说一下JVM调优工具

工具简介
jconsole用于jvm中线程、内存、类等进行监控
jvisualvmJDK自带的全能分析工具,包含内存快照、线程快照、程序死锁、监控内存变化、gc变化等

常用JVM调优参数

参数简介
-Xms2g初始化堆内存为2g
-Xmx2g堆最大内存为2g
-XX:NewRatio=4设置新生代和老年代的比例为1:4
-XX:SurvivorRatio=8设置新生代Eden和Survivor比例为8:2
-XX:+UseParNewGC指定使用ParNew + Serial Old的垃圾回收器组合
-XX:+UseParallelOldGC指定使用ParNew + ParNew Old的垃圾回收器组合
-XX:+UseConcMarkSweepGC指定使用CMS + Serial Old的垃圾回收器组合
-XX:+PrintGC开启打印GC日志
-XX:+PrintGCDetails开启打印GC详细信息
  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值