zoukankan      html  css  js  c++  java
  • 谈谈对GC的理解

    GC(GarbageCollection)是垃圾回收机制(垃圾回收器),GC是JVM对内存(实际上就是对象)进行管理的方式。

    Java是由C++发展来的。它摈弃了C++中一些繁琐容易出错的东西。其中有一条就是这个GC。

    C/C++程序,程序员定义了一个变量,就是在内存中开辟了一段相应的空间来存值。内存再大也是有限的,所以当程序不再需要使用某个变量的时候,就需要释放这个内存空间资源,好让别的变量来用它。在C/C++中,释放无用变量内存空间的事情要由程序员自己来解决。就是说当程序员认为变量没用了,就应当写一条代码,释放它占用的内存。这样才能最大程度地避免内存泄露和资源浪费。但是这样显然是非常繁琐的。程序比较大,变量多的时候往往程序员就忘记释放内存或者在不该释放的时候释放内存了。而且释放内存这种事情,从开发角度说,不应当是程序员所应当关注的。程序员所要做的应该是实现所需要的程序功能,而不是耗费大量精力在内存的分配释放上。

    Java有了GC,就不需要程序员去人工释放内存空间。GC使得Java开发人员摆脱了繁琐的内存管理工作,让程序的开发更有效率。当Java虚拟机发觉内存资源紧张的时候,就会自动地去清理无用变量所占用的内存空间。当然,程序员可以在Java程序中显式地使用System.gc()或Runtime.getRuntime().gc()来通知垃圾回收程序,至于垃圾回收程序运不运行,什么时候运行,都是无法控制的。

    如果对象引用被置为null,垃圾收集器是否会立即释放对象占用的内存?

    不会,在下一个垃圾回收周期中,这个对象将是可被回收的.

    是可被回收的:并不是说下一个回收周期,一定去释放。

    释放针对的是一段已被使用的内存,

  • 相关阅读:
    计算表达式的值并输出,表达式由若干个数字和运算符(只包含加号和减号)构成(C版和python版)
    联机分析场景的关键特征(OLAP)
    C语言字符串去掉指定字符
    主机或者路由器是怎样知道应当在MAC帧的首部填入什么样的硬件地址?(ARP)
    linux虚拟机重置root密码
    python获取时间串的方法
    centos离线安装docker
    前端JavaScript规范
    JQuery中的Deferred-详解和使用
    垂直居中实用三种方式
  • 原文地址:https://www.cnblogs.com/rzkwz/p/12469606.html
Copyright © 2011-2022 走看看