Java内存空间的划分

堆内存:new创建的对象和数组(成员变量存放在堆内存中),由Java虚拟机的自动垃圾回收器来管理

栈内存:基本类型的变量数据和对象的引用变量都在函数的栈内存中分配(局部变量存放在栈内存中),当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间

常量池:final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。

(1)java中基本类型的包装类的大部分都实现了常量池技术,即Byte,Short,Integer,Long,Character,Boolean这6种包装类默认创建了数值[-128,127]的相应类型的缓存数据,如果超出则存入堆内存不存入常量池中

(2)两种浮点数类型的包装类Float,Double并没有实现常量池技术。

实际上,栈中的变量指向堆内存中的变量(栈中的变量引用了堆中的变量),这就是Java中的指针!

一个程序中的内存调用图:

原文地址:https://www.cnblogs.com/ztz-99a/p/9189047.html