? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 浅谈堆栈的区别
? ? ? ? ? ?堆栈在计算机中是两种不同的数据结构:堆是队列优先,先进先出(FIFO);栈是先进后出(LIFO)的;
在java中
? ? ? ? java是一种自动分配内存和垃圾回收的语言,这一切都是在 jvm中进行的自动操作;java的设计者将jvm的内存结构划分为多个不同的内存区,每一个内存区都拥有各自的用途,都会负责储存各自的数据类型;
? ? ? ?JVM的内存分区如下图:
java 堆区:
? ? ? ?是内存回收的主要区域,主要存放的是对象和数组的实例;
方法区:
? ? ? ?方法区仅仅是逻辑上的独立,实际上还包含着唉java堆区中;里面存储每一个类的结构信息,比如:运行时常量池、字段和方法数据、构造函数和普通方法的字节码内容以及类、实例、接口初始化时需要用到的特殊方法等数据;
?
运行时常量池:
? ? ? ?属于方法区中的一部分,运行时常量池就是字节码文件中常量池表的运行时表示形态;
?
java栈区 :
? ? ? ?存储的是局部变量、对象引用和returnAddress类型;
?
PC寄存器:
? ? ? 是对物理 PC寄存器的一种抽象模拟,是线程私有的,生命周期与线程的生命周期保持一致;如果当前线程所执行的方法是一个java方法,那么PC寄存器就会存储正在执行的字节码的指令地址,如果是native方法,PC寄存器的值就为空;
?
本地方法栈:
? ? ? 用于支持本地方法的执行;