JVM 参数详解

news2024/10/6 2:22:43

3295d1af76414908b4b691c7be14862b.jpgGC有两种类型:Scavenge GC 和Full GC

 

 

1、Scavenge GC

 

一般情况下,当新对象生成,并且在Eden申请空间失败时,就会触发Scavenge GC,堆的Eden区域进行GC,清除非存活对象,并且把尚且存活的对象移动到Survivor的两个区中。

 

2、Full GC

 

对整个堆进行整理,包括Young、Tenured和Perm。Full GC 比Scavenge GC要慢,因此应该尽可能减少Full GC,有如下原因可能导致Full GC

 

a、Tenured被写满;

 

b、Perm域被写满

 

c、System.gc()被显示调用

 

d、上一次GC之后Heap的各域分配策略动态变化;

 

 

 

 

 

-Xmx512m -Xms512m -Xmn192m -Xss128k

 

 

 

JVM中最大堆大小受三方面限制,相关操作系统的数据模型(32位还是64位)限制;系统的可用虚拟内存限制;系统的可用物理内存限制

 

-Xmx512m:

 

设置JVM实例堆最大可用内存为512M。

 

-Xms512m:

 

设置JVM促使内存为512m。此值可以设置与-Xmx相同,以避免每次垃圾回收完成后JVM重新分配内存。

 

-Xmn192m

 

设置年轻代大小为192m。整个JVM内存大小=年轻代大小 + 年老代大小 + 持久代大小。持久代一般固定大小为64m,所以增大年轻代后,将会减小年老代大小。此值对系统性能影响较大,Sun官方推荐配置为整个堆的3/8。

 

-Xss128k

 

设置每个线程的堆栈大小。JDK5.0以后每个线程堆栈大小为1M,以前每个线程堆栈大小为256K。更具应用的线程所需内存大小进行调整。在相同物理内存下,减小这个值能生成更多的线程。但是操作系统对一个进程内的线程数还是有限制的,不能无限生成,经验值在3000~5000左右。

 

 

 

注意下面问题:

 

(1)增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也 就是GC期间,Java应用程序不做任何工作。

 

(2)Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。

 

(3)Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3(也有指出为3/8)。

 

(4)一个应用程序最好是每10到20秒间运行一次GC,每次在半秒之内完成。

 

 

 

java -XX:NewRatio=4 -XX:SurvivorRatio=4 -XX:MaxPermSize=16m -XX:MaxTenuringThreshold=0

 

-XX:NewRatio=4

 

设置年轻代(包括Eden和两个Survivor区)与年老代的比值(除去持久代)。设置为4,则年轻代与年老代所占比值为1:4,年轻代占整个堆栈的1/5

 

-XX:SurvivorRatio=4

 

设置年轻代中Eden区与Survivor区的大小比值。设置为4,则两个Survivor区与一个Eden区的比值为2:4,一个Survivor区占整个年轻代的1/6

 

 

 

-XX:PermSize=128M

 

设置持久代大小为128M

 

-XX:MaxPermSize=16m

 

设置持久代最大为16m。

 

MaxPermSize过小会导致:java.lang.OutOfMemoryError: PermGen space

 

 

 

-XX:MaxTenuringThreshold=0

 

设置垃圾最大年龄。如果设置为0的话,则年轻代对象不经过Survivor区,直接进入年老代。对于年老代比较多的应用,可以提高效率。如果将此值设置为一个较大值,则年轻代对象会在Survivor区进行多次复制,这样可以增加对象再年轻代的存活时间,增加在年轻代即被回收的概论。

 

 

 

 

 

JVM给了三种选择:

 

串行收集器

 

使用单线程处理所有垃圾回收工作,因为无需多线程交互,所以效率比较高,但是也无法使用多处理器的优势,所以此收集器使用单处理器机器。当然此收集器也可以用在小数据量(100M)情况下的多处理器机器上,可以使用-XX:+UseSericalGC打开

 

 

 

适用情况:数据量比较小(100M左右);单处理器下并对相应时间无要求的应用

 

缺点:只能用于小型应用

 

并行收集器

 

对年轻代进行并行垃圾回收,因此可以减少垃圾回收时间,一般在多线程处理机器上使用。在Java SE6.0中进行了增强,可以在年老代进行并行收集,如果年老代不使用并发收集的话,使用单线程进行垃圾回收,因此会制约扩展能力,使用-XX:+UserParallelOldGC打开

 

 

 

-XX:ParallelGCThreads=N,设置并行垃圾回收的线程数,此值可以设置与机器处理机数量一致;

 

 

 

使用情况:“对吞吐量有高要求”,多CPU,对应用时间无要求的中、大型应用。如后台处理、科学计算

 

缺点:应用相应时间可能较长;

 

并发收集器

 

可以保证大部分工作都并发进行(应用不停止),垃圾回收只暂停很少时间,此收集器适合对相应时间要求比较较高的中、大规模应用。

 

使用-XX:+UseGoncMarkSweepGC打开

 

 

 

适用情况:“对响应时间有高要求”,多CPU,对应用响应时间有较高要求的中、大型应用。如:Web服务器/应用服务器、电信交换、集成开发环境

 

 

 

但是串行收集器只适用于小数据量的情况,所以这里的选择主要针对并行收集器和并发收集器。

 

默认情况下,JDK5.0以前都是使用串行收集器,如果想使用其他收集器需要在启动时加入相应参数。JDK5.0以后,JVM会根据当前系统配置进行判断。

 

 

 

吞吐量优先的并行收集器

 

如上文所述,并行收集器主要以到达一定的吞吐量为目标,适用于科学技术和后台处理等。

 

典型配置:

 

java -Xmx3800m -Xms3800m -Xmn192m -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20

 

-XX:+UseParallelGC

 

选择垃圾收集器为并行收集器。此配置仅对年轻代有效。即上述配置下,年轻代使用并发收集,而年老代仍旧使用串行收集。

 

-XX:ParallelGCThreads=20

 

配置并行收集器的线程数,即:同时多少个线程一起进行垃圾回收。此值最好配置与处理器数目相等。

 

java -Xmx512m -Xms512m -Xmn192m -Xss128k -XX:+UseParallelGC -XX:ParallelGCThreads=20 -XX:+UseParallelOldGC

 

-XX:+UseParallelOldGC

 

配置年老代垃圾收集方式为并行收集。JDK6.0支持对年老代并行收集。

 

java -Xmx512m -Xms512m -Xmn192m -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100

 

-XX:MaxGCPauseMillis=100

 

设置每次年轻代垃圾回收的最长时间,如果无法满足此时间,JVM会自动调整年轻代大小,以满足此值。

 

如果指定了此值的话,堆大小和垃圾回收相关参数会进行调整以达到指定值,设定辞职可能会减少应用的吞吐量。

 

java -Xmx512m -Xms512m -Xmn192m -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100 -XX:+UseAdaptiveSizePolicy

 

-XX:+UseAdaptiveSizePolicy

 

设置此选项后,并行收集器会自动选择年轻代区大小和相应的Survivor区比例,以达到目标系统规定的最低相应时间或者收集频率等,此值建议使用并行收集器时,一直打开。

 

-XX:GCTimeRatio=n:设置垃圾回收时间占程序运行时间的百分比。公式为1/(1+n)

 

吞吐量,吞吐量为垃圾回收时间与非垃圾回收时间的比值。-XX:GCTimeRatio=19时,表示5%的时间用于垃圾回收,默认情况99,即1%的时间用于垃圾回收

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

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

相关文章

mysql 命令

1.以root身份登录MySQL服务器 mysql -u root -p 2.输入root用户密码 显示命令 1. 显示数据库列表 show databases; 刚开始时才两个数据库:mysql和test。mysql库很重要它里面有MYSQL的系统信息,我们改密码和新增用户,实际上就是用这个库进…

AUTOSAR词典:CAN驱动Mailbox配置技术要点全解析

AUTOSAR词典:CAN驱动Mailbox配置技术要点全解析 前言 首先,请问大家几个小小问题,你清楚: AUTOSAR框架下的CAN驱动关键词定义吗?是不是有些总是傻傻分不清楚呢?CAN驱动Mailbox配置过程中有哪些关键配置参…

操作系统--------调度算法篇

目录 一.先来先服务调度算法(FCFS) 二.短作业优先调度算法(SJF) 2.1.SJF调度算法缺点 三.优先级调度算法 3.1优先级调度算法的类型 1.非抢占优先级调度算法 2.抢占优先级调度算法 3.2优先级的类型 3.1静态优先级 3.2动态…

2101. 引爆最多的炸弹;752. 打开转盘锁;1234. 替换子串得到平衡字符串

2101. 引爆最多的炸弹 核心思想:枚举BFS。枚举每个炸弹最多引爆多少个炸弹,对每个炸弹进行dfs,一个炸弹能否引爆另一个炸弹是两个炸弹的圆心距离在第一个炸弹的半径之内。 752. 打开转盘锁 核心思想:典型BFS,就像水源扩散一样&a…

MySQL数据库 -- 入门篇

1. MySQL概述 1.1 数据库相关概念 三个概念:数据库、数据库管理系统、SQL。 目前主流的关系型数据库管理系统的市场占有率排名如下: Oracle:大型的收费数据库,Oracle公司产品,价格昂贵。MySQL:开源免费…

力扣刷题-数组-螺旋矩阵

模拟过程,但却十分考察对代码的掌控能力。 重点:循环不变量原则! 第一条原则: 模拟顺时针画矩阵的过程: 填充上行从左到右填充右列从上到下填充下行从右到左填充左列从下到上 由外向内一圈一圈这么画下去。 第二条原…

【探索Linux世界|中秋特辑】--- 倒计时和进度条的实现与演示

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【Linux专栏】🎈 本专栏旨在分享学习Linux的一点学习心得,欢迎大家在评论区讨论💌 演示环境&#xff1…

PageHelp插件在复杂sql下引起的Having无法识别错误及其解决方案

1: 问题出现的场景 系统中有一个复杂SQL内嵌套了多个子查询.在改动时需要将SQL的最后一行加上having来做额外的过滤处理. 添加完having语句后发现SQL能够正常执行就直接将代码提交到了测试环境.结果在测试环境报错Unknown column ‘xxx‘ in ‘having clause. 2: 分析问题 1…

公众号留言功能怎么打开?有什么条件?

为什么公众号没有留言功能?2018年2月12日,TX新规出台:根据相关规定和平台规则要求,我们暂时调整留言功能开放规则,后续新注册帐号无留言功能。这就意味着2018年2月12日号之后注册的公众号不论个人主体还是组织主体&…

十四、MySql的用户管理

文章目录 一、用户管理二、用户(一)用户信息(二)创建用户1.语法:2.案例: (三) 删除用户1.语法:2.示例: (四)修改用户密码1.语法&#…

ps丢失d3dcompiler_47.dll怎么办,这四个方法都能解决

在当今的信息化社会,电脑已经成为我们生活和工作中不可或缺的一部分。然而,随着软件技术的不断发展,电脑在使用过程中也难免会遇到各种问题。其中,缺失d3dcompiler_47.dll文件是一个常见的问题。本文将为大家介绍如何修复电脑出现…

Python JS逆向之Ku狗,实现搜索下载功能(附源码)

今天用Python来实现一下酷狗JS逆向,实现搜索下载功能 1、环境使用 Python 3.8Pycharm 2、模块使用 import hashlib --> pip install hashlib import prettytable as pt --> pip install prettytable import requests --> pip install requests import…

深度学习从入门到入土

1. 数据操作 N维数组样例 N维数组是机器学习和神经网络的主要数据结构 0-d 一个类别: 1.0 1-d 一个特征向量(一维矩阵):[1.0, 2.7, 3.4] 2-d 一个样本-特征矩阵-(二维矩阵) 3-d RGB图片 (宽x高x通道)- 三维数组 4-d 一个RGB…

selenium自动化测试入门,一篇足矣

Selenium是一个基于浏览器的自动化测试工具,它提供了一种跨平台、跨浏览器的端到端的web自动化解决方案。 Selenium是用于自动化控制浏览器做各种操作,打开网页,点击按钮,输入表单等等,可以模拟各种人工操作浏览器的功…

共享WiFi贴项目怎么实施与运营,微火为你提供高效解答!

共享WiFi贴是一项有前景的商业项目,不仅可以满足用户对网络的需求,还可以为创业者带来盈利的机会。那么,我们来看看如何有效地开展共享WiFi贴项目。 最重要的是选择合适的位置。共享WiFi贴项目的成功与否很大程度上取决于位置选择。优先选择人…

web前端之float布局与flex布局

float布局 <style>.nav {overflow: hidden;background-color: #6adfd0; /* 导航栏背景颜色 */}.nav a {float: left;display: block;text-align: center;padding: 14px 16px;text-decoration: none;color: #000000; /* 导航栏文字颜色 */}.nav a:hover {background-col…

示例-安装office2016图文教程简体中文下载安装包

目录 简介 步骤 总结 简介 Office 2016作为一款办公软件套件&#xff0c;下载和安装 都具有许多令人印象深刻的特点。让我来为你介绍一下&#xff1a;Office 2016注重实现跨平台的一致性。无论你是在Windows、Mac、iOS还是Android上使用Office&#xff0c;你都可以享受到相似…

软件测试之白盒测试

白盒测试 白盒测试&#xff08;White Box Testing&#xff09;又称结构测试、透明盒测试、逻辑驱动测试或基于代码的测试。白盒测试只测试软件产品的内部结构和处理过程&#xff0c;而不测试软件产品的功能&#xff0c;用于纠正软件系统在描述、表示和规格上的错误&#xff0c…

「回到县城」正成为大学生就业的无奈选择

现如今&#xff0c;上大学已经不再是当年的天之骄子&#xff0c;现在的大学升学率极高&#xff0c;而毕业就业率却与之相反。 只有少数人能成为优秀的人&#xff0c;而竞争激烈的结果只有更少的人获得胜利。 想象一下&#xff0c;在大城市里打拼&#xff0c;就像千军万马争夺…

图像分割基础,点、线、孤立点检测(数字图像处理概念 P7)

文章目录 基础特性边缘检测孤立点检测线检测全局阈值处理 分割将图像细分成 构成他的子区域或对象 异常图像分割是最困难的图像处理之一&#xff0c;分割的程度取决于问题 基础特性 边缘检测 孤立点检测 线检测 全局阈值处理