java 垃圾回收(堆内存)、以及栈内存的释放

一、Java的垃圾回收机制———解疑

Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定时的方式动态回收无任何引用的对象占据的内存空间。

需要注意的是:垃圾回收回收的是无任何引用的对象占据的内存空间而不是对象本身,很多人回答的含义是回收对象,实际上这是不正确的。

System.gc()

Runtime.getRuntime().gc() 

上面的方法调用时用于显式通知JVM可以进行一次垃圾回收,但真正垃圾回收机制具体在什么时间点开始发生动作这同样是不可预料的,这和抢占式的线程在发生作用时的原理一样。

程序员只能通过上面的方法建议JVM回收垃圾,但是JVM是否回收,同样是不可预料的。

 

二、Java垃圾回收机制---回收的堆内存

回收机制有分代复制垃圾回收和标记垃圾回收,增量垃圾回收

所有对象的回收都是由JavaJVM虚拟机通过垃圾回收机制完成的,回收的是堆(Heap)内存GC为了能够正确释放对象,会监控每个对象的运行状况,对他们的申请、引用、被引用、赋值等状况进行监控,Java会使用有向图的方法进行管理内存,实时监控对象是否可以达到,如果不可到达,则就将其回收,这样也可以消除引用循环的问题。在Java语言中,判断一个内存空间是否符合垃圾收集标准有两个:一个是给对象赋予了空值null,以下再没有调用过,另一个是给对象赋予了新值,这样重新分配了内存空间。

三、Java内存泄露(一般我们常说的内存泄漏是指堆内存的泄漏

内存泄露的定义: 当某些对象不再被应用程序所使用,但是由于仍然被引用而导致垃圾收集器不能回收。

Java可能出现内存泄露。

下面给出了一个简单的内存泄露的例子。

Object obj1=new Object();

Object obj2=obj1;

obj1=null;  //此时,创建的Object对象并没有被释放,因为变量obj2引用这个对象。

obj2 = null;  //  这样才能回收

 

 

四、栈内存的释放

当在一段代码块定义一个变量时,Java在栈中为这个变量分配内存空间,当该变量退出其作用域后,Java会自动释放掉为该变量所分配的内存空间,该内存空间可以立即被另作他用。

 

你可能感兴趣的:(java 垃圾回收(堆内存)、以及栈内存的释放)