看到一个老问题,Java是如何判定回收哪些对象的?

答:从gcRoot根搜索不可达,且标记清理一次之后仍没有被复活的对象,会被认定为垃圾对象进行清理。注意在Java中没有对象的作用域,只有对象的引用的作用域。Java垃圾回收没有采用引用计数算法,因为它不好解决循环引用问题。Java垃圾算法实际上是标记出那些对象是被引用在用的,其它没被标记的就是没用的可以回收,而不是直接找出哪些对象是没用的。

那么,哪些对象可以作为gcRoot呢?

它其实是一组根引用,主要包括虚拟机栈中的局部变量表(实际就是所有正在被调用的方法等参数局部变量等),类的静态属性引用,常量对象引用,本地方法栈中对象引用。实际上Java垃圾回收主要是针对堆内存的,这些引用则来自于JVM运行时数据区的其它几部分:虚拟机栈,本地方法区,方法区。

Java中引用类型包含哪几类,有什么用?

最常用到的是强引用,只有这种引用存在,垃圾回收时就不会清理它指向的对象。其次是软引用,只有在垃圾回收内存空间不足时才会回收这类引用指向的对象,多用在缓存对象中。再其次是弱引用,只要发生垃圾回收就会被回收。最后是虚引用,是引用关系最弱的一种。

最新文章

  1. Lind.DDD.LindAspects方法拦截的介绍
  2. C#关键字params
  3. 彻底理解数字图像处理中的卷积-以Sobel算子为例
  4. YARN应用程序的开发步骤
  5. PHP 'ext/gd/gd.c'信息泄漏漏洞
  6. HTTP中Get与Post、ViewState 原理
  7. Ubuntu安装配置Mysql
  8. 一旦配置oracle em经验
  9. 03--css形状--css揭秘
  10. xvfb-run: error: xauth command not found 解决方式
  11. UIImageView中的UIButton不响应事件解决方案
  12. .NET程序运行过程
  13. (转) SpringBoot非官方教程 | 第二十四篇: springboot整合docker
  14. 批量 修改 android eclipse 项目名
  15. Spring SetFactoryBean实例
  16. shareSDK(分享第三方库)的 使用
  17. Aeroo Reports Linux server
  18. Entity Framework Tutorial Basics(1):Introduction
  19. Python3基础(3)集合、文件操作、字符转编码、函数、全局/局部变量、递归、函数式编程、高阶函数
  20. getBoundingClientRect说明

热门文章

  1. python入门示例程序
  2. Spring Boot集成Spring Data Reids和Spring Session实现Session共享(多个不同的应用共用一个Redis实例)
  3. 【hibernate】报错:org.springframework.dao.DataIntegrityViolationException: could not execute statement; SQL [n/a]; nested exception is org.hibernate.exception.DataException: could not execute statement
  4. linux shell操作
  5. People seldom do what they believe in. They do what is convenient, then repent.
  6. BZOJ 题目1036: [ZJOI2008]树的统计Count(Link Cut Tree,改动点权求两个最大值和最大值)
  7. Spark Streaming性能优化系列-怎样获得和持续使用足够的集群计算资源?
  8. 第04章-VTK基础(2)
  9. Page Design for Sexable Forum
  10. linux 输入子系统(4) intput_dev 接口描述