首先声明:此篇博文分析的是JDK1.8。

JVM内存区域总体分两类:heap区和非heap区。Jconsole中对内存划分为同样的结构,如下:

heap区又分为: 
  - Eden Space(伊甸园)
  - Survivor Space(幸存者区) ,Survivor Space分为两个空间大小一样的区域,分别是To Survivor和From Survivor,并且始终保持一个Survivor是空的
  - Old Gen(老年代)

Eden Space:字面意思是伊甸园,对象被创建的时候首先放到Eden Space,进行垃圾回收后,不能被回收的对象被放入到空的Survivor区域。

Survivor Space:幸存者区,用于保存在eden space内存区域中经过垃圾回收后没有被回收的对象。Survivor有两个,分别为To Survivor、 From Survivor,这个两个区域的空间大小是一样的。执行垃圾回收的时候Eden区域不能被回收的对象被放入到空的survivor(也就是To Survivor,同时Eden区域的内存会在垃圾回收的过程中全部释放),另一个survivor(即From Survivor)里不能被回收的对象也会被放入这个survivor(即To Survivor),然后To Survivor 和 From Survivor的标记会互换,始终保证一个survivor是空的。

Eden Space和Survivor Space都属于新生代,新生代中执行的垃圾回收被称之为Minor GC(因为是对新生代进行垃圾回收,所以又被称为Young GC),每一次Young GC后留下来的对象age(年龄)加1,这个age就是用来判断对象是否进入老年的标志。

Old Gen:老年代,用于存放新生代中经过多次垃圾回收仍然存活的对象,也有可能是新生代分配不了内存的大对象会直接进入老年代。经过多次垃圾回收都没有被回收的对象,这些对象的age已经足够old了,就会放入到老年代。

当老年代被放满之后,虚拟机会进行垃圾回收,称之为Major GC。由于Major GC除并发GC外均需对整个堆进行扫描和回收,因此又称为Full GC。

heap区即堆内存,整个堆大小=年轻代大小 + 老年代大小。堆内存默认为物理内存的1/64(<1GB);默认空余堆内存小于40%时,JVM就会增大堆直到-Xmx的最大限制,可以通过MinHeapFreeRatio参数进行调整;默认空余堆内存大于70%时,JVM会减少堆直到-Xms的最小限制,可以通过MaxHeapFreeRatio参数进行调整。

下面我们来认识下非堆内存(非heap区) 
Code Cache:代码缓存区,它主要用于存放JIT所编译的代码。CodeCache代码缓冲区的大小在client模式下默认最大是32m,在server模式下默认是48m,这个值也是可以设置的,它所对应的JVM参数为ReservedCodeCacheSize 和 InitialCodeCacheSize,可以通过如下的方式来为Java程序设置。

-XX:ReservedCodeCacheSize=128m

CodeCache缓存区是可能被充满的,当CodeCache满时,后台会收到CodeCache is full的警告信息,如下所示: 
“CompilerThread0” java.lang.OutOfMemoryError: requested 2854248 bytes for Chunk::new. Out of swap space?

注:JIT编译器是在程序运行期间,将Java字节码编译成平台相关的二进制代码。正因为此编译行为发生在程序运行期间,所以该编译器被称为Just-In-Time编译器。

转载于:https://www.cnblogs.com/jiangwangxiang/p/9096074.html

使用jconsole监控JVM内存相关推荐

  1. JVM性能调优监控工具专题二:VisualVM基本篇之监控JVM内存,CPU,线程

    2019独角兽企业重金招聘Python工程师标准>>> JVM性能调优监控工具专题二:VisualVM基本篇之监控JVM内存,CPU,线程 博客分类: java jvm 前言: 上一 ...

  2. jconsole是否可以在生产环境使用_运用Jconsole监控JVM

    最近需要参与一些java程序debug和性能调整方面的工作,jconsole是jdk自带的工具,比较好用,以下文章前面大部分翻译自: ,后面关于用户名/密码和使用ssl加密连接的部分是从其他地方搜集的 ...

  3. java 内存 监控_监控JVM内存使用情况

    1.使用jstat命令查看堆内存的使用情况 jstat 命令选项 vmid 间隔时间 查询次数 1.查看当前进程Class类加载的统计 jstat -class ***** 2.查看编译统计 jsta ...

  4. VisualVM远程连接Linux服务器通过jstatd方式监控JVM内存状态

    2019独角兽企业重金招聘Python工程师标准>>> VisualVM远程连接Linux监控JVM的方式有两种,一种是jstatd,另外一种是JMX,这里描述jstatd的方式: ...

  5. 监控利器之使用JConsole轻松监控JVM运行情况

    jdk本身给我们提供了两种工具用于监控JVM运行情况,其中一个是Jconsole,还有一个是jvisualvm,这两个工具都安装在jdk的bin目录下: 本文我们使用jconsule来监控jvm的运行 ...

  6. 使用JConsole监控进程、线程、内存、cpu、类情况

    Jconsole简介: Jconsole是一个JMX兼容的监视工具.它使用Java虚拟机的JMX机制来提供运行在Java平台的应用程序的性能与资源耗费信息. 监控进程使用方法如下: 由于JConsol ...

  7. JVM内存监控及调优分析

    一.内存监控背景 在做JVM内存分析前,需要堆JVM内存及垃圾回收算法和垃圾回收器有一定了解,具体可以参考我之前的一篇文章:常见的垃圾回收器及垃圾回收算法 1.1.为什么要做内存监控 我们在做开发的时 ...

  8. JConsole监控远程linux下的JVM

    环境: 服务器端: Linux + jdk1.7.0_75 + tomcat 7 本地: Win + jdk1.7.0_55 一.修改/etc/hosts文件 hostname -i 如果显示127. ...

  9. JVM 监控以及内存分析

    Java 语言,开发者不能直接控制程序运行内存,对象的创建都是由类加载器一步步解析,执行与生成与内存区域中的:并且 jvm 有自己的垃圾回收器对内存区域管理.回收:但是我们已经可以通过一些工具来在程序 ...

最新文章

  1. 成本中心的费用计划/KP06
  2. JSP关于Frameset的简单用法
  3. Windows API的时间结构体、时间转换及时间获取
  4. 基于Ocelot的gRpcHttp网关
  5. Android面试题总结加强再加强版(三)
  6. 如何请教问题且以后都会回答你的方法
  7. 【工具】Notepad++的一些常用配置
  8. 三星投8万亿扩充10nm、7nm产能:骁龙835爆发
  9. php 一键wifi,Mac wifi 自动控制脚本
  10. @DependsOn或depends-on配置的使用
  11. 海思3516dv300之bmi160/LSM6DS3驱动总结
  12. 【论文笔记】—低照度图像增强—Supervised—RetinexNet—2018-BMVC
  13. Eclipse官方下载步骤
  14. Android:异步处理之Handler+Thread的应用(一)
  15. Pandas合并表格的方法总结
  16. 两数互素有什么性质_如何定义两个数互素的程度?
  17. 删除子文件夹[字典树 + go变量 + strings.builder的copyCheck()]
  18. HashMap源码分析图解
  19. 企业推广品牌网络营销占比必须重视哪些流程
  20. 游戏安全反汇编分析开启取消自动攻击call

热门文章

  1. 计算机组成原理知识查漏补缺
  2. 【CyberSecurityLearning 19】NAT与动态路由协议RIP
  3. 逆向工具之IDA的使用
  4. 「 每日一练,快乐水题 」693. 交替位二进制数
  5. 操作系统(十九)进程互斥的软件实现方法
  6. UNIX再学习 -- 死磕内存管理
  7. 基于TCP协议的通信模型
  8. TENSORFLOW GUIDE: EXPONENTIAL MOVING AVERAGE FOR IMPROVED CLASSIFICATION
  9. JZOJ 5474. 【NOIP2017提高组正式赛】时间复杂度
  10. JZOJ 1240. Fibonacci sequence