jvm堆和栈的区别
在Java语言中,堆与栈都是内存中存放数据的地方,变量分为基本数据类型和引用类型,基本数据类型的变量(例如int、short、long、byte、float、double、boolean以及char等)以及对象的引用变量,其内存都分配在栈上,变量出了作用域就会自动释放,而引用类型的变量,其内存分配在堆上或者常量池(例如字符串常量和基本数据类型常量)中,需要通过new等方式进行创建。
具体而言,栈内存主要用来存放基本数据类型与引用变量,栈内存的管理是通过压栈和弹栈操作来完成的,以栈帧为基本单位来管理程序的调用关系,每当有函数调用时,都会通过压栈方式创建新的栈帧,每当函数调用结束后都会通过弹栈的方式释放栈帧,堆内存用来存放运行时创建的对象,一般来讲,通过new关键字创建出来的对象都存放在堆内存中,由于JVM是基于堆栈的虚拟机,而每个Java程序都运行在一个单独的JVM实例上,每一个实例较早对应一个堆,一个Java程序内的多个线程也就运行在同一个JVM实例上,因此这些线程之间会共享堆内存。
上一篇
上一篇