转自:https://blog.csdn.net/tjiyu/article/details/53982412 1-1.为什么需要了解垃圾回收 目前内存的动态分配与内存回收技术已经相当成熟,但为什么还需要去了解内存分配与GC呢? 1.当需要排查各种内存溢出.内存泄漏问题时: 2.当垃圾收集成为系统达到更高并发量的瓶颈时: 我们就需要对这些"自动化"技术实话必要的监控和调节: 1-2.垃圾回收需要了解什么 思考GC完成的3件事: 1.哪些内存需要回收?即如何判断对象已经死亡: 2.什么时…
首先,我这是抄写过来的,写得真的很好很好,是我看过关于GC方面讲解最清楚明白的一篇.原文地址是:https://www.zhihu.com/question/21539353…
因为热爱,所以坚持. 文章下方有本文参考电子书和视频的下载地址哦~ 这节我们主要讲垃圾收集的一些基本概念,先了解垃圾收集是什么.然后触发条件是什么.最后虚拟机如何判断对象是否死亡. 一.前言   我们都知道Java和C++有一个非常大的区别就是Java有自动的垃圾回收机制,经过半个多世纪的发展,Java已经进入了"自动化"时代,让使用者只需要注重业务逻辑的开发而不需要担心内存的使用情况.那么我们为什么还要学习Java的垃圾回收机制呢?原因很简单:我们不想止于"增删改查工程师&…
一.JVM的分区:   1.程序计数器(私有) 程序计数器是一块较小的内存分区,你可以把它看做当前线程所执行的字节码的指示器. 在虚拟机的概念模型里,字节码解释器工作时,就是通过改变计数器的值来选择下一条需要执行的字节码指令. 程序技术器为线程私有,每个线程都有它们各自的程序计数器,这样再多线程的情况下,线程之间的来回切换,也能正确找到上次切换时执行的位置. 如果线程正在执行的是一个Java方法,那么程序计数器记录的是当前线程正在执行的字节码指令的地址:如果线程正在执行的是一个native方法,…
前言 在前面的文章中,介绍了JVM内存模型分为:堆区.虚拟机栈.方法区.本地方法区和程序计数器,其中堆区是JVM中最大的一块内存区域,在Java中的所有对象实例都保存在此区域,它能被所有线程共享. 在Java中还有一个重要的机制:GC(垃圾收集器),堆是GC管理的主要区域,本文会带大家了解GC机制. GC的简介 GC(Garbage Collection)垃圾收集机制是Java一个重要特性.不同于C/C++语言需要程序员自己管理内存的回收,而且这样做往往容易出错,导致内存泄漏等严重问题. Jav…
一.垃圾回收算法 概述 JVM中,当创建的对象不再被使用的时候,此时我们认为他是无用的“垃圾”:在现代主流的商用jvm中,都是通过可达性分析来判断对象是否存活的.这个算法的基本思想是通过一系列“GCROOT”的对象来作为起始点,从这些节点开始向下搜索,搜索所做过的路径称为引用链,当一个对象没有任何引用链可达时,就判断该对象不可用.如下图,obj5,obj6,obj7虽然相连,但是没有引用链到达“GCROOT”,因此它也是不可用的. 那么在java中,哪些对象可以作为“GCROOT”呢? 虚拟机栈…
1,运行时数据区域 根据JAVA虚拟机规范的规定:JAVA虚拟机所管理的内存将会包括以下几个运行时数据区域 程序计数器(Program Counter Register)是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器,通过改变计数器的值来选取下一条需要执行的字节码指令.分支.循环.跳转.异常处理.线程恢复等基础功能.每条线程都需要一个独立的程序计数器,各条线程之间的计数器互不影响,独立存储,我们称这类内存区域为“线程私有”的内存,也是唯一不会出现OutOfMemory…
当Eden区域满时,触发minor GC,垃圾收集器把Eden区域中的不可达对象标记出来.第一次执行minor GC时Survivor 1与Survivor 2均为空: Eden中的不可达对象占用的内存被回收,存活的对象将被移动到一个Survivor中(一定程度解决内存碎片问题),另外一个Survivor区域为空: 再次触发minor GC时,Eden区域与不为空的Survivor区域中的不可达对象被标记并清理,存活的对象被移动到另外的空Survivor区域.多次执行minor GC后,存活次数…
一:面向过程与面向对象的区别 举例:一个人开门的动作,可以分解为开门,人进去,关门. 面向过程:人作为执行者,1:开门  2:进入   3:关门 面向对象:人作为指挥者,将开门,关门的动作都封装到门上面.1:人调用门的打开方法 2:人进入  3:人调用门的关闭方法. 以开汽车为例: 以造汽车为例: 二:对象与类 1:类和对象的概念 2:类的属性和方法(成员变量和成员方法) a:属性(成员变量) b:方法(成员方法) 三:引用数据类型…
1.跟搜索算法: JVM中对内存进行回收时,需要判断对象是否仍在使用中,可以通过GC Roots Tracing辨别. 定义: 通过一系列名为”GCRoots”的对象作为起始点,从这个节点向下搜索,搜索走过的路径称为ReferenceChain,当一个对象到GCRoots没有任何ReferenceChain相连时,(图论:这个对象不可到达),则证明这个对象不可用. 可以作为GC Root 引用点的是: JavaStack中的引用的对象. 方法区中静态引用指向的对象. 方法区中常量引用指向的对象.…