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