垃圾回收基本算法

  • 串型回收和并行回收
串行回收始终在一个CPU上执行回收操作。并行回收则将回收任务分为好几步,每步使用不同的CPU执行,这样加快了执行速度,有点像流水线作业。
  • 并发执行和暂停应用程序
并发执行意味着垃圾回收线程可以和用户线程同时工作,但是系统开销比较大。暂停应用程序则在垃圾回收器运行时停止用户线程的执行。
  • 压缩、不压缩和复制
压缩则会把活动对象放在一起,并回收剩余的内存。不压缩则只是回收不用的内存,对活动对象不做额外的操作。复制则把堆内存分为两部分A和B,A为空闲状态。将B中的活动对象放入A中,回收B内存。

java堆内存回收

java将对象分为3代,对每代执行不同的回收策略

Young代

   线程执行初期的对象都处于Young代,并且大部分对象会很快进入不可达状态,使用的回收算法是复制。Young代由1个Eden和2个Survivor组成。绝大部分对象一开始处于Eden区域,等垃圾回收器启动时,会将可达对象放入其中的一个Survivor中。等到垃圾回收器再次启动时会将Eden(新产生的)和Survivor中可达对象放入另一个空闲的Survivor中。不断的进行轮替操作。

Old代

   如果Young中的对象长时间处于可达状态的话会进入Old代。由于Old代对象存活时间很长并随着新的对象被加入Old代中,会使得Old中的对象越来越多。这使得对Old代对像的回收频率不用太高,并且需要更长的回收时间,所以采用压缩算法来处理。

Permanent代

   Permanent代主要装载Class、方法等信息,默认是64M,垃圾回收机制通常不会回收Permanent对象。

JAVA内存回收选项

-Xmx256m   设置虚拟机最大堆内存256MB
      -Xms128m      设置堆内存初始容量为128MB
      -XX:MaxNewSize=128m     设置Young代内存最大容量128MB
      -XX:MaxPerSize = 64m        设置Permanent代最大容量为64MB

JAVA内存使用小技巧

使用基本类型时最好不用其包装类
如String str = “avd”; 不要使用String  str = new String(“avd”);

进行字符串连接操作
尽量使用StringBuilder和StringBuffer对象,这两个对象是变长的。而String对象不是变长的,进行字符串连接是会产生大量的临时变量。

尽早释放无用对象的引用

尽量少用静态变量

缓存经常使用的对象(HashMap 或开源项目等)

JAVA垃圾回收机的更多相关文章

  1. 【转载】Java垃圾回收机制

    原文地址:http://www.importnew.com/19085.html Java垃圾回收机制 说到垃圾回收(Garbage Collection,GC),很多人就会自然而然地把它和Java联 ...

  2. java垃圾回收机制,以及常用的回收算法

    记得之前去平安面试的时候,面试官问到了垃圾回收,我当时也就是说说了垃圾回收的原理,但是具体有哪些实现策略,我当时是懵的. 概念: Java的垃圾回收机制是Java虚拟机提供的能力,用于在空闲时间以不定 ...

  3. Java垃圾回收机制(GC策略)

    Java垃圾回收机制(GC策略) 核心:1,哪些是垃圾?[怎么确定这个是垃圾]:2,如何回收垃圾?[怎么更好收垃圾]. Java语言相对于C++等语言有一个自动垃圾回收机制,只用管使用[实例化对象], ...

  4. 【转】深入理解 Java 垃圾回收机制

    深入理解 Java 垃圾回收机制   一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再 ...

  5. 深入理解java垃圾回收机制

    深入理解java垃圾回收机制---- 一.垃圾回收机制的意义 Java语言中一个显著的特点就是引入了垃圾回收机制,使c++程序员最头疼的内存管理的问题迎刃而解,它使得Java程序员在编写程序的时候不再 ...

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

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

  7. Java GC系列(1):Java垃圾回收简介

    本文由 ImportNew - 好好先生 翻译自 javapapers. Java的内存分配与回收全部由JVM垃圾回收进程自动完成.与C语言不同,Java开发者不需要自己编写代码实现垃圾回收.这是Ja ...

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

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

  9. [牛感悟系列]JAVA(1)理解JAVA垃圾回收

    理解JAVA垃圾回收的好处是什么?满足求知欲是一方面,编写更好的JAVA应用是另外一方面. 如果一个人对垃圾回收过程感兴趣,那表明他在应用程序开发领域有相当程度的经验.如果一个人在思考如何选择正确的垃 ...

随机推荐

  1. Appium移动自动化测试(一)--工具软件安装

    Appium移动自动化测试(一)--工具软件安装 详情参考-- http://www.cnblogs.com/fnng/p/4552438.html 第一节  安装node.js Appium 官方网 ...

  2. Laravel5.1 文件管理

    Laravel提供了一套很好用的文件系统 方便于管理文件夹和文件,支持Amazon S3和Rackspace云存储等驱动. 1 配置 文件系统的配置文件在 config/filesyetems.php ...

  3. C# 导出Excel "正在中止线程" 错误

    导出Excel相信很多人都用过,但是我却遇到了一个问题 “正在中止线程” 源代码如下: public static void ExportExcel(string fileName, GridView ...

  4. 分页技巧__在项目中使用QueryHelper辅助对象实现分页效果

    分页技巧__在项目中使用QueryHelper辅助对象实现分页效果 QueryHelper 用于辅助拼接HQL语句 addCondition("t.type=?", "精 ...

  5. Linux命令之乐--find

    find是命令行工具箱中最棒的命令之一. 列出当前目录及其子目录中的文件和文件夹. [root@LAMP WebRoot]# find . -print../index.jsp./upload.jsp ...

  6. 自定义控件_水平滑动的View 自定义属性

    保持饥饿,保持愚蠢,我们对待事情本来应该就是这样的 接下来我要写一个水平滑动的自写义,实现效果 水平滑动我们有很多种实现方法,recyceryView,HorizontalScrollView都可以, ...

  7. Zabbix-3.0.x使用OneAlert发送告警

    导读 OneAlert 是国内首个 SaaS 模式的云告警平台,集成国内外主流监控/支撑系统,实现一个平台上集中处理所有 IT 事件,提升 IT 可靠性.它能以史上第二快的速度,对事件进行智能的组织. ...

  8. excel如何将一个工作薄中的工作表生成独立的工作薄

    excel如何将一个工作薄中的工作表生成独立的工作薄  '用vba代码 Sub 另存所有工作表为工作簿() Dim sht As Worksheet Application.ScreenUpdatin ...

  9. [Domino]执行命令load design的时候出现Warning: Cannot locate design template

    发现问题 在做Pseudo Test的时候被QA测出了一个问题.在Domino concole打命令“load design”,被Workbench翻译过后的数据库提示了一个警告:Warning: C ...

  10. PAT 甲级 1104 sum of Number Segments

    1104. Sum of Number Segments (20) 时间限制 200 ms 内存限制 65536 kB 代码长度限制 16000 B 判题程序 Standard 作者 CAO, Pen ...