对于Java虚拟机我们都有所耳闻,也就是JVM,JVM内存共分为虚拟机栈、堆、方法区、程序计数器、本地方法五个部分;
-
虚拟机栈:线程私有的,每个方法在执行时会创建一个栈帧,用来存储局部变量表、操作数栈、动态连接、方法返回地址等;其中局部变量表用于存放8种基本数据类型(boolean、bye、char、short、int、float、long、double)和reference类型。每个方法从调用到执行完毕对应一个栈帧在虚拟机栈中的入栈和出栈
-
堆:线程共享的,在虚拟机启动时创建,用于存放对象实例
方法区:线程共享的,用于存储已被虚拟机加载的类信息、敞亮、静态变量等
程序计数器:线程私有的,是当前线程所执行的字节码行号指示器,每个线程都有个一个独立的程序计数器,字节码解释器工作时通过改变它的值来选取下一条需要执行的字节码指令,分支,循环,跳转,异常处理和线程恢复都依赖于它
本地方法栈:线程私有的,主要为虚拟机用到的native方法服务,与虚拟机栈类似
栈是一种具有后进先出性质的数据结构,也就是说后存放的先取,先存放后取。 -
堆是一种经过排序的树形数据机构,每个节点都有一个值。
通常我们所属的堆的数据结构,是指二叉堆。堆的特点是根节点的值最小(或最大),且根节点的两个子树叶是一个堆。由于堆的这个特性,常用来实现优先队列,堆的存取是随意的
网友评论