2、JVM-自动内存管理

本文详细介绍了Java内存区域,包括栈、堆、方法区、本地方法栈、程序计数器和运行时常量池。讨论了各区域的作用,如栈中的栈帧结构、堆的分代管理、方法区的元空间、本地方法栈的本地方法服务以及程序计数器的执行流程指示功能。此外,文章还阐述了OOM异常的不同类型,如堆溢出、虚拟机栈和本地方法栈溢出,以及如何通过设置内存大小进行调试和预防。最后提到了Java 8以后元空间对方法区的替代及其相关参数配置。
摘要由CSDN通过智能技术生成

Java内存区域

java主要分为:堆、栈、本地方法栈、方法区、程序计数器。

每一个线程都有独立的内存空间,内存内主要放我们程序在执行过程当中方法内当局部变量,当方法执行完毕后,内存区域销毁。 (栈和堆的关系,堆存放的是初始化对象。而栈存放的是对象的内存地址,通过指针建立引用关系。)
栈的内部有一部分称为栈帧,其中包含了栈对方法区和堆的指针引用,其内部结构为:
局部变量表:给局部变量分配内存地址;
操作数栈:给局部变量开辟临时内存空间进行运算,例如“a=1,b=a*2”,根据指令执行顺序,会先从内存中拿到a的值在操作数栈中进行运算,并且将运算结果赋给b放入局部变量内存区域;
动态链接:通过指令执行器,在某行号调用方法区内存储的类信息(类的方法体)。
方法出口:主方法调用子方法后,子方法体执行完返回主方法的某一行继续执行,方法出口就在记录这一行的位置。

堆主要分为:新生代(Eden,survivor0,survivor1)、老年代、永久代
**新生代:**新创建的对象。内部分为三个区域Eden、s0、s1,内存分配比例为8:1:1。
**老年代:**当对象分代年龄达到默认值15时,对象放入老年代,还有缓存对象、和数据库连接池当对象ÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值