Java虚拟机内存区域堆(heap)的管理
在上一节中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)的管理的更多相关文章
- 重读《深入理解Java虚拟机》一、Java虚拟机内存区域的划分
一.Java虚拟机内存区域如何划分 1.Java虚拟机内存区域的划分 区域名称 作用(用途) 类型 特点 虚拟机规定异常情况 内存分配与回收 其他说明 1 程序计数器 指示当前正在执行的字节码指令地址 ...
- 总结Java虚拟机内存区域模型
本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下Java运行时的数据区域,Java虚拟机在执行Java程序 ...
- 一文解析总结Java虚拟机内存区域模型
最近抽空看了一点<深入理解Java虚拟机>,本篇文章主要来总结一下Java虚拟机内存的各个区域,以及这些区域的作用.服务对象以及其中可能产生的问题,作为大家的面试宝典. 首先我们来看一下J ...
- java虚拟机内存区域理解
java虚拟机有的区域随着虚拟机进程的启动而存在, 有的区域依赖用户线程的启动和结束而建立和销毁. 程序计数器:为了线程切换后能恢复到正确的执行位置,每个线程都有一个独立的程序计数器.(针对java方 ...
- 【转】 Java虚拟机内存的堆区(heap),栈区(stack)和静态区(static/method)
JAVA的JVM的内存可分为3个区:堆(heap).栈(stack)和方法区(method) 堆区:1.存储的全部是对象,每个对象都包含一个与之对应的class的信息.(class的目的是得到操作指令 ...
- java虚拟机内存区域的划分以及作用详解
序言 为什么有时候学着学着会突然之间觉得一切度是那么无趣,男的每个月也有那么几天难道?哈哈,不然是什么,我还是要坚持,可以做少一点,但是不能什么度不做.总会过去的,加油 --WH 一.运行时数据区 什 ...
- java虚拟机内存区域
java虚拟机运行时数据 程序计数器 是一块较小的内存空间,属于线程私有的内存. 用来记录正在执行的虚拟机字节码指令的地址. 每个线程都需要一个独立的程序计数器,各个线程间的计数器互不影响,独立存储. ...
- 【四】Java虚拟机内存区域初识
一.线程独占区 1.程序计数器 程序计数器是一块处于线程独占区较小的内存空间,它可以看是当前线程所执行的字节码的行号指示器. 如果线程执行的是Java方法,这个计数器记录的是正在执行的虚拟机字节码 ...
- 一、java虚拟机内存区域
内存区域 java虚拟机在java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.java虚拟机规范将JVM管理的内存分为:程序计数器.本地方法栈.Java虚拟机栈.方法区.Java堆.如下 ...
随机推荐
- SQL SERVER 2012疑难问题解决方法
问题一: 问题描述 SQL SERVER 2012 尝试读取或写入受保护的内存.这通常指示其他内存已损坏. (System.Data) 解决办法 管理员身份运行 cmd -> 输入 netsh ...
- Animator Override Controllers 学习及性能测试
本文由博主(YinaPan)原创,转载请注明出处:http://www.cnblogs.com/YinaPan/p/Unity_AnimatorOverrideContorller.html The ...
- Qt中widget重新setParent需要注意的问题
有时候需要在widget中重新setParent,但会发现setParent有时候会出现问题,比如子窗口不在刷出来等等. 其实,有一点是需要注意的,就是Qt文档里说的,如果你当前widget重新设置了 ...
- 关于json.ajax ,php的那点事
$.ajax({ type:'post'/'get' 两者选其一 url: 地址 data: "newdata="+newdata+"&olddata=& ...
- 适应手机端的jQuery图片滑块动画
一款比较特别的jQuery图片滑块插件,它不仅在PC浏览器上可以使用,而且更适合在手机端的网页中使用.这款jQuery插件不仅可以定义图片切换的方向,而且可以即时切换图片切换的动画方式,可以有平移.翻 ...
- jquery 操纵 cookies 插件(1)
当你浏览某网站时,你硬盘上会生产一个非常小的文本文件,它可以记录你的用户ID.密码.浏览过的网页.停留的时间等信息. 当你再次来到该网站时,网站通过读取Cookies,得知你的相关信息,就可以做出相应 ...
- WinPcap编程(二)
0. 这一次具体讲抓包的两种方法. (建议)清除ARP表,最好自己写个批处理命令.快一点. 1.0 抓包步骤 步骤很简单:先打开适配器列表 --> 选择适配器 --> 通过遍历链表的方式到 ...
- 转:windows xp下如何安装SQL server2000企业版
SQL2000企业版本 适用于WIN 2000 Server系统和Windows 2003系统,Windows XP一般装不了需要选用个人版或开发板.但是企业版也可以安装在xp系统下.这里介绍一个XP ...
- 转: 如何用linux命令修改linux主机ip网关子网掩码
linux一般使用ifconfig命令修改linux主机的ip.网关或子网掩码. 1.命令格式: ifconfig [网络设备] [参数] 2.命令功能: ifconfig 命令用来查看和配置网络设备 ...
- codeproject
search: http http://www.codeproject.com/Articles/96620/Writing-Http-Handlers-and-Modules-in-IIS-7-5 ...