一些基本的数据结构概念
栈: 用来存放基本类型的变量数据和对象的引用,但对象本身不在栈中,而是存放在堆中(通过new关键字创建),也会创建在常量池中,如字符串常量对象。
静态域: 存放静态成员(通过static定义)
堆: 存放所有new出来的对象。
常量池: 存放字符串常量和基本类型的常量(通过public static final修饰)
关于栈: 1、栈和常量池中的对象可以共享,但对于堆中的对象不可以共享。 2、栈中的数据大小和生命周期是可以确定的。 3、当没有引用指向栈中的数据时,这个数据就会消失。 4、字符串的对象引用一般存储在栈中,如果是编程时直接定义的,那么就存储在常量池中,如果是通过new对象的方式创建,呢么会存储在堆中。相等的字符串在常量池中只会有一份。
关于堆: 堆中的对象在不被引用时由垃圾回收器负责回收。
若通过new创建一个“pig”字符串,JVM会先去常量池看存不存在“pig”字符,如果不存在,则创建一个常量池对象,再创建一个堆对象。
形式参数是局部变量,局部变量的数据存在于栈内存中。栈内存中的局部变量随着方法的消失而消失。
成员变量存储在堆中的对象里面,由垃圾回收器负责回收。