面试题 常问之JVM ,以及在项目中如何调优

本文详细阐述了JVM中的内存结构,包括线程共享区(方法区和堆)、线程私有区(虚拟机栈、本地方法栈和程序计数器),以及新生代和老生代的堆内存管理。同时介绍了JMM的Happens-Before规则确保线程可见性。还讨论了在项目中如何处理内存不足问题,以及如何调整IDEA项目的默认内存配置。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.JVM中虚拟机内存结构划分

线程共享区:方法区、堆

线程私有区:虚拟机栈、本地方法栈、程序计数器

堆、方法区、虚拟机栈、本地方法栈、程序计数器。

堆内存分成新生代和老生代(大小比例1:2),新生代中由Eden和Survivor0,Survivor1组成,三者的比例是8:1:1,新生代的回收机制采用复制算法,在Minor GC的时候,我们都留一个存活区用来存放存活的对象,真正进行的区域是Eden+其中一个存活区,当我们的对象时长超过一定年龄时(默认15,可以通过参数设置),将会把对象放入老生代,当然大的对象会直接进入老生代,老生代采用的回收算法是标记整理算法

方法区(Method Area)与Java堆一样,是各线程共享的内存区域,它用于存储已被虚拟机加载的类型信息、常量、静态变量、即时编译器编译后的代码缓存等数据。

虚拟机栈的作用:主管Java程序的运行,它保存方法的局部变量、部分结果,并参与方法的调用和返回

本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的&#

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值