• 【jvm】GC笔记(一)


    什么是垃圾回收(GC)?

    垃圾回收是为了释放那些不在被使用的独享以释放存储空间,提高程序效率。

    什么时候需要GC?

    当一个对象变得不可达(对象已死)的时候可以回收。

    什么是不可达呢?就是一个对象没有在任何地方被引用,则它就是不可达的,可以被回收的。

    怎么判断对象是活的还是死的(不可达的)?

    1.通过引用计数计数器

    为对象设置一个应用计数器,当该对象被引用时,计数器加1,当引用失效时就减1,当计数器的值为0时,则表明没有在任何地方引用到它,可以被GC。但是它无法解决对象之间相互循环引用的问题。

    2.通过根搜索算法

    通过一系列名为GC Roots的对象向下搜索,搜索所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连(即对象不可达)时就可以判定对象是死的,可以被GC。

    Java中可作为GC Root的对象

    • 虚拟机栈(栈帧中的本地变量表)中引用的对象。

    • 方法区中类静态属性引用的对象。

    • 方法区中常量引用的对象。

    • 本地方法栈中JNI(即一般说的Native方法)引用的对象。

    GC回收的主要地方?

    GC主要对堆中的对象进行回收,也会对方法区(永久代)进行回收。主要回收两部分内容:废弃常量和无用的类。

    废弃的常量:没有任何地方引用的这个常量,则它是废弃的常量,会被移出常量池。

    无用的类:

    GC回收什么时候进行

    GC的时间不确定,具体由虚拟机自己控制,也可以调用gc()方法通知虚拟机需要回收,但是否真正回收还是有虚拟机自己决定。

    一个对象至少要被两次标记为可回收才会回收。

  • 相关阅读:
    【转】linux清屏的几种方法
    【转】Ubuntu 64位系统安装交叉编译环境一直提醒 没有那个文件或目录
    【转】无法获得锁 /var/lib/dpkg/lock
    层级原理图设计方法
    【转】gcc 编译使用动态链接库和静态链接库
    【转】设置 vim 显示行号永久有效
    【转】VMware 全屏显示
    emwin之自绘制 BUTTON 图形的一些问题
    使用 sizeof 获取字符串数组的大小
    emwin之2D图形流位图显示的方法
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286701.html
Copyright © 2020-2023  润新知