黑马程序员技术交流社区

标题: 构造代码块是在内存中的什么区域,堆内存或是方法区? [打印本页]

作者: 符立波    时间: 2012-11-7 14:24
标题: 构造代码块是在内存中的什么区域,堆内存或是方法区?
本帖最后由 符立波 于 2012-11-19 21:18 编辑

构造代码块是在内存中的什么区域,堆内存或是方法区?还有就是内存区域中的几片区域中的数据,什么时候或者是什么情况下就会被当作垃圾清理掉?
作者: 杨志男    时间: 2012-11-7 16:18
构造代码块是在内存的方法区中,随类的加载而加载,为所有类对象初始化相同属性
第二个问题就要说垃圾回收机制的原理了,这里我就直接摘抄面试大全里张老师给的解释了:
对于GC(垃圾回收机制)来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范(不强制执行时)并不保证GC一定会执行,这也是垃圾回收机制的随机性,不确定什么时候会回收垃圾。
作者: 任雷彬    时间: 2012-11-7 19:38
1.构造代码块是对所有的对象进行初始化,为所有对象共享,是随着类的加载而加载,所以存在方法区。
2.栈内存中的数据会在数据数据使用完毕后自动消失。
而会被当做垃圾清理掉。你说的应该是垃圾回收机制。
    垃圾回收机制针对对象,也就是针对堆内存中的数据。
   当在堆内存创建对象,会在栈内存中创建对象的引用,指向对象在堆内存中的地址,当没有引用指向对象时,对象就会被系统作为垃圾,对象在堆内存中的数据就会放在垃圾回收器中,被系统会所处理。
也可以将对象的引用设为 null, 提醒系统为垃圾,进行垃圾处理。
作者: 张利    时间: 2012-11-8 01:03
1,构造代码块是给对象初始化的,并且先于构造方法,是跟随类的加载而加载的,因此是存储在方法区中
2,内存中主要的三个区域是:栈,堆,方法区
     栈:用于存储局部变量,当数据使用完,所占空间自控释放;
     堆:用于存储数组和对象,通过new建立的实例都存放在堆内存中,每一个实体都有内存地址,实体中的变量都有默认初始值
           实体不再被使用(即没有引用指向对象),会在不确定的时间内被垃圾回收器回收
     方法区:也叫共享区,数据区;存储类中的方法,共享数据

   




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