Java把内存划分为以下4个部分 1、栈区:一般由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束后,系统自动释放JVM内存资源
2、堆区:一般由程序员分配释放,存放由new创建对象和数组,jvm不定时查看是否有引用指向这个对象,如果没有引用指向这个对象就回收
3、静态区:存放全局变量,静态变量和字符串常量,不释放
4、代码区:存放程序中方法的二进制代码,而且是对多个对象共享一个代码空间区域
对于局部变量如果是基本类型,会把值直接存储在栈;如果是引用类型,比如String ss = new String("test");会把ss存储在栈中,把对象存储(new String("test"))在堆。由于指针是私有的,栈销毁后,在内存中对象没有其他的引用,就会被回收,因此局部变量的生命周期比较短,就是栈的生命周期