垃圾回收:

  对象的创建是我们程序员主导的,但是却没有与之相对应的delete方法来删除我们用完的对象,释放这些我们已经不需要再使用的对象的内存空间,gc:垃圾回收机制:指的就是JVM自带的一种释放无用对象占用的内存的一种手段

程序员的辅助手段:

  将引用改变为指向其他的对象(或NULL),暗示JVM ,这个对象已经没有引用指向,可以被回收;

  在方法内创建局部变量,利用弹栈的特点,使得局部变量失效;

理解:

  当我们从代码中无需再使用某个对象时,它即为无用,所占看见应被回收;

  垃圾回收机的出现可以有效的防止内存溢出和内存泄漏;

gc怎么知道该对象是否可以被回收,需了解的两种方法: 引用计数  -  对象引用遍历

注意的是:JVM主要的活动区域为 堆内存

  引用计数:

    早期的JVM使用的方法,会储存对象的所有引用数,会控制这个引用数的多少,在引用数为0的时候,则 视为可以进行垃圾回收

  对象引用遍历:

    现在大部分JVM采用的方法,从一组对象开始,沿着该对象涉及到的对象形成一个树 ( 自己理解 ),通过递归的方式,确定可达对象,不可达对象就会被视为不再需要,将其进行标记作为垃圾收集,释放对应的内存,但是释放的内存都是离散的,不是连续的,不足于装载新的对象,很多GC会有优化操作,会重新组织内存中的对象,并进行压缩,形成连续的内存空间供使用。

引用对象的强度:

  引用对象:包装了我们实际需要的对象,使我们可以直接维护对引用对象的直接引用

    可以理解为:给某个对象的引用进行了一层增强,使其拥有了其他的状态,我们可以根据他的状态进行辨别

  对象在没有任何引用指向的时候才会被当作垃圾回收,如果我们想对有引用指向的对象做垃圾回收处理,这个 时候就涉及到了引用对象的概念,引用对象的强度将决定垃圾回收器的行为,注意:我们普通使用的引用都是强度最大的引用,强度可分为一下几种:

      强可达:普通的引用

      软可达:

      弱可达:

      虚可达:

      不可达: 没有引用指向

  对象的可达性状态会触发垃圾回收期作出相应的行为:

    软可达对象可能会任凭垃圾回收器去回收;

    若可达对象将会被垃圾回收器回收;

    虚可达对象并不是真正的可达,介于可达和不可达之间,为什么说可达呢,因为它的存在可以防止对象在显式清除虚可达引用之前被回收,为什么又说他是不可达呢,因为无法通过PhantomReference访问其指称对象, 其get方法总是返回null.

jvm的垃圾回收和内存的更多相关文章

  1. JVM、垃圾回收、内存调优、常见參数

    一.什么是JVM JVM是Java Virtual Machine(Java虚拟机)的缩写.JVM是一种用于计算设备的规范.它是一个虚构出来的计算机,是通过在实际的计算机上仿真模拟各种计算机功能来实现 ...

  2. JVM学习02:GC垃圾回收和内存分配

    JVM学习02:GC垃圾回收和内存分配 写在前面:本系列分享主要参考资料是  周志明老师的<深入理解Java虚拟机>第二版. GC垃圾回收和内存分配知识要点Xmind梳理 案例分析1-(G ...

  3. JVM的垃圾回收机制详解和调优

    JVM的垃圾回收机制详解和调优 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc都 ...

  4. JVM常见垃圾回收算法

    jdk1.7.0_79 众所周知,Java是一门不用程序员手动管理内存的语言,全靠JVM自动管理内存,既然是自动管理,那必然有一个垃圾内存的回收机制或者回收算法.本文将介绍几种常见的垃圾回收(下文简称 ...

  5. jvm的垃圾回收算法

    一.对象存活判断判断对象是否存活一般有两种方式:1.引用计数:每个对象有一个引用计数属性,新增一个引用时计数加1,引用释放时计数减1,计数为0时可以回收.此方法简单,无法解决对象相互循环引用的问题.2 ...

  6. 03 JVM的垃圾回收机制

    1.前言 理解JVM的垃圾回收机制(简称GC)有什么好处呢?作为一名软件开发者,满足自己的好奇心将是一个很好的理由,不过更重要的是,理解GC工作机制可以帮助你写出更好的Java程序. 在学习GC前,你 ...

  7. 【java虚拟机序列】java中的垃圾回收与内存分配策略

    在[java虚拟机系列]java虚拟机系列之JVM总述中我们已经详细讲解过java中的内存模型,了解了关于JVM中内存管理的基本知识,接下来本博客将带领大家了解java中的垃圾回收与内存分配策略. 垃 ...

  8. JVM的垃圾回收机制 总结(垃圾收集、回收算法、垃圾回收器)

     相信和小编一样的程序猿们在日常工作或面试当中经常会遇到JVM的垃圾回收问题,有没有在夜深人静的时候详细捋一捋JVM垃圾回收机制中的知识点呢?没时间捋也没关系,因为小编接下来会给你捋一捋. 一. 技术 ...

  9. jvm详情——3、JVM基本垃圾回收算法回收策略

    JVM基本垃圾回收算法回收策略 引用计数(Reference Counting):比较古老的回收算法.原理是此对象有一个引用,即增加一个计数,删除一个引用则减少一个计数.垃圾回收时,只用收集计数为0的 ...

随机推荐

  1. LAB7 REST

    r需要初始化才能赋值. 不要盲目抄doGet方法,要理解题目的意思

  2. CRM--admin组件

    admin组件使用 1.创建一个Django项目 2.在models里面创建表 class Publish(models.Model): name = models.CharField(max_len ...

  3. docker image 详解

    docker iamge docker 镜像: [root@localhost ~]# docker image --help Usage: docker image COMMAND 管理镜像 Com ...

  4. git tag 查看标签列表、切换标签

    1.查看标签列表 git tag 2.切换标签(需要指定分支 test 为分支.v0.17.7 为标签版本) git checkout -b test v0.17.7

  5. 如何将一段文本编译成C#内存程序的过程

    string code = null; // 1. 生成要编译的代码.(示例为了简单直接从程序集内的资源中读取) Stream stram = typeof(CodeDOM).Assembly .Ge ...

  6. eclipse Filter web.xml 问题解决 异步请求@WebServlet

    <filter> <filter-name>AsynServlete</filter-name> <filter-class>com.kad.app.a ...

  7. 1,fiddler的工作原理和安装

    1,工作原理就是通过设置代理监控客户端和服务端的协议 2,fiddler的安装 1,官方的下载地址:https://www.telerik.com/download/fiddler 一步步安装即可 2 ...

  8. 修改pudb颜色

    2019-02-19,18点20vim调整颜色vim ~/.vimrc 这个pudb的配色用上的方法改不了.调试状态时候按o和回车能切换console和调试界面. 成功了.通过修改pudb源代码来实现 ...

  9. C/C++生成静态库动态库及语言交互

    C++静态库与动态库(比较透彻) Go中调用C的动态库与静态库 我的示例 文件结构 |- sample |- c |- libsample |- libsample.h |- libsample.cp ...

  10. linux '--stdin'错误 -批量修改密码

    虚拟机:VMware虚拟机  系统:Linux ubuntu 4.4.0-31-generic #50~14.04.1-Ubuntu SMP Wed Jul 13 01:07:32 UTC 2016 ...