垃圾回收主要考虑三件事情:哪些内存需要回收?什么时候回收?如何回收? 一、哪些内存需要回收? 堆内存:对于JVM 来说,垃圾回收主要是针对堆内存中的对象实例。 方法区:垃圾收集行为在方法区是比较少出现的,一般来说,这个区域的回收“成绩”比较难以令人满意,尤其是类型的卸载,条件相当苛刻,但是这部分区域 ...
分类:
其他好文 时间:
2016-05-01 21:54:16
阅读次数:
288
当Eden区域满时,触发minor GC,垃圾收集器把Eden区域中的不可达对象标记出来。第一次执行minor GC时Survivor 1与Survivor 2均为空; Eden中的不可达对象占用的内存被回收,存活的对象将被移动到一个Survivor中(一定程度解决内存碎片问题),另外一个Survi ...
分类:
其他好文 时间:
2016-05-01 12:21:34
阅读次数:
194
JVM采用分代的垃圾回收策略:不同的对象的生命周期是不一样的。因此,不同生命周期的对象可以采取不同的收集方式,以便提高回收效率。 从垃圾回收角度看内存分配 从JVM垃圾回收的角度来看,Java内存分为三个区:新生代(Young Generation)、老年代(Old Generation)和持久代( ...
分类:
其他好文 时间:
2016-04-28 19:51:50
阅读次数:
117
关于JVM 的垃圾回收机制,我们一般都没过多深入,因为JAVA 和 C++ 的一个很大区别就是,JAVA 帮我们做了垃圾回收,而不用像C++ 那么样手动进行回收,当然任何自动的东西都存在一定弊端,比如机器人,即使自动程度很高,但是在处理某些感情问题上,肯定处理上就会有遗漏,开个玩笑啦, 下面我们先来 ...
分类:
其他好文 时间:
2016-04-20 21:47:05
阅读次数:
134
标记-清除算法(Mark-Sweep)从根节点开始标记所有可达对象,其余没标记的即为垃圾对象,执行清除。但回收后的空间是不连续的。 复制算法(copying)将内存分成两块,每次只使用其中一块,垃圾回收时,将标记的对象拷贝到另外一块中,然后完全清除原来使用的那块内存。复制后的空间是连续的。复制算法适 ...
分类:
编程语言 时间:
2016-04-15 15:28:13
阅读次数:
184
我们都知道JVM内存由几个部分组成:堆、方法区、栈、程序计数器、本地方法栈JVM垃圾回收仅仅针对公共内存区域即:堆和方法区进行。本文主要讨论两点,一是垃圾回收策略,二是调优的方法。一、垃圾回收机制1.1 分代管理将堆和方法区按照对象不同年龄进行分代:u 堆中会频繁创建对象,基于一种分代的思想,按照对象存活时间将堆划分为新生代和旧生代两部分,我们不能一次垃圾回收新生代存活的对象就放入旧生代,而是要...
分类:
其他好文 时间:
2016-04-15 02:16:40
阅读次数:
174
JVM垃圾回收与性能调优总结 JVM调优的几种策略 一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm) 其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,P ...
分类:
其他好文 时间:
2016-04-04 19:38:11
阅读次数:
263
垃圾回收算法可以分为三类,都基于标记-清除(复制)算法: JVM会根据机器的硬件配置对每个内存代选择适合的回收算法,比如,如果机器多于1个核,会对年轻代选择并行算法。 稍微解释下的是,并行算法是用多线程进行垃圾回收,回收期间会暂停程序的执行,而并发算法,也是多线程回收,但期间不停止应用执行。所以,并
分类:
编程语言 时间:
2016-03-23 10:14:50
阅读次数:
158
你对JVM内存组成结构和JVM垃圾回收机制是否熟悉,这里和大家简单分享一下,希望对你的学习有所帮助,首先来看一下JVM内存结构,它是由堆、栈、本地方法栈、方法区等部分组成,结构图如下所示。 JVM学习笔记 JVM内存管理和JVM垃圾回收 JVM内存组成结构 JVM内存结构由堆、栈、本地方法栈、方法区
分类:
其他好文 时间:
2016-03-08 19:37:04
阅读次数:
163
引用计数法标记清除法复制法(新生代,适合垃圾对象多,存活对象少)标记压缩法(老年代)相当于标记清除算法+内存碎片整理强引用,软引用(SoftReference),当堆空间不足时回收,软引用不会引起内存溢出弱引用(WeakReference),发现即回收虚引用垃圾回收器:串行回收器:-XX:..
分类:
其他好文 时间:
2016-02-16 15:11:06
阅读次数:
139