JVM及调优(面试高概率问题)

本文详细介绍了JVM的内存区域,包括程序计数器、虚拟机栈、本地方法栈、堆和方法区的详细解释。讨论了不同代之间的内存分配,如年轻代和老年代的比例,以及对象晋升到老年代的条件。同时,讲解了JVM调优的相关参数,如堆内存设置、逃逸分析和对象创建过程。还涵盖了垃圾回收算法,如标记-清除、复制、标记-整理和分代收集,以及各种垃圾回收器的工作原理。最后提到了内存溢出的情况和对象引用类型。
摘要由CSDN通过智能技术生成

JVM及调优

1.Java虚拟机内存区域划分(重要):方法区、堆 虚拟机栈、本地方法栈、程序计数器
(1)程序计数器:当前线程执行代码的行号
(2)虚拟机栈(-Xss):线程私有,每个方法执行时都会创建一个栈帧用于存储局部变量表,栈中存放各种基本数据类型和对象的引用
(3)本地方法栈:本地方法栈保存native方法信息,jvm线程中调用native方法时通过动态链接直接调用
(注意:一个线程调用方法只有一个栈;本地方法栈、程序计数器、虚拟机栈运行时数据区线程私有,堆和方法区在所有线程间共享)
(4)堆:堆包含年轻代、老年代,新生代和老年代比例1:2
①年轻代:包含Eden、Survivor0、Survivor1,内存大小分配为8:1:1。新建的实例会放先放在eden中,eden空间满后触发MinorGC,存活的对象移入Survivor0;eden空间再次满后触发MinorGC,eden区和Survivor0区存活的对象会被移入Survivor1.这样保证一段时间内总有一个survivor为空。
②老年代:新建的对象实例初始年龄为0,每活过一个MinorGC年龄加1,当年龄达到15则将该对象移入老年代。当老年代空间满后会进行fullGC,导致stw,系统会停止所有工作线程等待整个堆进行垃圾回收,需尽量避免
(5)方法区:也称永久代(一般进行大小的限制),存储已被虚拟机加载的类信息,常量,静态方法等,在JDK1.8时被取消,而提出了元空间的概念来代替它的功能。这么做主要是避免OOM的出现。此外是为了融合HotSpotJVM和JRockit,但JRocki

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值