Java内存分配:堆和栈

版权声明:本文为博主原创文章,欢迎转载,转载请注明作者、原文超链接 https://blog.csdn.net/weixin_43863007/article/details/88704391

Java中的内存分配主要包括以下几个(不全面):

  1. 寄存器:我们在程序中无法控制
  2. 栈:存放基本类型的数据和对象的引用,对象本身存放在堆中
  3. 堆:存放new出的数据和数组
  4. 常量池:存放常量
1.Java内存分配中的栈:

函数中定义的一些基本类型的变量数据和对象的引用地址都在函数的栈内存中分配,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当该变量退出作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另做他用

1.Java内存分配中的堆:

堆内存用来存放由new创建的对象和数组,在堆中分配的内存,有Java虚拟机的自动的垃圾回收器来处理
在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用变量,引用变量就相当于是为数组或对象起的一个名称,以后就可以在程序中使用栈中的引用变量来访问堆中的数组或对象
引用变量就是普通的变量,定义时在栈中分配,引用变量在程序运行到其作用域之外后被释放,而数组的对象本身在堆中分配,及时程序运行到使用new产生数组或者对象的语句所在的代码块之外,数组和对象本身占据的内存不会被释放,数组和对象在没有引用变量指向它的时候,才会变为垃圾,不能再被使用,但仍然占据内存空间不放,在随后的一个不确定的时间被垃圾回收器释放

实际上栈中的变量指向堆内存中的变量,这就是Java中的指针

猜你喜欢

转载自blog.csdn.net/weixin_43863007/article/details/88704391