垃圾回收器(GC Garbage Collection)。

  • 那些内存是需要回收的
  • 什么时候进行回收
  • 如何回收

有哪些内存需要回收,首先程序计数器、虚拟机栈、本地方法栈这些的生命周期和线程的生命周期是一样的,栈中栈帧是随着方法的进入和退出而执行着入栈和出栈,他们在内存分配和回收都是具有确定性的,因为在方法结束或者线程结束时,内存自然就跟着回收了,所以他们不需要过多的考虑回收的问题。
但是Java堆和方法区则不一样,因为一个接口他会有多个实现类,这样内存是不一定的,一个方法中多个分支需要的内存也可能不一样,因为我们只有在程序运行期间才会知道要创建那些对象,这部分内存他是动态的分配和回收也是动态的,垃圾收集器所关注的是这部分内存。

对象是否还存在的问题:
堆中放在几乎所有的实例对象,垃圾收集器在对堆进行回收前,第一件事就是判断哪些对象是“活着”,那些对象是“死去”(既不可能再被任何途径使用的对象)。
引用计数算法:


根搜索算法:


引用:
在jdk1.2之后,Java对引用进行了扩充,分为:强引用(strong reference)、软引用(soft reference)、弱引用(week reference)、虚引用(phantom reference)四种,这四种引用强度依次逐渐减弱。


如何判断是否这个对象要被回收:
在根搜索算法不可达的对象,也不是一定要死亡,宣布一个对象死亡,至少要经历两次标记的过程:一是是根搜索后的发现没有与GC Roots相连接的引用链,那它将会被第一次标记且进行一次筛选,筛选的条件是此对象是否有必要执行finalize()方法。当对象没有覆盖finalize()方法,或者finalize()方法已经被虚拟机调用过,虚拟机将这两种情况都视为“没有必要执行”。
假如被判定为有必要执行finalize()方法,那么这个对象将会被放置在一个名为F-Queue的队列中,并在稍后由一条由虚拟机自动建立的、低优先级的Finalizer线程去执行。

Java提供finalize()方法,垃圾回收器准备释放内存的时候,会先调用finalize()。

  • (1).对象不一定会被回收。
  • (2).垃圾回收不是析构函数。
  • (3).垃圾回收只与内存有关。
  • (4).垃圾回收和finalize()都是靠不住的,只要JVM还没有快到耗尽内存的地步,它是不会浪费时间进行垃圾回收的。
    有时当撤消一个对象时,需要完成一些操作。例如,如果一个对象正在处理的是非Java 资源,如文件句柄或window 字符字体,这时你要确认在一个对象被撤消以前要保证这些资源被释放。为处理这样的状况,Java 提供了被称为收尾(finalization )的机制。使用该机制你可以定义一些特殊的操作,这些操作在一个对象将要被垃圾回收程序释放时执行。

要给一个类增加收尾(finalizer ),你只要定义finalize ( ) 方法即可。Java 回收该类的一个对象时,就会调用这个方法。在finalize ( )方法中,你要指定在一个对象被撤消前必须执行的操作。垃圾回收周期性地运行,检查对象不再被运行状态引用或间接地通过其他对象引用。就在对象被释放之前,Java 运行系统调用该对象的finalize( ) 方法。

方法区的回收:
方法区又叫做hotspot虚拟机中的永久代。永久代收集主要回收两部分:废弃常量和无用类。

JVM_垃圾收集器与内存分配策略01相关推荐

  1. 垃圾收集器与内存分配策略(五)之垃圾日志与常见参数

    2019独角兽企业重金招聘Python工程师标准>>> 垃圾收集器与内存分配策略(五)--垃圾日志与常见参数 理解GC日志 每个收集器的日志格式都可以不一样,但各个每个收集器的日志都 ...

  2. jvm(3)-垃圾收集器与内存分配策略

    [0]README 0.1)本文部分文字转自:深入理解jvm,旨在学习 垃圾收集器与内存分配策略 的基础知识: [1]垃圾回收概述 1)GC(Garbage Collection)需要完成的3件事情: ...

  3. JVM:垃圾收集器与内存分配策略

    垃圾收集器与内存分配策略 1.对象已死吗 1).引用计数算法 引用计数算法:给对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加1:当引用失效时,计数器值就减1:任何时刻计数器为0的对象就 ...

  4. 03-1 手敲八千字,认识垃圾收集器必须清楚的前置知识【垃圾收集器的内存分配策略】

    03-1 50问!了解垃圾收集器必须清楚的前置知识--垃圾收集器的内存分配策略 author:陈镇坤27 创建时间:2021年12月27日01:58:45 字数:7932 文章目录 03-1 50问! ...

  5. java eden分配参数,JVM垃圾收集器与内存分配策略,

    垃圾收集器与内存分配策略 对象存活判断 引用计数算法 给对象添加一个计数器,每有一个引用+1,当引用失效-1,若为0则不在被使用. 可达性分析算法 对象是否可到达GC roots 或者说GC root ...

  6. 【深入理解Java虚拟机学习笔记】第三章 垃圾收集器与内存分配策略

    最近想好好复习一下java虚拟机,我想通过深读 [理解Java虚拟机 jvm 高级特性与最佳实践] (作者 周志明) 并且通过写一些博客总结来将该书读薄读透,这里文章内容仅仅是个人阅读后简短总结,加强 ...

  7. java_opts gc回收器_jvm垃圾收集器与内存分配策略

    垃圾收集器与内存分配策略: 以下参考周志明的<>. 判断对象是否存活: 引用计数:通过判断对象被引用的次数(为0,则表示不可被使用),但这很难解决对象相互循环引用的问题. 根搜索算法:即采 ...

  8. jvm垃圾收集器与内存分配策略

    2019独角兽企业重金招聘Python工程师标准>>> 垃圾收集器与内存分配策略: 以下参考周志明的<<深入理解jvm高级特性与最佳实践>>. 判断对象是否存 ...

  9. JVM2:垃圾收集器与内存分配策略

    垃圾收集器与内存分配策略 文章目录 垃圾收集器与内存分配策略 对象回收 引用计数算法 可达性分析算法 四种引用类型 生存与死亡 回收方法区 垃圾收集算法 标记清除法 复制算法 标记-整理算法 HotS ...

最新文章

  1. python2好还是python3好-Python 2 和 Python 3 有哪些主要区别?
  2. 校门外的树+矩阵旋转
  3. http抓包实战 pdf_实战 Wireshark https 抓包 2, 再抓 Moka 蹭 OurATS 的小尾巴
  4. [20170617]vim中调用sqlplus.txt
  5. 如何解决ORA-28002 the password will expire within 7 days问题(密码快过期)
  6. shell不允许输入空字符_反弹shell | ncamp;bash
  7. linqto 多个关键字模糊查询_查询函数Choose、Lookup、Hlookup、Vlookup应用技巧解读
  8. 公司电脑可以做无盘系统吗?怎么优化速度?
  9. 书屋(三):《浪潮之巅》品各大百年公司兴衰历程
  10. Bailian2975 Caesar Cryptogram【密码】
  11. 【English】20190430
  12. mvc新增,上架及下架
  13. html div调用js,在div中调用javascript函数
  14. Java | JPanel与JFrame的区别
  15. java课设迷宫游戏_Java课程设计走迷宫.doc
  16. java 二元组_java里有类似于二元组之类的数据结构么?
  17. 视频增强,去雾的实现 BU6521KV
  18. Echarts画散点图
  19. 太子阿特士和公主哈娅·图芙丝之梦的故事(一)
  20. 无线传输终端 无线通信模块 全网通5G/4G

热门文章

  1. unity安装,sdk,jdk问题
  2. 【转】PBR基于物理的渲染
  3. UGUI 锚点设置为四方扩充模式然后设置局部坐标为0将出现什么问题
  4. cf-Global Round2-C. Ramesses and Corner Inversion(思维)
  5. mysql数据库,创建只读用户
  6. Tomcat启动时卡在org.apache.catalina.startup.HostConfig
  7. VR与游戏完美结合?斯皮尔伯格导演的《玩家一号》发布预告片
  8. C语言函数中的参数有const的问题
  9. MySQL数据库以及其Python用法
  10. 《DevOps实战:VMware管理员运维方法、工具及最佳实践》——2.3 配置管理