在上一节中Java 出现内存溢出的定位以及解决方案 中对于Java虚拟机栈以及方法区的内存出现的异常以及处理方式进行了解析,由于Java虚拟机对于堆的管理十分复杂,并且Java虚拟机中最基本的内存区域,所以单独提出一节进行分析。

先来解释一下对象存活??

什么样的对象是已经死了的对象,须要垃圾回收器进行回收。这个概念至关重要。由于它影响到垃圾回收器对于哪一个对象进行回收。能够从GCRoot訪问到的对象是存活的对象,那么以外的对象就是已死的对象。

GCRoot:包含四种 1)Java虚拟机栈中存放的reference指针指向的对象   2)本地方法栈中reference指向的对象  3)方法区中的常量引用对象 4)方法区中静态类属性引用的对象

GC 垃圾回收器

垃圾回收器採用的是标记-清除-整理算法回收内存。

Minor GC和Full GC。Minor GC是对年轻代回收的过程。 Full GC 是对整个堆以及方法区进行回收的过程。

分代收集。在Java虚拟机中对于堆的内存区域进行再划分为,Young Generation(年轻代)和Old Generation(老代)

年轻代用于存储年龄没有达到-XX:PretenureSizeThreshold的对象,老代用于存储年龄超过了-XX:PretenureSizeThreshold的对象。

然后对于年轻代再进行细分,Eden Space, From Space, ToSpace三个内存区域,这三个内存区域的大小由-XX:SurivorRadio来定义。在进行Minor GC的时候,会将Eden Space和From Space中存活的对象Copy到ToSpace中,并将超过春节龄的对象Copy到老代。当老代空间不足时,启动Full GC。

(上面概念仅仅是进行了简单的描写叙述,在JVM实际执行过程中要复杂的多,只是大概原理是这种)。

了解了上面基本概念之后,看以下的垃圾回收器就比較简单了。垃圾回收器总共分为七种:Serial收集器与Serial Old
收集器。Parallel Scavenge
收集器与Parallel Old,ParNew收集器,CMS收集器,G1(Garbage First)收集器。

1.Serial收集器与Serial Old
收集器。分别用于收集年轻代和老年代内存区域,Serial是单线程的垃圾收集器。在执行过程中须要暂停全部的Java线程。



2.ParNew收集器实际上就是Serial收集器的多线程版本号(针对于年轻代)。



3.Parallel Scavenge
收集器与Parallel Old: 是并行的多线程垃圾处理器,能够规定最大垃圾收集停顿时间-XX:MaxGCPauseMillis以及设置吞吐量大小-XX:GCTimeRadio.



4.CMS
收集器(Concurrent Mark Sweep): 是针对于老年代的多线程并发运行的垃圾回收器。以获取最短回收停顿时间为目标的收集器(主要用于B/S架构的server上)



5.
G1(Garbage First)收集器: 是最新的垃圾回收器,适合于(JDK1.6_update14)以上的JVM;G1将整个Java堆(包含新生代和老年代)划分为多个固定大小的独立区域,而且跟踪这些区域里面的垃圾堆积程度,在后台维护一个垃圾优先列表,每次依据同意收集的时间,优先回收垃圾最多的区域。

总之,要想获得最大吞吐量的服务类型就採用Parallel Scavenge 收集器与Parallel Old收集器组合。

要实现实时系统最好採用CMS 收集器(Concurrent Mark Sweep)。

只是client因为比較小,还是使用Serial比較好。



Java虚拟机内存区域堆(heap)的管理的更多相关文章

  1. 重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分

    一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...

  2. 总结Java虚拟机内存区域模型

    本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下Java运行时的数据区域,Java虚拟机在执行Java程序 ...

  3. 一文解析总结Java虚拟机内存区域模型

    最近抽空看了一点<深入理解Java虚拟机>,本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下J ...

  4. java虚拟机内存区域理解

    java虚拟机有的区域随着虚拟机进程的启动而存在, 有的区域依赖用户线程的启动和结束而建立和销毁. 程序计数器:为了线程切换后能恢复到正确的执行位置,每个线程都有一个独立的程序计数器.(针对java方 ...

  5. 【转】 Java虚拟机内存的堆区(heap),栈区(stack)和静态区(static/method)

    JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令 ...

  6. java虚拟机内存区域的划分以及作用详解

    序言 为什么有时候学着学着会突然之间觉得一切度是那么无趣,男的每个月也有那么几天难道?哈哈,不然是什么,我还是要坚持,可以做少一点,但是不能什么度不做.总会过去的,加油 --WH 一.运行时数据区 什 ...

  7. java虚拟机内存区域

    java虚拟机运行时数据 程序计数器 是一块较小的内存空间,属于线程私有的内存. 用来记录正在执行的虚拟机字节码指令的地址. 每个线程都需要一个独立的程序计数器,各个线程间的计数器互不影响,独立存储. ...

  8. 【四】Java虚拟机内存区域初识

     一.线程独占区  1.程序计数器 程序计数器是一块处于线程独占区较小的内存空间,它可以看是当前线程所执行的字节码的行号指示器. 如果线程执行的是Java方法,这个计数器记录的是正在执行的虚拟机字节码 ...

  9. 一、java虚拟机内存区域

    内存区域 java虚拟机在java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.java虚拟机规范将JVM管理的内存分为:程序计数器.本地方法栈.Java虚拟机栈.方法区.Java堆.如下 ...

随机推荐

  1. SQL SERVER 2012疑难问题解决方法

    问题一: 问题描述 SQL SERVER 2012 尝试读取或写入受保护的内存.这通常指示其他内存已损坏. (System.Data) 解决办法 管理员身份运行 cmd ->  输入 netsh ...

  2. Animator Override Controllers 学习及性能测试

    本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/Unity_AnimatorOverrideContorller.html  The ...

  3. Qt中widget重新setParent需要注意的问题

    有时候需要在widget中重新setParent,但会发现setParent有时候会出现问题,比如子窗口不在刷出来等等. 其实,有一点是需要注意的,就是Qt文档里说的,如果你当前widget重新设置了 ...

  4. 关于json.ajax ,php的那点事

    $.ajax({ type:'post'/'get'  两者选其一 url:    地址 data: "newdata="+newdata+"&olddata=& ...

  5. 适应手机端的jQuery图片滑块动画

    一款比较特别的jQuery图片滑块插件,它不仅在PC浏览器上可以使用,而且更适合在手机端的网页中使用.这款jQuery插件不仅可以定义图片切换的方向,而且可以即时切换图片切换的动画方式,可以有平移.翻 ...

  6. jquery 操纵 cookies 插件(1)

    当你浏览某网站时,你硬盘上会生产一个非常小的文本文件,它可以记录你的用户ID.密码.浏览过的网页.停留的时间等信息. 当你再次来到该网站时,网站通过读取Cookies,得知你的相关信息,就可以做出相应 ...

  7. WinPcap编程(二)

    0. 这一次具体讲抓包的两种方法. (建议)清除ARP表,最好自己写个批处理命令.快一点. 1.0 抓包步骤 步骤很简单:先打开适配器列表 --> 选择适配器 --> 通过遍历链表的方式到 ...

  8. 转:windows xp下如何安装SQL server2000企业版

    SQL2000企业版本 适用于WIN 2000 Server系统和Windows 2003系统,Windows XP一般装不了需要选用个人版或开发板.但是企业版也可以安装在xp系统下.这里介绍一个XP ...

  9. 转: 如何用linux命令修改linux主机ip网关子网掩码

    linux一般使用ifconfig命令修改linux主机的ip.网关或子网掩码. 1.命令格式: ifconfig [网络设备] [参数] 2.命令功能: ifconfig 命令用来查看和配置网络设备 ...

  10. codeproject

    search: http http://www.codeproject.com/Articles/96620/Writing-Http-Handlers-and-Modules-in-IIS-7-5 ...