美文网首页
java虚拟机之垃圾回收器与内存分配策略

java虚拟机之垃圾回收器与内存分配策略

作者: 过期的薯条 | 来源:发表于2017-12-03 22:37 被阅读14次

1.引言

最近在看jvm的书籍。感觉讲的不错,自己把一些有意思的地方,记录下,增加印象。

2.正题

2.1 GC垃圾回收器,回收的垃圾是什么?
定义: 没有直接或者间接与GCRoots相通的对象,都是GC回收的对象,也就是"垃圾"。

2.2什么是GCRoots
GCRoot 个人理解为是一个除Object之外的对象。能作为GCRoots的对象大部分存在于以下几种地方.

1.虚拟机栈中引用的对象: 虚拟机栈里面保存的是栈帧,栈帧里面有变量表。变量表中有些引用变量。
2.方法区保存着类信息,常量,静态变量,静态的引用变量,也会是GCRoot
3.方法区中常量对象,用final修饰的对象。

2.3四种引用类型
jdk版本1.2之前,一个对象只有引用和被引用俩种状态。后来人们发现这种定义的方式太狭隘了。于是出现了强引用,软引用,弱引用,虚引用
强引用:指的是Student a=new Student(); 这样方式的生成的对象。在任何时候哪怕报错,也不会主动去回收这部分的内存。

软引用:SoftReference<Object> sf = new SoftReference<Object>(obj); 这样来声明对象的方式称之为软引用。当内存不够的时候,会主动回收软引用对象。

弱引用:WeakReference<Object> wf = new WeakReference<Object>(obj); 这样来声明对象的方式的成为弱引用。不管内存够都进行回收。

3.内存回收算法

3.1标记-清除算法
将无用的内存标记,然后统一清除。
缺点:工作效率低下,会产生大量的碎片。当无法找到足够的内存的时候,不得不在执行一次回收。

image.png

3.2复制-清除算法
将10M的内存,分成俩个5M的内存块。首先会使用其中一个5M的内存块。当这个内存块满了。将存活的对象,复制到另外一个5M的内存块上,一次性清楚已经满了的内存块。这样就不会产生内存碎片了。
缺点:当存活的对象较多的时候,那么复制算法的执行效率比较低。不适合老年代。适合青年代。

image.png

3.3标记-整理算法
将可回收的对象,标记,清除,然后整理内存,让存活的对象集中起来。这样就不会产生碎片。

image.png

3.4分代收集算法
目前商业中经常使用的内存回收策略。对青年代使用标记-复制算法。对老年代使用标记-清除或者标记-整理算法。

相关文章

  • 垃圾收集器与内存分配策略

    垃圾收集器与内存分配策略 @(Java虚拟机)[垃圾收集, GC] [TOC] 对象已死吗 程序计数器,虚拟机栈,...

  • Java虚拟机内存分配与回收策略

    Java虚拟机中的内存分配与回收策略就是 Java的自动内存管理,其最核心的部分就是堆内存中对象的分配与回收。所以...

  • 《深入理解Java虚拟机》(二)--垃圾收集器与内存分配策略(4

    内存分配与回收策略 对象的内存分配规则不是固定的,是取决于你使用的是哪种垃圾回收器组合和虚拟机中的内存参数,如果启...

  • Java垃圾回收

    本文主要摘自《深入理解Java虚拟机》,内容较多,尽量全面概括了 Java 垃圾回收机制、垃圾回收器以及内存分配策...

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

    垃圾收集器与内存分配策略 1. 概述 垃圾回收器关注的是堆内存、方法区。 程序计数器、虚拟机栈、本地方法栈3个区域...

  • 从JVM到GC的学习脑图

    参考了《深入理解JAVA虚拟机》的第三章 垃圾收集器与内存分配策略 java对象

  • 垃圾收集器与内存分配策略(一)

    垃圾收集器与内存分配策略之--对象已死吗 GC关注的问题其实就是三个: 哪些内存可以被回收 何时回收 如何回收 所...

  • 深入理解java虚拟机总览

    一.自动内存管理机制 1.java内存区域与内存溢出异常 2.垃圾收集器与内存分配策略 3.虚拟机性能监控与故障处...

  • jvm笔记

    jvm内存区域 程序计数器 虚拟机栈 本地方法栈 java的堆 方法区 java如何访问对象 垃圾回收和内存分配

  • 垃圾收集器

    垃圾收集器如何判断内存是否需要回收 java的内存分配有:程序计数器、虚拟机栈、本地方法栈、java堆、方法区其中...

网友评论

      本文标题:java虚拟机之垃圾回收器与内存分配策略

      本文链接:https://www.haomeiwen.com/subject/hsfkvxtx.html