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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 符立波 于 2012-11-19 21:18 编辑

构造代码块是在内存中的什么区域,堆内存或是方法区?还有就是内存区域中的几片区域中的数据,什么时候或者是什么情况下就会被当作垃圾清理掉?

评分

参与人数 1技术分 +1 收起 理由
滔哥 + 1

查看全部评分

3 个回复

倒序浏览
构造代码块是在内存的方法区中,随类的加载而加载,为所有类对象初始化相同属性
第二个问题就要说垃圾回收机制的原理了,这里我就直接摘抄面试大全里张老师给的解释了:
对于GC(垃圾回收机制)来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范(不强制执行时)并不保证GC一定会执行,这也是垃圾回收机制的随机性,不确定什么时候会回收垃圾。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1.构造代码块是对所有的对象进行初始化,为所有对象共享,是随着类的加载而加载,所以存在方法区。
2.栈内存中的数据会在数据数据使用完毕后自动消失。
而会被当做垃圾清理掉。你说的应该是垃圾回收机制。
    垃圾回收机制针对对象,也就是针对堆内存中的数据。
   当在堆内存创建对象,会在栈内存中创建对象的引用,指向对象在堆内存中的地址,当没有引用指向对象时,对象就会被系统作为垃圾,对象在堆内存中的数据就会放在垃圾回收器中,被系统会所处理。
也可以将对象的引用设为 null, 提醒系统为垃圾,进行垃圾处理。

评分

参与人数 1技术分 +1 收起 理由
古银平 + 1 赞一个!

查看全部评分

回复 使用道具 举报
1,构造代码块是给对象初始化的,并且先于构造方法,是跟随类的加载而加载的,因此是存储在方法区中
2,内存中主要的三个区域是:栈,堆,方法区
     栈:用于存储局部变量,当数据使用完,所占空间自控释放;
     堆:用于存储数组和对象,通过new建立的实例都存放在堆内存中,每一个实体都有内存地址,实体中的变量都有默认初始值
           实体不再被使用(即没有引用指向对象),会在不确定的时间内被垃圾回收器回收
     方法区:也叫共享区,数据区;存储类中的方法,共享数据

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