JavaGC的相关知识点在《深入理解JAVA虚拟机》上比较琐碎,有的概念没有详细介绍,前后顺序也不太连贯。为了便于理解原理和问题排查,反复阅读了这一部分及相关文章后简单的总结一下。
思想脉络是:JVM内存模型->内存模型中的堆的进一步分代->GC回收算法、日志、回收器,从一个面(内存模型)到一个点... ...
分类:
编程语言 时间:
2019-11-22 19:08:34
阅读次数:
94
java垃圾回收器,开发者无需特意管理内存分配,降低了应用由于局部故障导致崩溃,同时防止未释放的内存把堆栈挤爆的可能,所以写出的代码更为安全。 但是,在java中仍存在很多容易导致内存泄漏的逻辑可能。如果不小心,则很容易浪费掉未释放的内存,最终导致内存用光的错误抛出OOM 内存泄漏 一般内存泄漏(t ...
分类:
移动开发 时间:
2019-11-16 10:35:33
阅读次数:
78
前言 内存泄漏(Memory Leak)是指程序中己动态分配的堆内存由于某种原因程序未释放或无法释放,造成系统内存的浪费,导致程序运行速度减慢甚至系统崩溃 (OOM) 等严重后果。 那什么情况下不能被回收呢? 目前 java 垃圾回收主流算法是虚拟机采用 GC Roots Tracing 算法。算法 ...
分类:
移动开发 时间:
2019-11-09 15:35:41
阅读次数:
150
一、哪些内存可以回收 JVM 的内存区域中,程序计数器、虚拟机栈和本地方法栈这 3 个区域是线程私有的,随着线程的创建而创建,销毁而销毁,因此不用回收。 垃圾回收的重点就是关注堆和方法区中的内存了,堆中的回收主要是对象的回收,方法区的回收主要是废弃常量和无用的类的回收。 二、什么时候可以被回收 一般 ...
分类:
编程语言 时间:
2019-10-17 01:31:18
阅读次数:
114
首先来张祖传的思维导图: 内存回收与垃圾收集器在很多时候都是影响系统性能、并发能力的主要因素,虚拟机之所以提供多种不同的收集器以及提供大量的调节参数,是因为只有根据实际应用需求、实现方式选择最优的垃圾收集方式才能获得最好的性能。 GC发生在那里: JVM虚拟机运行时内存区域主要分为(如下图):虚拟机 ...
分类:
编程语言 时间:
2019-10-17 00:50:21
阅读次数:
104
之前上学的时候有这个一个梗,说在食堂里吃饭,吃完把餐盘端走清理的,是 C++ 程序员,吃完直接就走的,是 Java 程序员。🤔 确实,在 Java 的世界里,似乎我们不用对垃圾回收那么的专注,很多初学者不懂 GC,也依然能写出一个能用甚至还不错的程序或系统。但其实这并不代表 Java 的 GC 就 ...
分类:
编程语言 时间:
2019-09-12 13:01:45
阅读次数:
76
续前节,前面列举了Java判断对象是否可回收的两种方法;可达性分析与引用权重法。多数虚拟机所采用的的是可达性分析方法。下面写一下Java中的垃圾收集算法。 Java中垃圾收集算法主要有4中算法分别为:标记-清除法;复制算法;标记-整理法;分代收集算法。详情如下。 1、标记-清除法 标记清除法算法主要 ...
分类:
编程语言 时间:
2019-09-01 16:57:26
阅读次数:
93
java垃圾回收的三种算法为什么需要垃圾回收: 在程序执行的过程中,会产生一系列的对象(占用内存的代表),这些都会存储在内存中。一部分对象在生命周期结束后,依然会占用一部分内存。这些占用内存却没有再次使用的对象,我们称之为“垃圾”,而对“垃圾”占用的内存的回收,就是垃圾回收。内存泄漏:忘记释放一部分 ...
分类:
编程语言 时间:
2019-08-15 13:12:33
阅读次数:
87
判定对象是否属于垃圾: 判断对象的引用数量 通过判断对象的引用数量来决定,是否被回收,引用数量=0,被当做垃圾处理 每个对象实例,都有一个引用计数器,被引用+1,完成引用-1 优点:执行效率高,程序执行影响较小 缺点:无法检测循环引用的情况,导致内存泄露 可达性分析算法 通过判断对象的引用链是否可达 ...
分类:
编程语言 时间:
2019-07-24 21:09:29
阅读次数:
133
JAVA head 分三个区域:1、新生代:1).Eden(伊甸园)区是新对象分配内存的地方,由于堆是所有线程共享的,因此在堆上分配内存需要加锁。而Sun JDK为提升效率,会为每个新建的线程在Eden上分配一块独立的空间由该线程独享,这块空间称为TLAB(Thread Local Allocati ...
分类:
编程语言 时间:
2019-07-11 20:26:24
阅读次数:
106