内存中的区域是如何划分的,对象的引用在哪个区域?

Java虚拟机将内存分为两个部分,一个线程共享的,一个线程私有的。线程共享的有方法区和堆,线程私有的有栈、本地方法栈和程序计数器。

堆用来存放对象实例,栈用来存放形参或局部变量。

什么是垃圾回收机制

垃圾回收可以有效的防止内存泄露,有效的使用空闲的内存。

内存泄露是指该内存空间使用完毕之后未回收,内存泄露过多会导致内存溢出,导致应用程序所占内存超出系统限制,最终被系统杀掉。

什么是垃圾

这里的垃圾是指无用的对象或其它数据等已经不被需要,但却无法被GC所释放。

GC所使用的两种判断垃圾的算法

1.引用计数法

A a = new A();

a = null;

引用计数是垃圾收集器中的早期策略。在这种方法中,堆中每个对象实例都有一个引用计数。当一个对象被创建时,且将该对象实例分配给一个变量,该变量计数设置为1。当任何其它变量被赋值为这个对象的引用时,计数加1(a = b,则b引用的对象实例的计数器+1),但当一个对象实例的某个引用超过了生命周期或者被设置为一个新值时,对象实例的引用计数器减1。任何引用计数器为0的对象实例可以被当作垃圾收集。当一个对象实例被垃圾收集时,它引用的任何对象实例的引用计数器减1。

引用计数法无法检测出循环引用,两个对象互相引用的情况无法被检测出。

2.可达性算法(根搜索算法)

从根引用节点开始检索这个节点引用的节点,当所有的被引用节点都被找到后,剩余的节点则被认为是没有被引用的节点,需要被回收。

java中作为GC的根节点有

  1. 虚拟机栈中引用的对象,本地变量
  2. 方法区中静态属性引用的对象
  3. 方法区中常量引用的对象
  4. Native对象

GC所使用的几种回收的算法

1.标记清除算法

1234 2 3

从根集合扫描,将存活的对象进行标记,标记完毕后再扫描一遍,对未进行标记的对象进行回收。标识清除算法不需要进行对象的移动,仅对不存活的对象进行处理,容易造成内存碎片。适用于存活率高的情况。

2.复制算法

将可用内存空间分为两个部分,开始只使用其中的一半,在这一半用完后再将存活的对象复制到另外一块上。适用于存活率低的情况,避免了内存碎片的情况。

3.标记整理算法

同标记清除算法一样进行标记,但在清除时将后面的对象在内存空间上向左移动,相比标记清除来说成本更高,但没有内存碎片的问题

4.分代收集算法

对对象进行分代,不同代的对象采取不同的回收算法,提高效率。

年轻代,新生成的对象都归为年轻代,年轻代在存放满和其它情况都会触发Minor GC

老年代,大对象直接进入老年代,年轻代经历几次垃圾回收后仍然存活的对象也进入老年代。老年代存放满后触发Major GC(Full GC)

持久代,用于存放静态文件,Java类、方法等。基本不被回收。

四种引用

强引用,一般引用,将对象指给变量就属于这种。

软引用,有用但并非必要的对象,在系统即将要发生内存溢出之前,会将这些对象列入回收范围再进行一次回收。

弱引用,比软引用更弱一些,在内存回收时也会被列入内存回收的范围。

虚引用,最弱的引用关系。无法通过虚引用获取到对象实例,虚引用的目的为希望能在这个对象被回收的时候收到一个系统通知。

垃圾回收机制,垃圾回收的几种方法以及相关推荐

  1. java垃圾回收机制_JVM的垃圾回收机制——垃圾回收算法

    一.Java垃圾回收机制 在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行.在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者 ...

  2. 阻止WordPress垃圾评论和广告评论的三种方法

    之前写过一篇防御攻击和暴力扫描的文章,技巧九中有提到禁止垃圾评论的方法,这个方法可以禁止掉所有的机器人,但没法禁止人工发表的垃圾评论. 垃圾评论对网站没什么好处,搜索引擎非常注重评论,它回评判你的文章 ...

  3. Framework事件机制—Android事件处理的三种方法

    1.1.背景 Android的事件处理的三种方法: 1.基于监听的事件处理机制 setOnClickListener,setOnLongClickListener.setOnTouchListener ...

  4. python的几种重要机制(垃圾回收机制,猴子补丁,反射机制,自省机制)

    python垃圾回收机制 垃圾回收机制要解决的问题 内存泄漏 悬空指针 引用计数 定义 环形链表中所存放数据的相同点和不同点 无法解决循环引用问题 标记清除 原理: 存在查找活动对象效率低下的问题 隔 ...

  5. Python3.5源码分析-垃圾回收机制

    Python3源码分析 本文环境python3.5.2. 参考书籍<<Python源码剖析>> python官网 Python3的垃圾回收概述 随着软硬件的发展,大多数语言都已 ...

  6. java垃圾回收机制_笔记 | Java垃圾回收机制

    本文经授权转载自程序员杂货铺(ID:speakFramework) 垃圾回收 最近上海的小伙伴是不是要被强垃圾分类搞疯了???哈哈哈哈 上海是个走在前列的城市啊,不光骑自行车闯红灯要被罚钱,垃圾不分类 ...

  7. java清空字符串_java面向对象,垃圾回收机制

    一.类的属性 属性用于定义该类或该类对象包含的数据或者说静态特征.属性作用范围是整个类体. 在定义成员变量时可以对其初始化,如果不对其初始化,Java使用默认的值对其初始化. 二.UML图 三.类和对 ...

  8. Python的垃圾回收机制(引用计数+标记清除+分代回收)

    一.写在前面: 我们都知道Python一种面向对象的脚本语言,对象是Python中非常重要的一个概念.在Python中数字是对象,字符串是对象,任何事物都是对象,而它们的核心就是一个结构体--PyOb ...

  9. java 强制垃圾回收_Java垃圾回收机制

    Java垃圾回收机制 垃圾回收机制用到finalize.当程序创建对象.数组等引用类型实体时,系统都会在堆内存中为之分配一块内存区,对象就保存在这块内存中,当这块内存不再被任何引用变量引用时,这块内存 ...

  10. 36.JVM内存分哪几个区,每个区的作用是什么、如和判断一个对象是否存活、java垃圾回收机制、垃圾收集的方法有哪些、java类加载过程、类加载机制、双亲委派、Minor GC和Major GC

    36.JVM内存分哪几个区,每个区的作用是什么? 37.如和判断一个对象是否存活?(或者GC对象的判定方法) 38.简述java垃圾回收机制? 39.java中垃圾收集的方法有哪些? 40.java类 ...

最新文章

  1. DHCP服务器功能浅析
  2. .frm_.myd_myi转换为.sql导入mysql数据库_把.frm,.myd,myi转换为.sql导入数据库
  3. 客户端网络pomelo学习笔记 (3) node.js 与 c 客户端 Diffie-Hellman 密钥交换算法的实现客户端网络...
  4. 外设驱动库开发笔记0:EPD总体设计
  5. 腾讯广告算法大赛 | 第三周周冠军心得分享
  6. 20162314 Experiment 3 - Sorting and Searching
  7. Java程序的编码规范
  8. 数据库工程师基础学习1----计算机硬件基础知识,计算机体系结构与存储系统
  9. Xshell5安装 即 使用过程
  10. 原生android tv 盒子,超强大的安卓7.0电视盒子是什么体验!
  11. 中望lisp加密 浩辰_浩辰CAD2010的VLISP接口加载贱人工具箱
  12. 转载——傅里叶变换概念及公式推导
  13. 黑少微服务商店实战经验分享:从单体式架构迁移到微服务架构
  14. 如何获取支付宝应用APPID
  15. Stream篇(五)
  16. 周志华 《机器学习初步》模型评估与选择
  17. 东风日产全新劲客首次搭载BOSE PERSONAL PLUS音响;艾比森举办秋季发布会推出多个新品 | 全球TMT...
  18. Android Studio 命令行Gradle编译
  19. Python复制单个文件为多个脚本
  20. 弘辽科技:淘宝开店后怎么建群?手机端怎么建群?

热门文章

  1. TP5 Validate 验证
  2. KafkStream架构
  3. jquery grid 显示隐藏列
  4. FullCalendar应用——整合农历节气和节日
  5. avascript 运动中Offset的bug解决方案
  6. T-SQL 解析xml
  7. 读《广州的一场春梦》有感
  8. LNMP详解(四)——LNMP原理与简单部署
  9. vmware 虚拟机中有时获取不到IP地址
  10. 卓有成效的程序员读书笔记