Java内存管理笔记
栈(stack)内存:
JVM内存指令区
存放基本数据类型的变量和对象的引用变量,常量,Java指令代码
对象方法本身及内部变量保存在stack中,值保存在heap中
对象的静态属性保存在stack中,值保存在heap中
优点:管理简单,存取速度快,数据可以共享
缺点:存在栈中的数据大小与生存周期必须的是确定的,缺乏灵活性
堆(heap)内存:
JVM内存数据区
存放new()方法创建的对象实例包括其属性值和数组
每一个对象实例在堆中分配一定的内存用来保存之后,需要在stack中保存一个4字节heap内存地址,用来定位该对象实例在heap中的位置,便于找到该对象实例
对象的非静态属性保存在heap中,但heap中必须通过stack中的地址指针才能给访问
优点:可动态分配内存大小,生存期也不必事先告诉编译器,灵活
缺点:存取速度较慢
非静态方法有一个隐含的传入参数,该参数是JVM给它的,此参数乃stack的地址指针,而静态方法即无此参数,故此时的静态方法是存取不到heap中的对象属性的

浙公网安备 33010602011771号