Java内存空间的划分
堆内存:new创建的对象和数组(成员变量存放在堆内存中),由Java虚拟机的自动垃圾回收器来管理
栈内存:基本类型的变量数据和对象的引用变量都在函数的栈内存中分配(局部变量存放在栈内存中),当该变量退出该作用域后,Java会自动释放掉为该变量所分配的内存空间
常量池:用final修饰的成员变量表示常量,值一旦给定就无法改变!final修饰的变量有三种:静态变量、实例变量和局部变量,分别表示三种类型的常量。
(1)java中基本类型的包装类的大部分都实现了常量池技术,即Byte,Short,Integer,Long,Character,Boolean这6种包装类默认创建了数值[-128,127]的相应类型的缓存数据,如果超出则存入堆内存不存入常量池中
(2)两种浮点数类型的包装类Float,Double并没有实现常量池技术。
实际上,栈中的变量指向堆内存中的变量(栈中的变量引用了堆中的变量),这就是Java中的指针!
一个程序中的内存调用图: