A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 尤洋 中级黑马   /  2012-8-2 09:03  /  1877 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在视频中提到 static 变量保存在方法区,但是在其他资料里也提到静态存储区
用来存放static类型的变量,那么这两个 是否指的内存中同一块地方呢。
他们有什么区别没有。和其他的内存区域又有什么联系

2 个回复

倒序浏览
指的是同一个地方
方法区里又分出了一个静态方法区用来存储静态变量和代码块
回复 使用道具 举报
静态区存放的是静态变量和字符串常量
代码区是存放代码的,比如说一些普通方法,在没调用前都是存在代码区的,这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这个对象就没有引用指向它了,它的消失时间是由垃圾回收器决定的
希望能帮你理解下,内存分配蛮重要的,有些时候画下内存图,能帮助理解不少代码

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马