JVM学习

JVM的主要组成部分?及其作用?

类加载器,运行时数据区,执行引擎,本地库接口
作用: 首先通过类加载器,会把java代码转换成字节码,运行时数据区再把字节码加载到内存中,而字节码文件需要解析器执行引擎将字节码翻译成底层系统指令,在交给cpu去 执行,而这个过程中,需要调用其他语言的本地库接口来实现整个功能.

说一下jvm运行时数据区?

Java虚拟机规范规定的区域分为5部分:
程序计数器: 指示当前线程该执行的位置
Java虚拟机栈:用于存储局部变量表操作数栈,动态链接,方法出口信息
本地方法栈:为虚拟机调用Native方法
Java堆 :为所有对象的实例分配内存空间
方法区: 用于存储类的信息,常量,静态变量,等…

说一下堆栈的区别?

功能:堆是用来存放对象的,栈是用来执行程序的
共享性:堆是线程共享的,栈是线层私有的
空间大小: 堆大小远远大于栈

队列和栈是什么?有什么区别?

队列和栈都是用来存储数据的
队列允许先进先出检索元素,但是Deque接口允许从两端检索元素
栈和队列很相似,但他对元素是先进后出进行检索

什么是双亲委派模型?

对于任意一个类,都需要由加载他的类加载器和这个类本身统一确立在jvm中的唯一性,都有一个独立的类名称空间,类加载器就是根据指定全路径名称将class文件加载到jvm,在转化为对象.
双亲委派:就是如果一个类加载器收到了类加载的请求,他首先不会自己去加载这个类,而是把这个请求委派给父类加载器去加载,每一层类加载器都是这样的,这样,所有的加载请求都会被传送到顶层的启动类加载器中,只有当父类加载无法完成加载请求时,子加载器才会尝试去加载类

说一下类装载的执行过程?

5个步骤:
加载:根据路径找到class文件导入
检查:检查class文件的正确性
准备:给类中的静态变量分配内存空间
解析: 虚拟机解析常量池中的引用
初始化:对静态变量和静态代码块的初始化工作

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

一般有两种方法:
引用计数器:为每一个对象创建一个引用计数器.有对象引用时计数器 +1,引用释放时 计数器-1,当计数器为0,就可以被回收.缺点不能解决循环引用的问题
可达性分析: 从GCRoots 开始向下搜索,搜索所走过的路径成为引用链.当一个对象到GCROOTS没有任何引用链是,证明此对象可以被回收
GCROOTS : 线程栈的本地变量,(局部变量)静态变量, 作为起点,开始搜索,找到了就不是垃圾,找不到就是

Java中有哪些引用类型?

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

分代垃圾收集的工作过程?

分代回收器有两个分区新生代和老年代,
新生代分为Eden ToSurvivor 和From Survivor 比例8:1:1
新生代使用的是复制算法. New一个对象会放到Eden区 满了会触发 minor GC, 有效对象一次性会放到Survivor From区分代年龄加1 ,此时清空Eden 区 ,当 Eden区满再次触发minorGC时,会回收Eden 和 from 的垃圾,将还存在引用的对象放到To区 ,分代年龄加1 ,以此往复。当分代年龄达到15 就会放到老年代(Spring 中的bean, 线程池中的对象…),当老年代达到某个值会触发fullGC,一般使用标记整理算法.以上循环往复就是整体的执行流程.但是老年代越来越多,会发生oom

为什么会STW?

如果不停掉应用线程,很有可能在按照GCROOT找引用链的过程中,线程执行完GCROOT被销毁,很有可能就变成垃圾而jvm并不知道,做了很多无用功,为了避免这些,所以才会有Stop the world

说一下jvm有哪些垃圾回收算法?

标记清除算法:标记无用对象,然后进行回收,缺点: 效率不高,无法清理垃圾碎片
标记整理算法:标记无用对象,让所有存活对象都向一端移动,然后直接清除掉便捷以外的内存
复制算法:按照容量划分两个大小相等的内存区域,当一块用完的时候将活着的复制到另一块,然后把已使用 的内存空间一次清理掉.缺点内存使用率不高,只有原来的一半.
分代算法:新生代使用复制算法,老生代使用标记整理算法.

说一下jvm有哪些垃圾回收器?

Serial : 单线程 串行垃圾回收器
ParNew :是Serial的多线程版本
Parallel:是多线程 吞吐量优先的收集器
CMS :以获得最短停顿时间为目标的收集器
G1:兼顾吞吐量和停顿时间的GC实现

详细介绍CMS垃圾回收器?

CMS 是以牺牲吞吐量为代价来获得最短停顿时间的垃圾回收器,适合要求服务器响应速度的应用,我们可以再参数上”-XX:+UseConcMarkSweepGC”来指定使用.
使用的是标记-清楚算法实现的,会产生大量碎片,这是CMS会采用Serial Old回收器进行垃圾清除,此时性能将会被降低.

调优fullGC?

Xmn: 调大新生区 ,这样对象在新代中时间较长,容易被minorGC回收减少fullGC

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值