jvm 堆 比例_JVM调优原则

JVM调优原则

调优目标

  1. 将进入老年代的对象数量降到最低

  2. 减少 Full GC 的执行时间

在同样场景下,采用多个机器上进行参数调整后的比较验证,将验证能够提高性能的参数应用到最终所有服务器上。

一般常规

满足下列不需要优化

Minor GC执行时间不到50ms;
Minor GC执行不频繁,约10秒一次;
Full GC执行时间不到1s;
Full GC执行频率不算频繁,不低于10分钟1次;

基本思想

针对JVM堆的设置

一般可以通过-Xms -Xmx限定其最小、最大值,为了防止垃圾收集器在最小、最大之间收缩堆而产生额外的时间,通常把最大、最小设置为相同的值;

年轻代和年老代

根据默认的比例(1:2)分配堆内存, 可以通过调整二者之间的比率NewRadio来调整二者之间的大小。

如年轻代,通过 -XX:newSize -XX:MaxNewSize来设置其绝对大小。同样,为了防止年轻代的堆收缩,我们通常会把-XX:newSize -XX:MaxNewSize设置为同样大小。

年轻代和年老代设置多大才参考:

  1. 更大的年轻代必然导致更小的年老代,大的年轻代会延长普通GC的周期,但会增加每次GC的时间,小的年老代会导致更频繁的Full GC。

  2. 更小的年轻代必然导致更大年老代,小的年轻代会导致普通GC很频繁,但每次的GC时间会更短,大的年老代会减少Full GC的频率。

如何选择应该依赖应用程序对象生命周期的分布情况:如果应用存在大量的临时对象,应该选择更大的年轻代;如果存在相对较多的持久对象,年老代应该适当增大。但很多应用都没有这样明显的特性。

在抉择时应该根据以下两点:

  1. 本着Full GC尽量少的原则,让年老代尽量缓存常用对象,JVM的默认比例1:2也是这个道理 。

  2. 通过观察应用一段时间,看其他在峰值时年老代会占多少内存,在不影响Full GC的前提下,根据实际情况加大年轻代,比如可以把比例控制在1:1。但应该给年老代至少预留1/3的增长空间。

配置较好的机器

比如多核、大内存机器,可以为年老代选择并行收集算法:-XX:+UseParallelOldGC 。

线程堆栈的设置

每个线程默认会开启1M的堆栈,用于存放栈帧、调用参数、局部变量等,对大多数应用而言这个默认值太了,一般256K就足用。

理论上,在内存不变的情况下,减少每个线程的堆栈,可以产生更多的线程,但这实际上还受限于操作系统。

922550f0ef4258c7cd93b62fc6cfb44d.png如果你觉得文章不错,文末的赞 ? 又回来啦,记得给我「点赞」和「在看」哦~

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/406430.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

sublime的使用

sublime text3实用教程-安装js智能提示插件 sublime text 3/2怎么卸载删除插件

Linux主机硬盘的主要规划

系统对于硬盘的需求跟刚刚提到的主机开放的服务有关,那么除了这点之外,还有没有其他的注意事项?当然有,那就是数据的分类与数据安全性的考虑,即当主机系统的硬件出现问题时,你的档案数据能否安全的保存。 前…

64位虚拟机下asm()语法_用Hyper-V在win10中创建虚拟机,简单快捷,不用安装其它软件...

运行虚拟机是使用操作系统的好方法,因为无需在电脑上安装它,例如,你可以毫无风险地试用最新的Windows 10试用版或新的Ubuntu(Linux)发行版。以下是如何在Windows 10中创建虚拟机的方法。认识Windows 10中的Hyper-V微软提供了一个称为Hyper-V的…

Eclipse快捷键大全

终结技:CtrlShiftL 显示所有快捷键Ctrl1 快速修复(最经典的快捷键,就不用多说了)CtrlD: 删除当前行 CtrlAlt↓ 复制当前行到下一行(复制增加)CtrlAlt↑ 复制当前行到上一行(复制增加)Alt↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt↑ 当前行…

判断一个Checkbox是否被选中

环境:Win XP VC2010 MFC对话框程序 在窗口添加一个checkbox,其ID为:ID_CHECK1,添加其点击事件: void CWorkHelperDlg::OnBnClickedCheck1() {CButton *pCheckbox (CButton*)GetDlgItem(IDC_CHECK1);if(pCheckbox-&…

微信公众平台 分享到朋友圈 js代码

前言:1目前必须是被微信认证过的公众平台才能使用此接口 1.绑定域名 2.引用文件 http://res.wx.qq.com/open/js/jweixin-1.0.0.js 3配置前台js配置 var url location.href.split(#)[0]; wx.config({ debug: false, // 开启调试模式,调用的所有api的返回值会在客户端…

献给那些离婚或准备离婚的人

这天,白云酒楼里来了两位客人,一男一女,四十岁上下,穿着不俗,男的还拎着一个旅行包,看样子是一对出来旅游的夫妻。服务员笑吟吟地送上菜单。男的接过菜单直接递女的,说:“你点吧&…

VC编辑框(EDIT)的自动换行、自动滚屏 、到指定行数自动清空

From: http://getyoureyes.blog.163.com/blog/static/101716622201083081914305/ 经过多次测试,总结出VC编辑框(EDIT)的自动换行与自动滚屏的方法。 方法一:(当EDIT映射到一CString时) m_String m_Strin…

测试晶面间距软件_纳米材料粒度测试方法大全

纳米材料是指三维空间尺寸中至少有一维处于纳米数量级 (1~100 nm),或由纳米结构单元组成的具有特殊性质的材料,被誉为“21世纪最重要的战略性高技术材料之一”。当材料的粒度大小达到纳米尺度时,将具有传统微米级尺度材料所不具备的小尺寸效应…

第三方控件

1. Fileitem接口 FileItem是一个接口,处理表单内容以及文件内容的的方法。在应用过程中,每一个表单中的单个字段袁术,都会被封装成一个FileItme类的对象,通过调用FileItem对象的相关方法可以得到相关表单字段元素的数据。 FileIte…

如何使用 SSH 控制连接 Windows 服务器

服务器远程连接/ssh方式连接教程(windows云主机远程登录) 如何使用 SSH 控制连接 Windows 服务器

CDHtmlDialog 与 网页交互技巧

From: http://blog.csdn.net/catxl313/article/details/2204541 CDHtmlDialog可以方便的将网页嵌入对话框,使得在程序设计中人机界面(DHTML网页)与控制逻辑(CDialog)可以很好的分离,下面是一些实用技术与技…

查看NTFS文件系统版本号

fsutil fsinfo ntfsinfo c:转载于:https://blog.51cto.com/liushen/269304

java 盘符 系统_001-Java再回首开篇-入门基础

来我们一起了解下java背景突然想着, 整理一套从基础开始的文章吧,对自己来讲是回顾基础和复习,对他人来讲,能有一点点绵薄的帮助,我也是很欣慰了呢,希望能帮你少走点弯路。自己整理的,如有勘误&…

[react] react的虚拟DOM和vue的虚拟DOM有什么区别?

[react] react的虚拟DOM和vue的虚拟DOM有什么区别? React 是数据先生成 vdom,然后对比 vdom(实现上并非先后顺序,两棵树边遍历边生成新的树),最后通过新的 DOM 树渲染。 Vue 是数据先进性对比,先…

( 设计高效算法 ) 年龄排序 Age Sort Uva 11462

( 设计高效算法 ) 年龄排序 Age Sort Uva 11462 可以使用整数排序法, 内存太小无法堆排序. #include <cstdio> #include <cstring> using namespace std;int main(){unsigned int age[101];int n,temp;while (scanf("%d", &n) 1 && n){mems…

js 如何去除字符两端的引号

通过js 提供的substring()就可以直接去除引号。&#xff08;注意是小写&#xff0c;和java不同&#xff09; var str JSON.stringify("sasasa"); console.log(str); var str str.substring(1,str.length-1); console.log(str);

如何在string.Format方法中输出大括号({})

C#(a.cs) using System;public class Test {public void Middle(string start, string end){string pat1 string.Format("(?<{0}).*(?{1})", start, end);Console.WriteLine(pat1);string pat2 string.Format("(?<{{0}}).*(?{{1}})", start, e…

Linux source用法(转)

source命令用法&#xff1a; source FileName作用:在当前bash环境下读取并执行FileName中的命令。注&#xff1a;该命令通常用命令“.”来替代。如&#xff1a;source .bash_rc 与 . .bash_rc 是等效的。source命令(从 C Shell 而来)是bash shell的内置命令。点命令&#xff0c…