Java内存管理笔记

栈(stack)内存: 

     JVM内存指令区

     存放基本数据类型的变量和对象的引用变量,常量,Java指令代码

     对象方法本身及内部变量保存在stack中,值保存在heap中

     对象的静态属性保存在stack中,值保存在heap中

 

     优点:管理简单,存取速度快,数据可以共享

     缺点:存在栈中的数据大小与生存周期必须的是确定的,缺乏灵活性

 

 

 

堆(heap)内存:

     JVM内存数据区

     存放new()方法创建的对象实例包括其属性值和数组

     每一个对象实例在堆中分配一定的内存用来保存之后,需要在stack中保存一个4字节heap内存地址,用来定位该对象实例在heap中的位置,便于找到该对象实例

     对象的非静态属性保存在heap中,但heap中必须通过stack中的地址指针才能给访问

 

     优点:可动态分配内存大小,生存期也不必事先告诉编译器,灵活

     缺点:存取速度较慢

 

非静态方法有一个隐含的传入参数,该参数是JVM给它的,此参数乃stack的地址指针,而静态方法即无此参数,故此时的静态方法是存取不到heap中的对象属性的

posted @ 2012-02-06 11:53  Sunshine.Wu  阅读(158)  评论(0)    收藏  举报