黑马程序员技术交流社区

标题: 静态存储区和方法区有什么区别 [打印本页]

作者: 尤洋    时间: 2012-8-2 09:03
标题: 静态存储区和方法区有什么区别
在视频中提到 static 变量保存在方法区,但是在其他资料里也提到静态存储区
用来存放static类型的变量,那么这两个 是否指的内存中同一块地方呢。
他们有什么区别没有。和其他的内存区域又有什么联系
作者: 赵方明    时间: 2012-8-2 09:10
指的是同一个地方
方法区里又分出了一个静态方法区用来存储静态变量和代码块
作者: 余明辉    时间: 2012-8-2 09:21
静态区存放的是静态变量和字符串常量
代码区是存放代码的,比如说一些普通方法,在没调用前都是存在代码区的,这2个不是同一个地方,从存放数据的类型就能看出
堆用来存储局部变量,方法的形参,对象的引用也是存放在这里的,这里的数据只要出了它的作用域,就会消失掉的
栈存储的都是一个个new出来的对象,这些数据要看有没有引用指向他们,如果没有的话,由垃圾回收器自动清理
java内存管理分4部分:heap堆,stack栈,data segment 数据区,和code segment代码区

举个例子

String s = “abc”  存放在常量池里面的
void method() {
    Person p = new Person();  
}
//这里是在方法中new的对象,p作为一个局部变量,是存放在栈上,而new Person作为对象,是在堆上的,当这个方法一结束,P就消失掉,这个时候new Person这个对象就没有引用指向它了,它的消失时间是由垃圾回收器决定的
希望能帮你理解下,内存分配蛮重要的,有些时候画下内存图,能帮助理解不少代码






欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2