一、Java垃圾回收器要负责完成以下3个任务:

1、分配内存

2、确保被引用对象的内存不被错误回收

3、回收不再被引用的对象的内存空间

二、垃圾回收是一个复杂而又耗时的操作。如果JVM花费过多的时间在垃圾回收上,则势必会影响应用的运行性能。一般情况下,垃圾回收器在运行操作的时候,整个应用的执行时被暂时中止的。这是因为垃圾回收器需要重新更新应用中所有对象引用的实际内存地址。

三、垃圾回收方式

不同硬件平台能支持的垃圾回收方式也是不同。比如多cpu的平台上,就可以通过并行的方式进行垃圾回收,而单cpu平台只能串行进行。不同应用期望的垃圾回收方式也不同。服务器端应用可能希望在整个应用的运行时间中,花在垃圾回收上是时间总数越小越好。对于与用户交互的应用来说,则可能希望垃圾回收带来的停顿的时间间隔越小越好。对于这种情况JVM提供了多种垃圾回收的方法以及对应的性能调优参数,应用可以根据需求定制。

目前JVM都采用分代收集,在分代收集的基础上又分为串行收集、并行收集以及并发收集。

1、串行收集器

串行收集器的工作过程用单线程处理所有垃圾回收工作,因为没有多线程交互,所以效率比较高。但是不适合多处理器,一般适合在单击处理器上使用。

2、并行收集器

并行处理器是多线程处理垃圾回收工作,可以减少垃圾回收的时间,一般在多线程多处理器上使用。 并行垃圾回收的线程数和机器的处理器数相等。

此收集器可以进行如下配置:

(1)最大垃圾回收暂停:指定垃圾回收的最长暂停时间。如果指定了此值,则会调整堆大小和垃圾回收相关参数,已达到此值。此值的设置可能会减少应用的吞吐量

(2)吞吐量:吞吐量是垃圾回收的时间与非垃圾回收的时间的比值。

3、并发收集器。

并发收集器可以保证大部分工作都并发进行(应用不暂停),垃圾回收只暂停很少时间。并发收集器主要减少年老代的暂停时间,它在应用不暂停的情况下,使用独立的垃圾回收线程,跟踪可达对象。

Java垃圾回收器的更多相关文章

  1. [译]Java垃圾回收器的类型

    说明:这篇文章来翻译来自于Javapapers 的Types of Java Garbage Collectors 在这部分的教程中我们将讲到可使用的四种不同类型的Java垃圾回收器.垃圾回收是Jav ...

  2. Java垃圾回收器的工作原理

    上课,老师照本宣科,实在难以理解,干脆就看书包里的Java书,正好看了Java的垃圾回收器是如何工作的,觉得有必要记录一下. 参考于 Java编程思想第四版(Thinking in Java) 老年代 ...

  3. Java垃圾回收算法和垃圾回收器

    基本上 jvm内存回收有三种 基本算法 标记-清除 标记清除的算法最简单,主要是标记出来需要回收的对象,然后然后把这些对象在内存的信息清除.如何标记需要回收的对象,在上一篇文章里面已经有说明. 标记- ...

  4. Java GC系列(3):垃圾回收器种类

    本文由 ImportNew - 好好先生 翻译自 javapapers. 目录 垃圾回收介绍 垃圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 在这篇教程中我们将学习几种现有的垃圾回收器.在 ...

  5. 【转】Java学习---垃圾回收算法与 JVM 垃圾回收器综述

    [原文]https://www.toutiao.com/i6593931841462338062/ 垃圾回收算法与 JVM 垃圾回收器综述 我们常说的垃圾回收算法可以分为两部分:对象的查找算法与真正的 ...

  6. Java GC系列(2):Java垃圾回收是如何工作的?

    本文由 ImportNew - 伍翀 翻译自 javapapers. 目录 垃圾回收介绍 垃圾回收是如何工作的? 垃圾回收的类别 垃圾回收监视和分析 本教程是为了理解基本的Java垃圾回收以及它是如何 ...

  7. Java垃圾回收介绍(译)

    在Java中,对象内存空间的分配与回收是由JVM中的垃圾回收进程自动完成的.与C语言不同的是,在Java中开发者不需要专门为垃圾回收写代码.这是使Java流行的众多特征之一,也帮助了程序员写出了更好的 ...

  8. [译]Java 垃圾回收介绍

    说明:这篇文章来翻译来自于Javapapers 的Java Garbage Collection Introduction 在Java中,对象内存空间的分配与回收是由JVM中的垃圾回收进程自动完成的. ...

  9. 浅谈java垃圾回收机制

    今天看thinking in java,里面很详细的谈到java垃圾回收器机制,看完后让我对这神秘的区域有一定的了解,特写一些小总结记录下来. 分两点来说. 第一点:Object.finalize() ...

随机推荐

  1. HDU 5340 Three Palindromes (Manacher)

    题意: 判断是否能将字符串S分成三段非空回文串. 思路: 先预处理出前缀回文串和后缀回文串的位置,将位置分别装入两个集合中,O(n). 针对每个前缀回文串的终点位置,挑出不相交的后缀回文串,对中间那段 ...

  2. Linux下安装Android Studio(ubuntu)

    一. 安装Android Studio 1. 添加源,按回车键继续 sudo apt-add-repository ppa:paolorotolo/android-studio 2. 更新源 sudo ...

  3. Remember-Me功能

    Remember-Me功能 目录 1.1概述 1.2基于简单加密token的方法 1.3基于持久化token的方法 1.4Remember-Me相关接口和实现类 1.4.1TokenBasedReme ...

  4. 【转】不可变数组NSArray与可变数组NSMutableArray

    原文网址:http://www.jianshu.com/p/1ad327f56d1d 不可变数组NSArray //创建一个空数组 NSArray *array = [NSArray array]; ...

  5. Symfony2学习笔记之数据校验

    校验在web应用程序中是一个常见的任务.数据输入到表单需要被校验.数据在被写入数据库之前或者传入一个webservice时也需要被校验. Symfony2 配备了一个Validator 组件,它让校验 ...

  6. linux xampp eclipse xdebug 无法进入断点

    一.xampp 版本 1.8.3-5 xampp安装后会自动集成xdebug,目录一般为 /opt/lampp/lib/php/extensions/***-debug-***目录 关于php 与ph ...

  7. ORACLE变量定义及使用(另,T-SQL EXISTS的PLSQL替代写法)

    1. 简单变量 declare v_cnt NUMBER(10,0) := 0; BEGIN   SELECT COUNT(1) INTO v_cnt FROM concept.Decoction W ...

  8. [Everyday Mathematics]20150224

    设 $A,B$ 是 $n$ 阶实对称矩阵, 它们的特征值 $>1$. 试证: $AB$ 的特征值的绝对值 $>1$.

  9. Files

    write public static void write(CharSequence from, File to, Charset charset) throws IOException { asC ...

  10. JVM参数汇总

    一.java启动参数共分为三类: 其一是标准参数(-),所有的JVM实现都必须实现这些参数的功能,而且向后兼容:其二是非标准参数(-X),默认jvm实现这些参数的功能,但是并不保证所有jvm实现都满足 ...