JAVA基础(20)---数组的内存分配

版权声明:如需转载请标明出处 https://blog.csdn.net/yj201711/article/details/83716013

数组的内存结构分析

JVM在执行Java程序时,会把它管理的内存划分为若干个的区域,每个区域都有自己的用途和创建销毁时间,可以分为两大部分,线程私有区和共享区:

一丶线程私有区

程序计数器:当同时进行的线程数超过CPU数或其内核数时,就要通过时间片轮询分派CPU的时间资源,不免发生线程切换。这时,每个线程就需要一个属于自己的计数器来记录下一条要运行的指令。

 Java虚拟机栈:描述Java方法执行的内存模型,每个方法被执行的时候都会同时创建一个栈帧用于存储局部变量表、操作栈、动态链接、方法出口等信息与线程同时创建。每个方法执行时都会创建一个栈帧来存储方法的信息,新调用的方法入栈,返回的出栈,所以栈的大小决定方法调用的可达深度。

本地方法栈:与虚拟机栈作用相似。但它不是为Java方法服务的,而是本地方法。不同虚拟机实现的方法不同。

二丶线程共享区

此区域是用来存储被各线程共享的数据

方法区:用于存放加载类的元数据信息,存储已被虚拟机加载的类信息、常量、静态变量即时编译器编译后的代码数据等(这个区域的内存回收目标主要是针对常量池的回收和对类型的卸载)

:存放对象实例和数组,在虚拟机启动时创建,是垃圾回收的主要区域,分为新生代和老年代。刚创建的对象在新生代的Eden(Survivor)区中,经过GC后进入新生代的S0区中,再经过GC进入新生代的S1区中,15次GC后仍存在就进入老年代。这是按照一种回收机制进行划分的,不是固定的

Int[] arr = new int[5];//就是一个局部变量

将int[] 视为一个整体 代表的是一种数据类型:整型的数组类型

arr 变量名称

new int[5] 凡是使用new出来的都在堆内存中;

猜你喜欢

转载自blog.csdn.net/yj201711/article/details/83716013