Java内存分配与管理是Java的核心技术之一,一般Java在内存分配时会涉及到以下区域:
1.栈区:由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2.堆区:由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
3.全局区(静态区):全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。程序结束后由系统释放。
4.文字常量区:常量字符串就是放在这里的,程序结束后由系统释放 。
5.程序代码区 :见名思意:存放代码的区域。
堆栈内存的分配
栈区:局部变量存在栈内存中。函数的参数值也存放着栈区。保存类的实例,即堆区对象的引用(指针)。
堆:用来存放动态产生的数据,比如new出来的对象。注意创建出来的对象只包含属于各自的成员变量,并不包括成员方法。因为同一个类的对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是每创建一个对象就把成员方法复制一次。常量池存在于堆内存。
代码:package string;
public class memonry {
/**
* @param args
* a1和a2是局部变量,放在栈区,而new出的对象放在堆区,堆区还有某类的成员变量
*/
public static void ma