JAVA中堆内存与栈内存有何本质区别?
- 内容介绍
- 文章标签
- 相关推荐
本文共计1724个文字,预计阅读时间需要7分钟。
Java将内存划分为两种:一种是栈内存,另一种是堆内存。
一、栈内存栈内存用于存储基本数据类型的变量和对象的引用。在函数中定义的局部变量、对象的引用和方法的调用都存储在栈内存中。遵循先进后出的原则。
二、堆内存堆内存用于存储对象的实例。在Java中,所有通过new创建的对象都存储在堆内存中。堆内存的分配和释放由垃圾回收器自动管理。
Java把内存划分成两种:一种是栈内存,一种是堆内存。
一、栈内存
存放基本类型的变量,对象的引用和方法调用,遵循先入后出的原则。
栈内存在函数中定义的“一些基本类型的变量和对象的引用变量”都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
Java中的代码是在函数体中执行的,每个函数主体都会被放在栈内存中,比如main函数。假如main函数里调用了其他的函数,比如add(),那么在栈里面的的存储就是最底层是main,mian上面是add。栈的运行时后入先出的,所以会执行时会先销毁add,再销毁main。
栈的优势是,栈内存与堆内存相比是非常小的,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(int, short, long, byte, float, double, boolean, char)和对象句柄。栈有一个很重要的特殊性,就是存在栈中的数据可以共享。
本文共计1724个文字,预计阅读时间需要7分钟。
Java将内存划分为两种:一种是栈内存,另一种是堆内存。
一、栈内存栈内存用于存储基本数据类型的变量和对象的引用。在函数中定义的局部变量、对象的引用和方法的调用都存储在栈内存中。遵循先进后出的原则。
二、堆内存堆内存用于存储对象的实例。在Java中,所有通过new创建的对象都存储在堆内存中。堆内存的分配和释放由垃圾回收器自动管理。
Java把内存划分成两种:一种是栈内存,一种是堆内存。
一、栈内存
存放基本类型的变量,对象的引用和方法调用,遵循先入后出的原则。
栈内存在函数中定义的“一些基本类型的变量和对象的引用变量”都在函数的栈内存中分配。当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变量的作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。
Java中的代码是在函数体中执行的,每个函数主体都会被放在栈内存中,比如main函数。假如main函数里调用了其他的函数,比如add(),那么在栈里面的的存储就是最底层是main,mian上面是add。栈的运行时后入先出的,所以会执行时会先销毁add,再销毁main。
栈的优势是,栈内存与堆内存相比是非常小的,存取速度比堆要快,仅次于寄存器,栈数据可以共享。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。栈中主要存放一些基本类型的变量(int, short, long, byte, float, double, boolean, char)和对象句柄。栈有一个很重要的特殊性,就是存在栈中的数据可以共享。

