jvm 的内存包括stack ,Heap,NonHeap,在此重点说明Heap,NonHeap。

Heap叫堆内存,它用于存放类实例和数组信息。NonHeap叫非堆内存,用于存放类,方法等可反射的对象以及类静态变量,常量池等。

Heap包含年轻态,年老态。NonHeap包含永久态。年轻态包含1个eden去和2个survivor区。

内存区域的大小均有相应的参数配置。各个参数详解如下:

a) 堆内存设置:程序可以操作的。

-Xms 初始化堆内存,默认是物理内存的1/64。当空余堆内存小于40%时,会增加到-Xmx的最大限制。

-Xmx 最大堆内存分配,默认是物理内存的1/4,当空余内存大于70%时,会减少到-Xms的最大限制。

一般,Xmx 和Xms 一般大小相等。

b)非堆内存设置

-XX:PermSize 初始化非堆内存,默认是物理内存的1/64。

-XX:MaxPermSize 非堆内存最大值,默认是物理内存的1/4。

申请内存的过程:

1.jvm优先分配在eden区,若eden空间足够,则内存申请结束。

2.否则jvm试图释放eden区的不活跃的对象(minor gc),释放后若eden仍不足放入新的对象,则jvm试图将部分eden区活跃对象放入survivor区。

3.若survivor不足以存放且old区有足够的空间存放,则直接存放到old区并将survivor区的对象移到old区。

4.若old空间不足,则进行full gc。

5.若回收后survivor及old区仍不足以存放从Eden复制过来的部分对象,导致jvm无法在eden区为新对象分配内存,则出现OOM错误。

GC内存回收的机制:

jvm中,程序计数器,虚拟机栈,本地方法栈都是随着线程而生随线程而灭,实现了自动的内存清理,因此,我们 的垃圾回收主要集中于java堆和方法区中,在程序运行期间,这部分的内存的分配和使用是动态的。

对象存活判断:可达性分析,从root向下搜索,搜索走过的路径称为引用链,当一个对象到gc root  没有任何引用链相连时,则证明此对象是不可用的。其中 gc root包括:

虚拟机栈中引用的对象。方法区中引用的对象,本地方法栈中JNI引用的对象

gc算法包括以下几种:标记-清除,复制算法,标记-压缩算法

基于算法实现的垃圾收集器:serial收集器(新生代-复制算法,老年代-标记压缩,都串行),ParNew收集器(新生代并行,老年代串行),Parallel收集器(新生代并行,老年代串行,可打开自适应调节策略,以提供最合适的停顿时间或最大的吞吐量),Parallel Old收集器(新生代和老年代均并行),CMS收集器,G1收集器。

其中CMS有5个步骤:初始标记,并发标记,重新标记,并发清除,并发重置,第1和3个步骤有短暂的暂停,其余步骤和应用线程并发执行。

优点:并发收集、低停顿

缺点:产生大量控件碎片,并发阶段会降低吞吐量

JVM内出现OOM,查找步骤如下:

1.确认是不是内存本身就分配过小

jmap -heap pid(pid是进程的id),该工具可以查出新生代,年老代堆内存的分配大小及使用情况

2.找到最耗内存的对象

jmap -histo:live pid|more

改命令可以找到各个存活对象的数目和大小,但是,该执行该命令会执行一次fgc,可以执行该命令后dump内存,通过mat分析(如visualVm,jprofiler,JProbe等)

jvm调优的jstack用法

这个命令多用于jvm调优,具体方式如下:

1. 通过ps找到对应进程的pid  ps -ef|grep tomcat

2. ps -mp pid -o THREAD,tid,time 找到该进程下所有的线程,并可以发现耗时或耗cpu的线程id

3. 通过printf '%x' tid 将十进制数据转换为十六进制 如:7b8a

4. jstack pid >> /tmp/mp.txt

5. 通过grep 7b8a /tmp/mp.txt -A 10 找到该线程对应的具体代码信息

jvm 内存机制的更多相关文章

  1. JVM 内存机制理解【转自http://www.cnblogs.com/dingyingsi/p/3760447.html】

    我们知道,计算机CPU和内存的交互是最频繁的,内存是我们的高速缓存区,用户磁盘和CPU的交互,而CPU运转速度越来越快,磁盘远远跟不上CPU的读写速度,才设计了内存,用户缓冲用户IO等待导致CPU的等 ...

  2. JVM内存机制与垃圾收集器总结

    本文目录 1. JVM内存组成结构 2. JVM内存回收 3. 垃圾收集器与算法 4. jdk1.6中class文件结构 5. jdk1.6 1.7 1.8比较 1. JVM内存组成结构 JVM栈由堆 ...

  3. JVM内存回收机制简述

    JVM内存回收机制涉及的知识点太多了,了解越多越迷糊,汗一个,这里仅简单做个笔记,主要参考<深入理解Java虚拟机:JVM高级特性与最佳实践(第二版)> 目前java的jdk默认虚拟机为H ...

  4. JVM内存回收机制

    1. JVM内存回收机制简述 http://www.cnblogs.com/lzrabbit/p/3826738.html

  5. JVM内存管理和JVM垃圾回收机制

    JVM内存管理和JVM垃圾回收机制(1) 这里向大家描述一下JVM学习笔记之JVM内存管理和JVM垃圾回收的概念,JVM内存结构由堆.栈.本地方法栈.方法区等部分组成,另外JVM分别对新生代和旧生代采 ...

  6. Java虚拟机JVM内存分区及代码执行机制

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt230 1.  JVM体系结构 图1 JVM体系结构    方法区:存放JVM ...

  7. ClassLoader类加载机制&&JVM内存管理

    一.ClassLoader类加载机制 在java中类加载是遵循委派双亲加载的:通过调用loadClass方法逐级往上传递委派加载请求,当找不到父ClassLoader时调用其findClass方法尝试 ...

  8. JVM内存结构,运行机制

    三月十号,白天出去有事情出去了一天,晚上刚到食堂就接到阿里电话, 紧张到不行,很多基础的问题都不知道从哪里说了orz: 其中关于JVM内存结构,运行机制,自己笔记里面有总结的,可当天还是一下子说不出来 ...

  9. JVM内存分配与垃圾回收机制管理

    项目上线,性能优化有个重要组成就是jvm内存分配和垃圾回收机制的管理配置. 网上随便能搜到相关的具体步骤,以及内存中各种参数对应的意义,不再赘述. 干货就是直接抛出遇到的问题,以及如何解决的,再说说待 ...

随机推荐

  1. jquery源码解析:attr,prop,attrHooks,propHooks详解

    我们先来看一下jQuery中有多少个方法是用来操作元素属性的. 首先,看一下实例方法: 然后,看下静态方法(工具方法): 静态方法是内部使用的,我们外面使用的很少,实例方法才是对外的. 接下来,我们来 ...

  2. react onclick传递参数

    最近在做react项目的时候,被一个小问题绊了一脚,记录一下 onClick 传入参数 onClick={e=>{this.Mallclose(e,index)} onClick={this.M ...

  3. 判断h5页面是小程序环境还是微信环境

    1.话不多说直接上代码,已使用有效 <script type="text/javascript" src="https://res.wx.qq.com/open/j ...

  4. LOJ2476. 「2018 集训队互测 Day 3」蒜头的奖杯 & LOJ2565. 「SDOI2018」旧试题(莫比乌斯反演)

    题目链接 LOJ2476:https://loj.ac/problem/2476 LOJ2565:https://loj.ac/problem/2565 题解 参考照搬了 wxh 的博客. 为了方便, ...

  5. Codeforces Round #555 (Div. 3) A B C1(很水的题目)

    A. Reachable Numbers 题意:设f(x)为 x+1 这个数去掉后缀0的数,现在给出n,问经过无数次这种变换后,最多能得到多少个不同的数. 代码 #include<cstdio& ...

  6. 洛谷 P1273 有线电视网(树形背包)

    洛谷 P1273 有线电视网(树形背包) 干透一道题 题面:洛谷 P1273 本质就是个背包.这道题dp有点奇怪,最终答案并不是dp值,而是最后遍历寻找那个合法且最优的\(i\)作为答案.dp值存的是 ...

  7. 插播一条 QQ头像无法正常显示问题

    问题背景 不知道啥什么,QQ群的头像有些显示不全直接是默认的头像.想一想最近也没做啥,怎么就出问题了. 后来想一想,大概是个人文件夹的文件出问题了 解决办法 好友头像显示问题的删除 MiscHead. ...

  8. HDU - 6133 启发式合并

    题意:给出一棵树共\(n\)个顶点,每个顶点有一个权值\(val_i\),你需要对每个节点统计一个最优解 每个节点的解按照一定规则产生:取出该节点的子树下所有的顶点,把顶点任意排序成一个序列,设为\( ...

  9. 05-树9 Huffman Codes (30 分)

    In 1953, David A. Huffman published his paper "A Method for the Construction of Minimum-Redunda ...

  10. C#以管理员权限运行源码,C#软件获取管理员权限,c#获取管理员权限

    C#以管理员权限运行源码,C#软件获取管理员权限,c#获取管理员权限 发布时间:2014-10-19 21:40内容来源:未知 点击: 次 windows 7和vista提高的系统的安全性,同时需要明 ...