zoukankan      html  css  js  c++  java
  • 【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()方法通知虚拟机需要回收,但是否真正回收还是有虚拟机自己决定。

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

  • 相关阅读:
    导入已有项目到svn
    Linux用ICMP协议实现简单Ping网络监测功能
    c++ tcp 服务器和客户端例子
    C++ Socket 编程
    c++工厂模式和多线程结合
    Linux中ls命令详解
    Mac OS X 11中的/usr/bin 的“Operation not permitted”
    Warning: mysql_connect(): No such file or directory 解决方案总结(操作系统: Mac)
    页面组件渲染小组件(重点)
    Vue 路由
  • 原文地址:https://www.cnblogs.com/cnsec/p/13286701.html
Copyright © 2011-2022 走看看