JVM调优

1. Heap设定与垃圾回收
       Java Heap分为3个区,Young,Old和Permanent。Young保存刚实例化的对象。当该区被填满时,GC会将对象移到Old区。Permanent区则负责保存反射对象,本文不讨论该区。
       JVM的Heap分配可以使用-X参数设定,
       -Xms 初始Heap大小
       -Xmx java heap最大值
       -Xmn young generation的heap大小 

       JVM有2个GC线程。第一个线程负责回收Heap的Young区。第二个线程在Heap不足时,遍历Heap,将Young 区升级为Older区。Older区的大小等于-Xmx减去-Xmn,不能将-Xms的值设的过大,因为第二个线程被迫运行会降低JVM的性能。
       为什么一些程序频繁发生GC?有如下原因:
       1)程序内调用了System.gc()或Runtime.gc()。
       2)一些中间件软件调用自己的GC方法,此时需要设置参数禁止这些GC。
       3)Java的Heap太小,一般默认的Heap值都很小。
       4)频繁实例化对象,Release对象。此时尽量保存并重用对象,例如使用StringBuffer()和String()。
       如果你发现每次GC后,Heap的剩余空间会是总空间的50%,这表示你的Heap处于健康状态。许多Server端的Java程序每次GC后最好能有65%的剩余空间。
       经验之谈:
       1)Server端JVM最好将-Xms和-Xmx设为相同值。为了优化GC,最好让-Xmn值约等于-Xmx的1/3[2]。
       2)一个GUI程序最好是每10到20秒间运行一次GC,每次在半秒之内完成[2]。

       注意:
       1)增加Heap的大小虽然会降低GC的频率,但也增加了每次GC的时间。并且GC运行时,所有的用户线程将暂停,也 就是GC期间,Java应用程序不做任何工作。
       2)Heap大小并不决定进程的内存使用量。进程的内存使用量要大于-Xmx定义的值,因为Java为其他任务分配内存,例如每个线程的Stack等。

2.Stack的设定
       每个线程都有他自己的Stack。
       -Xss 每个线程的Stack大小 

       Stack的大小限制着线程的数量。如果Stack过大就好导致内存溢漏。-Xss参数决定Stack大小,例如-Xss1024K。如果Stack太小,也会导致Stack溢漏。
3.硬件环境
       硬件环境也影响GC的效率,例如机器的种类,内存,swap空间,和CPU的数量。
       如果你的程序需要频繁创建很多transient对象,会导致JVM频繁GC。这种情况你可以增加机器的内存,来减少Swap空间的使用[2]。
4.4种GC
       第一种为单线程GC,也是默认的GC。,该GC适用于单CPU机器。
       第二种为Throughput GC,是多线程的GC,适用于多CPU,使用大量线程的程序。第二种GC与第一种GC相似,不同在于GC在收集Young区是多线程的,但在Old区和第一种一样,仍然采用单线程。-XX:+UseParallelGC参数启动该GC。
       第三种为Concurrent Low Pause GC,类似于第一种,适用于多CPU,并要求缩短因GC造成程序停滞的时间。这种GC可以在Old区的回收同时,运行应用程序。-XX:+UseConcMarkSweepGC参数启动该GC。
       第四种为Incremental Low Pause GC,适用于要求缩短因GC造成程序停滞的时间。这种GC可以在Young区回收的同时,回收一部分Old区对象。-Xincgc参数启动该GC。
4种GC的具体描述参见[3]。

参考文章:
1. JVM Tuning. http://www.caucho.com/resin-3.0/performance/jvm-tuning.xtp#garbage-collection
2. Performance tuning Java: Tuning steps
http://h21007.www2.hp.com/dspp/tech/tech_TechDocumentDetailPage_IDX/1,1701,1604,00.html
3. Tuning Garbage Collection with the 1.4.2 JavaTM Virtual Machine .
http://java.sun.com/docs/hotspot/gc1.4.2/

 

最后附上用java -X 命令查看JVM的配置说明:

D:\j2sdk15\bin>java -X
    -Xmixed           mixed mode execution (default)
    -Xint             interpreted mode execution only
    -Xbootclasspath:<directories and zip/jar files separated by ;>
                      set search path for bootstrap classes and resources
    -Xbootclasspath/a:<directories and zip/jar files separated by ;>
                      append to end of bootstrap class path
    -Xbootclasspath/p:<directories and zip/jar files separated by ;>
                      prepend in front of bootstrap class path
    -Xnoclassgc       disable class garbage collection
    -Xincgc           enable incremental garbage collection
    -Xloggc:<file>    log GC status to a file with time stamps
    -Xbatch           disable background compilation
    -Xms<size>        set initial Java heap size
    -Xmx<size>        set maximum Java heap size
    -Xss<size>        set java thread stack size
    -Xprof            output cpu profiling data
    -Xfuture          enable strictest checks, anticipating future default
    -Xrs              reduce use of OS signals by Java/VM (see documentation)
    -Xcheck:jni       perform additional checks for JNI functions
    -Xshare:off       do not attempt to use shared class data
    -Xshare:auto      use shared class data if possible (default)
    -Xshare:on        require using shared class data, otherwise fail.
 
The -X options are non-standard and subject to change without notice.
-----------------------------------------------------------------------
 
JVM配置参数中文说明:
-----------------------------------------------------------------------
1、-Xmixed           mixed mode execution (default)
 混合模式执行 
2、-Xint             interpreted mode execution only
 解释模式执行 
3、-Xbootclasspath:<directories and zip/jar files separated by ;>
      set search path for bootstrap classes and resources
 设置zip/jar资源或者类(.class文件)存放目录路径 
3、-Xbootclasspath/a:<directories and zip/jar files separated by ;>
      append to end of bootstrap class path
 追加zip/jar资源或者类(.class文件)存放目录路径 
4、-Xbootclasspath/p:<directories and zip/jar files separated by ;>
      prepend in front of bootstrap class path
 预先加载zip/jar资源或者类(.class文件)存放目录路径 
5、-Xnoclassgc       disable class garbage collection
 关闭类垃圾回收功能 
6、-Xincgc           enable incremental garbage collection
 开启类的垃圾回收功能 
7、-Xloggc:<file>    log GC status to a file with time stamps
 记录垃圾回日志到一个文件。 
8、-Xbatch           disable background compilation
 关闭后台编译  
9、-Xms<size>        set initial Java heap size
 设置JVM初始化堆内存大小 
10、-Xmx<size>        set maximum Java heap size
 设置JVM最大的堆内存大小 
11、-Xss<size>        set java thread stack size
 设置JVM栈内存大小 
12、-Xprof            output cpu profiling data
 输入CPU概要表数据 
13、-Xfuture          enable strictest checks, anticipating future default
 执行严格的代码检查,预测可能出现的情况 
14、-Xrs              reduce use of OS signals by Java/VM (see documentation)
 通过JVM还原操作系统信号  
15、-Xcheck:jni       perform additional checks for JNI functions
 对JNI函数执行检查 
16、-Xshare:off       do not attempt to use shared class data
 尽可能不去使用共享类的数据 
17、-Xshare:auto      use shared class data if possible (default)
 尽可能的使用共享类的数据
18、-Xshare:on       require using shared class data, otherwise fail.
 尽可能的使用共享类的数据,否则运行失败
 
The -X options are non-standard and subject to change without notice.
-----------------------------------------------------------------------
 
怎么用这这些参数呢?其实所有的命令行都是这么一用,下面我就给出一个最简单的HelloWorl的例子来演示这个参数的用法,非常的简单。
 
HelloWorld.java
-----------------------------------------------
public class  HelloWorld {
    public static void main(String[] args)   {
        System.out.println("Hello World!");
    }
}
 
编译并运行:
D:\j2sdk15\bin>javac HelloWorld.java
 
D:\j2sdk15\bin>java -Xms256M -Xmx512M HelloWorld
Hello World!
JVM 21 的优化指南:如何进行JVM调优,JVM调优参数有哪些 这篇文章将详细介绍如何进行JVM 21调优,包括JVM 21调优参数及其应用。此外,我将提供12个实用的代码示例,每个示例都会结合和Java代码。本文已收录于,我的技术网站,有大厂完整,工作技术,架构师成长之路,等经验分享随着JVM版本的不断更新,JVM 21 在性能和功能上都带来了显著的提升。合理的JVM调优不仅可以提高应用程序的性能,还能显著减少内存消耗和GC(垃圾回收)停顿时间。本文将详细介绍JVM 21 的优化指南,包含如何进行JVM调优以及常见的JVM调优参数,并提供3个实用的代码示例。 阅读详情

相关推荐

JVM 8 的优化指南:如何进行JVM调优,JVM调优参数有哪些

通过这些示例,我们可以深入了解JVM 8的调优策略和方法。合理使用JVM调优参数,可以帮助您的Java应用实现更高效、稳定的性能。希望这些示例能帮助您在实际工作中更有效地进行JVM调优。本文已收录于,我的技术网站,有大厂完整面经,工作技术,架构师成长之路,等经验分享。

程序员Linc 1803

【JVM调优】如何进行JVM调优?一篇文章就够了!

深入解读JVM性能的监控、定位和调优方案,阐述jps/stat/jstack、MAT等常用性能分析工具的使用,提出JVM参数、内存溢出、内存泄漏、CPU飙升、GC频繁等实际场景下JVM调优的方案。

种一棵树最好的时间是十年前,其次是现在 4万+

JVM 17 的优化指南:如何进行JVM调优,JVM调优参数有哪些

这篇文章将详细介绍如何进行JVM 17调优,包括JVM 17调优参数及其应用。此外,我将提供12个实用的代码示例,每个示例都会结合和Java代码。本文已收录于,我的技术网站,有大厂完整,工作技术,架构师成长之路,等经验分享在Java开发中,JVM调优是提升应用性能的关键步骤。JVM 17作为最新的LTS版本,带来了许多新特性和改进。本文将详细介绍JVM 17的优化指南,包括如何进行JVM调优以及常见的JVM调优参数,并提供3个实用的代码示例。

程序员Linc 1702

jvm调优

一、jvm内存调优 主要的目的是减小GC的频率和Full GC的次数。 1.Full GC 会对整个堆进行整理,包括Young、Tenured和Perm。Full GC由于须要对整个堆进行回收,因此比较慢,所以应该尽量减小Full GC的次数。数组 2.致使Full GC的缘由缓存 1)年老代(Tenured)被写满服务器 调优时尽可能让对象在新生代GC时被回收、让对象在新生代多存活一段时间和不要建立过大的对象及数组避免直接在旧生代建立对象 。并发 2)持久代Pemanet Generation空间不

白大锅的博客,毕设WangLoveBai_999 12万+

JVM 性能调优

这确保了类与类之间的依赖关系一致性,避免因不同类加载器加载同一类的不同版本导致的兼容性问题,维护了程序运行的稳定性。属于应用程序自定义类,不在 JRE 核心类库中,启动类加载器和扩展类加载器均无法加载,最终由应用类加载器从 ClassPath 路径下找到对应的。全盘负责委托机制是双亲委派机制的延伸,指当一个类加载器加载某个类时,该类的所有依赖类也由同一个类加载器负责加载。,先将加载请求委托给父加载器(扩展类加载器 Extension ClassLoader),扩展类加载器再委托给启动类加载器。

_abab的专栏 2271

右腿驱动电路设计:从共模干扰原理到生物电采集实战

在生物电信号采集领域,共模干扰是影响测量精度的核心挑战之一,其本质源于环境电磁场通过容性耦合在人体表面产生的感应电流。根据欧姆定律,由于人体组织阻抗的不均衡性,共模电流会在不同测量点产生差异化的压降,从而转化为难以滤除的差分噪声。为解决这一问题,右腿驱动技术应运而生,它通过负反馈原理主动抵消干扰,显著提升系统的共模抑制比。该技术广泛应用于心电图、脑电图等医疗电子设备中,是确保微弱生理信号质量的关键环节。本文结合工程实践,深入剖析了右腿驱动电路中的仪表放大器选型、反馈环路稳定性设计以及PCB布局布线要点,为高

weixin_31476015的博客 440

JVM性能调优详解

前面我们学习了整个JVM系列,最终目标的不仅仅是了解JVM的基础知识,也是为了进行JVM性能调优做准备。这篇文章带领大家学习JVM性能调优的知识。 性能调优 性能调优包含多个层次,比如:架构调优、代码调优、JVM调优、数据库调优、操作系统调优等。 架构调优和代码调优是JVM调优的基础,其中架构调优是对系统影响最大的。 性能调优基本上按照以下步骤进行:明确优化目标、发现性能瓶颈、性能调优、通过监控及...

程序新视界 7705

【东华大学oj】找到最大数(一维数组->中等)

一天,老师布置了一个作业,要求对一串数字各不相同的数字串进行排序,大的在前,小的在后。接着,我从数字串中的第二个数字开始往后找,找到最大的一个,然后与第二个数字交换,这样的话我就能够确定排序后数字串中的第二个数字;明明研究发现,他的这个想法中最重要的一环就是在一串数字中找到最大的那个,然后与第一个数字交换,可是明明毕竟刚刚开始学习程序设计不久,无法写出较复杂的程序,所以明明想让你这位程序设计专家帮他的忙,帮助他把这段核心程序写出来,然后明明只需模仿着写就可以了。时间限制: 1S类别: 一维数组->中等。

的博客 523

JVM优化:如何进行JVM调优,JVM调优参数有哪些

Java虚拟机(JVM)是Java应用运行的核心环境。JVM的性能优化对于提高应用性能、减少资源消耗和提升系统稳定性至关重要。本文将深入探讨JVM的调优方法和相关参数,以帮助开发者和系统管理员有效地优化他们的Java应用。本文,已收录于,我的技术网站,有大厂完整面经,工作技术,架构师成长之路,等经验分享JVM调优通常涉及到对堆内存、垃圾回收策略和线程堆栈大小等方面的调整。优化的目标是确保JVM在执行Java应用时能够高效地使用系统资源。

架构师专栏 5070

centos-stream-9上安装nvidia驱动和cuda-toolkit

centos-stream-9上安装nvidia驱动和cuda-toolkit

qq_19072921的博客 3020

得物APP破解

本文介绍了得物App(版本4.74.5)的逆向破解过程,重点分析了绕过强制更新、抓包技巧以及破解newSign参数的详细方法。首先通过断网再联网的方式绕过强制更新,然后使用SocksDroid进行抓包分析,发现首页推荐接口需要newSign参数。通过反编译定位到RequestUtils.c方法,利用Frida进行Hook验证,最终解析出newSign的生成逻辑:将请求参数加入固定字段后排序拼接,再进行MD5加密生成签名。文中提供了完整的Hook脚本和签名算法分析,仅供学习移动安全技术参考。

m0_74653634的博客 3473

【JVM】JVM性能调优详解

前面我们学习了整个JVM系列,最终目标的不仅仅是了解JVM的基础知识,也是为了进行JVM性能调优做准备。这篇文章带领大家学习JVM性能调优的知识。

DreamSun的博客 5506

mjlab MuJoCo 人形机器人强化学习入门教程(一)安装配置使用

mjlab是融合IsaacLab API与MuJoCo物理引擎的强化学习工具,提供轻量级GPU加速仿真方案。当前处于测试阶段,支持Linux系统(推荐)和有限macOS支持。核心优势包括:1)直接集成MuJoCo Warp实现裸机性能;2)保留IsaacLab成熟的RL抽象层;3)简化安装流程。与IsaacLab相比更专注于MuJoCo生态,适合刚体机器人RL研究。文档包含详细安装指南、平台兼容性说明、与IsaacLab的API差异对比及常见问题解答。项目正在积极开发中,欢迎社区贡献和反馈。

2506_90492529的博客 1990

【JVM调优】如何进行JVM调优?就这一篇就够

调用System.gc():调用 System.gc() (用于请求 JVM 执行垃圾回收)时,JVM 会建议执行 Full GC(具体是否执行取决于垃圾回收器实现的System.gc()逻辑,例如Parallel GC、CMS等传统垃圾回收器该方法会Full GC,而G1、ZGC等现代回收器不会Full GC)。如果这些值呈上涨趋势,则说明该 Java 程序的老年代内存已使用量在不断上涨,这意味着无法回收的对象在不断增加,因此很有可能存在内存泄漏(不再使用的对象仍然被引用,导致GC无法回收)。

Edward的博客 1449

Cesium.Ray 知识详解,示例代码

Cesium.Ray 是 CesiumJS 中用于表示三维空间中无限射线的核心类,广泛应用于地理信息系统(GIS)、三维可视化和碰撞检测等场景。射线由起点(origin)和方向向量(direction)定义,数学表达式为 ( P(t) = \text{origin} + t \times \text{direction} )。核心属性包括起点和方向向量,常用方法包括射线与平面的交点计算、根据距离获取射线上的点等。在 Cesium 中,Cesium.Ray 常用于地形碰撞检测、鼠标点选对象和雷达探测模拟等场景

大剑师兰特的GIS世界 424

基于STM32+华为云IOT设计的云平台监控系统_102

本次设计结合现代生活的具体需求,设计出一套基于华为云IOT设计的云平台监控系统,可以远程实时查看家里光照强度、温湿度等信息,支持在云端控制家里的电器设备,实现远程控制。

7642

JVM 11 调优指南:如何进行JVM调优,JVM调优参数

JVM调优是通过调整Java虚拟机的配置参数来提升应用程序的性能和资源利用效率的过程。这包括调整堆内存大小、选择合适的垃圾收集器,以及调整其他性能相关的参数。合理的JVM调优可以显著提升应用的性能和稳定性。不过,请记得调优是一个持续的过程,需要根据应用的具体表现来不断调整和优化。本文已收录于,我的技术网站ddkk.com,有大厂完整面经,工作技术,架构师成长之路,等经验分享。

架构师专栏 2490

RNA-seq分析:Step8(富集分析)

RNA-seq富集分析是一种用于分析基因表达数据中特定基因或通路是否富集的分析方法。其基本思想是比较不同基因对应的转录本/基因之间的表达差异及其对应的基因注释信息,通过统计学方法评估差异的显著性,从而确定是否存在某些特定的功能通路或基因集合富集的情况。常用的RNA-seq富集分析工具包括GOseq、KEGG(KEGG enrichment analysis)、DAVID(Database for Annotation, Visualization and Integrated Discovery)等。这

沉香best的博客 3633

JVM调优及举例

参数功能-Xms和-Xmx设置初始和最大堆大小新生代与老年代的比例Eden区与Survivor区的比例启用G1垃圾收集器G1的最大GC暂停时间目标输出详细GC日志OOM时生成内存转储文件通过以上案例和参数配置,结合实际业务特点,可以针对性地优化JVM性能。需要注意的是,调优是一个持续的过程,应结合监控数据不断调整。Full GC频繁通常是内存管理的信号灯,分析GC日志和应用行为是定位问题的关键。根据具体场景调整堆内存、GC策略和代码逻辑,能有效降低Full GC的发生频率。

itsniu的博客 2593

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

【JVM实战】JVM参数调优

文章目录JVM参数调优一、调优基本概念二、常用JVM参数三、GC调优思路 JVM参数调优 一、调优基本概念 在调整性能时,JM有三个组件 堆大小调整 垃圾收集器调整 JIT编译器调整 大多数调优选项都与调整堆大小和选择的垃圾收集器有关。 同样,JIT编译器对性能也有很大影响,但是这个对程序员自身要求非常高。 通常,在调优Java应用程序时,重点是以下两个主要目标之一: 响应性:应用程序或系统...

明月沉江春雾晓 8216

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

JVM 调优

JVM 调优

骑牛小道士 2285

【JVM】调优案例

任何新的业务系统在上线以前都需要去估算服务器配置和JVM的内存参数,这个容量与资源规划并不仅仅是系统架构师的随意估算的,需要根据系统所在业务场景去估算,推断出来一个系统运行模型,评估JVM性能和GC频率等等指标。建模步骤:(1)对象创建速度计算业务系统每秒钟创建的对象会占用多大的内存空间,然后计算集群下的每个系统每秒的内存占用空间。(2)设置一个机器配置,估算新生代的空间比较不同新生代大小之下,多久触发一次MinorGC。(3)重估。

weixin_44823875的博客 3615
上一篇: 北川,挺住!中国,加油!
下一篇: 细节决定成败
javaRwx
博客等级 码龄20年 0粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值