每一个Java应用都唯一对应一个JVM实例,每一个实例唯一对应一个堆.JVM为每个新创建的线程都分配一个堆栈(先理解为栈).也就是说,对于一个Java程序来说,它的运行就是通过对堆栈的操作来完成的。堆栈以帧为单位保存线程的状态。JVM对堆栈只进行两种操作:以帧为单位的压栈和出栈操作。
某个线程正在执行的方法称为此线程的当前方法,当前方法使用的帧称为当前帧。当线程激活一个Java方法,JVM就会在线程的 Java堆栈里新压入一个帧。这个帧自然成为了当前帧.在此方法执行期间,这个帧将用来保存参数,局部变量,中间计算过程和其他数据.
堆栈(Stack) 是操作系统在建立某个进程时或者线程(在支持多线程的操作系统中是线程) 为这个线程建立的存储区域, 该区域具有先进后出的特性。
Java中所有对象的存储空间都是在堆中分配的,但是这个对象的引用却是在堆栈中分配,也就是说在建立一个对象时从两个地方都分配内存,在堆中分配的内存实际建立这个对象,而在堆栈中分配的内存只是一个指向这个堆对象的指针(引用)而已。
堆: java中的对象和数组都存放在堆中,并由应用所有的线程共享. 由于要在运行时动态分配内存,存取速度较慢。
栈: 存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。 栈中主
要存放一些基本类型的变量(,int, short, long, byte, float, double, boolean, char)和对象引用。
栈中共享例子: int a = 3; int b = 3 具体查看左边单元格的comment