Java内存划分情况

(1)栈区:具有先进后出后进先出的机制。函数或代码块
都加载到栈区。它里面定义的变量都属于局部变量。

当代码块执行完成后,这些变量空间被释放。

(2)堆区:只进不能自动清除。一般动态分配的内存
在这个区中。new关键字产生的内存空间就属于动态内存
分配的空间。这部分空间,如同c中用malloc分配的动态
空间或c++中用new分配的动态空间,他们的释放必须程序员
用free或者是delete进行收工释放。java中用垃圾回收器

程序自动释放无用内存。

(3)常量区和全局变量区:

public static或者是public final修饰的变量。这个区域的内存空间,在结束进程时释放。

(4)字符串常量池:
String str1=”hello”
String str2=”nihao”;
String str3=”hello”;
字符串常量池中不允许有重复的字符串常量值。