堆内存动态分配情况和jvm调优方向

由上图可以看出:
堆中分为新生代(占堆1/3内存)和老年代(占堆2/3内存),
新生代又分为Eden区(占新生代内存的8/10)和survivor区(占新生代内存的2/10),
survivor区又分为from区和to区(各占新生代内存的1/10)
我们知道new出来的对象都是方在堆里面,那么具体在堆里面是怎么样的呢?
1、刚开始new出来的对象放在Eden区
2、等到Eden放满之后,就会进行一次minor gc,清除无效对象并将存活的对象移入from区(第一次minor gc),Eden又可以继续存放对象
3、Eden再次放满之后,再进行minor gc,清除无效对象并将Eden区的存活对象和from区的存活对象一起移入to区,Eden又可以继续存放对象
4、Eden再次放满之后,再进行minor gc,清除无效对象并将Eden区的存活对象和to区的存活对象一起移入from区,Eden又可以继续存放对象
5、之后一直重复3和4的操作,直到from区或者to区中存活对象的年龄超过15岁(每进行一次minor gc后存活对象的年龄加1),在那一次minor gc后会将年龄超过15岁的存活对象移入老年代。(ps:可以通过-XX:MaxTenuringThreshold来设置对象进入老年代的年龄阔值)
6、直到老年代被放满,此时会发生full gc,清除所有区域(包括堆和方法区)的无效对象。(注意:每次发生full gc都会发生“STW”也就是“Stop The Word ”,会暂停其他所有线程。这在浏览器或者客户端就表现为卡顿)
重点:
jvm调优方向:
1、一般来说发生minor gc的时间是非常短的,一般不需要进行调优,但是当发生minor gc的次数非常多的时候才需要进行调优。减少发生minor gc的次数(一般用不到)
2、full gc的速度一般比minor gc慢十倍,而且都会发生STW现象。
3、jvm调优的最终目的有两个:1)减少发生full gc的时间。2)减少发生full gc的次数(最主要的调优方向)
堆内存动态分配情况和jvm调优方向的更多相关文章
- 深入理解JAVA虚拟机(内存模型+GC算法+JVM调优)
目录 1.Java虚拟机内存模型 1.1 程序计数器 1.2 Java虚拟机栈 局部变量 1.3 本地方法栈 1.4 Java堆 1.5 方法区(永久区.元空间) 附图 2.JVM内存分配参数 2.1 ...
- java内存管理之垃圾回收及JVM调优
GC(garbage Collector 垃圾收集器)作用:a.内存的动态分配:b.垃圾回收注:Java所承诺的自动内存管理主要是针对对象内存的回收和对象内存的分配. 一.垃圾标记 程序计数器.Jav ...
- JVM性能调优(3) —— 内存分配和垃圾回收调优
前序文章: JVM性能调优(1) -- JVM内存模型和类加载运行机制 JVM性能调优(2) -- 垃圾回收器和回收策略 一.内存调优的目标 新生代的垃圾回收是比较简单的,Eden区满了无法分配新对象 ...
- 7.JVM调优-方法区,堆,栈调优详解
通常我们都知道在堆空间新生代Eden区满了,会触发minor GC, 在老年代满了会触发full GC, 触发full GC会导致Stop The World, 那你们知道还有一个区域满了一会触发Fu ...
- 【JVM】JVM 概述、内存结构、溢出、调优(基础结构+StringTable+Unsafe+ByteBuffer)
什么是 JVM ? 定义 Java Virtual Machine - java 程序的运行环境(java 二进制字节码的运行环境) 好处 一次编写,到处运行 自动内存管理,垃圾回收功能 数组下标越界 ...
- JVM 调优 内存调优 CPU 使用调优 锁竞争调优 I/O 调优
Twitter 工程师谈 JVM 调优 2016年03月24日 10:22:30 wenniuwuren https://blog.csdn.net/wenniuwuren/article/detai ...
- JVM调优之经验
在生产系统中,高吞吐和低延迟一直都是JVM调优的最终目标,但这两者恰恰又是相悖的,鱼和熊掌不可兼得,所以在调优之前要清楚舍谁而取谁.一般计算任务和组件服务会偏向高吞吐,而web展示则偏向低延迟才会带来 ...
- 技能篇:linux服务性能问题排查及jvm调优思路
只要业务逻辑代码写正确,处理好业务状态在多线程的并发问题,很少会有调优方面的需求.最多就是在性能监控平台发现某些接口的调用耗时偏高,然后再发现某一SQL或第三方接口执行超时之类的.如果你是负责中间件或 ...
- jvm系列(四):jvm调优-命令大全(jps jstat jmap jhat jstack jinfo)
文章同步发布于github博客地址,阅读效果更佳,欢迎品尝 运用jvm自带的命令可以方便的在生产监控和打印堆栈的日志信息帮忙我们来定位问题!虽然jvm调优成熟的工具已经有很多:jconsole.大名鼎 ...
随机推荐
- mysql 存储过程和触发器
存储过程 -- 声明结束符 -- 创建存储过程 DELIMITER $ -- 声明存储过程的结束符 CREATE PROCEDURE pro_test() --存储过程名称(参数列表) BEGIN - ...
- GP查询表状态常用SQL
- 【AGC】构建服务1-云函数示例
前言:上一次笔者给大家带来了AGC领域的远程配置服务的学习.这次我们再继续深化学习AGC的相关知识.在文章开始之前,再给读者简单介绍一下AGC,以免第一次来的读者不了解.所谓AGC就是AppGal ...
- BMP位图之1位位图(一)
起始结构 typedef struct tagBITMAPFILEHEADER { WORD bfType; //类型名,字符串"BM", DWORD bfSize; //文件大小 ...
- django中的静态文件
静态文件 1.什么是静态文件 在django中静态文件是指那些图片.css样式.js样式.视频.音频等静态资源. 2.为什么要配置静态文件 这些静态文件往往不需要频繁的进行变动,如果我们将这些静态文件 ...
- EMAS Serverless到底有多便利?
EMAS Serverless 简介 EMAS Serverless 是阿里云提供的基于Serverless技术的一站式后端开发平台,为开发者提供高可用.弹性伸缩的云开发服务,包含云函数.云数据库.云 ...
- 大数据Hadoop入门教程 | (二)Linux
使用finalShell可以提供文件目录图形化 完整Linux命令整理参考大佬博客:Linux常见文件管理命令 - Mr_Walker - 博客园 Linux文件系统基础知识 Linux文件系统概念 ...
- C#基础_变量的命名规则
变量: 1.作用 :可以让我们在计算机中存储数据 2.语法:变量类型 变量名=赋值: 3.常用的数据类型: int 整数类型 取值范围:最大2147483647;最小-214748364 ...
- 【c语言简单算法】1-阶乘
求n的阶乘 算法要求 从键盘输入一个数,求出这个数的阶乘 代码实现 #include main() { double result=1; size_t n; scanf("%d", ...
- 大家都能看得懂的源码 - 那些关于DOM的常见Hook封装(一)
本文是深入浅出 ahooks 源码系列文章的第十四篇,该系列已整理成文档-地址.觉得还不错,给个 star 支持一下哈,Thanks. 上一篇我们探讨了 ahooks 对 DOM 类 Hooks 使用 ...