深入理解Java虚拟机——JVM性能优化

【GESP】C++四级考试大纲知识点梳理, (10) 文件读写和重定向 其实,由于本人也是边学、边实验、边总结,且对考纲深度和广度的把握属于个人理解。因此本文更多的不是一个教程,而是个人知识梳理,如有遗漏、疏忽,欢迎指正、交流。孩子放假,出游一周,没有更新。刚刚归来,继续学习。GESP C++四级官方考试大纲中,共有11条考点,本文针对第10条考点进行分析介绍。(10)掌握文件操作中的重定向,实现文件读写操作,了解文本文件的分类,掌握写操作、读操作、读写操作。GESP C++四级官方考试大纲中,共有11条考点,本文针对第10条考点进行分析介绍。孩子放假,出游一周,没有更新。 阅读详情

一、性能监控

当开发或运行一个Java应用的时候,对JVM的性能进行监控是很重要的。配置JVM不是一次配置就万事大吉的,特别是你要应对的是Java服务器应用的情况。你必须持续的检查堆内存和非堆内存的分配和使用情况,线程数的创建情况和内存中加载的类的数据情况等。这些都是核心参数。

使用Anturis控制台,你可以为任何的硬件组件上运行的JVM配置监控(例如,在一台电脑上运行的一个Tomcat网页服务器)。

JVM监控可以使用以下衡量标准:

1、总内存使用情况(MB):即JVM使用的总内存。如果JVM使用了所有可用内存,这项指标可以衡量底层操作系统的整体性能。

2、堆内存使用(MB):即JVM为运行的Java应用所使用的对象分配的所有内存。不使用的对象通常会被垃圾回收器从堆中移除。所以,如果这个指数增大,表示你的应用没有把不使用的对象移除或者你需要更好的配置垃圾回收器的参数。

3、非堆内存的使用(MB):即为方法区和代码缓存分配的所有内存。方法区是用于存储被加载的类的引用,如果这些引用没有被适当的清理,永生代池会在每次应用被重新部署的时候都会增大,导致非堆的内存泄露。这个指标也可能指示了线程创建的泄露。

4、池内总内存(MB):即JVM所分配的所有变量内存池的内存和(即除了代码缓存区外的所有内存和)。这个指标能够让你明确你的应用在JVM过载前所能使用的总内存。

5、线程:即所有有效线程数。举个例子,在Tomcat服务器中每个请求都是一个独立的线程来处理,所以这个衡量指标可以表示当前有多少个请求数,是否影响到了后台低权限的线程的运行。

6、类:即所有被加载的类的总数。如果你的应用动态的创建很多类,这可能是内存泄露的一个原因。

二、性能优化

JVM是运行在一个独立的进程中的,但它可以并发执行多个线程,每个线程都运行自己的方法,这是Java必备的一个部分。以即时消息客户端这样一个应用为例,它至少运行两个线程。一个线程用于等待用户输入,另一个检查服务端是否有新的消息传输。再以服务端应用为例,有时一个请求可能要涉及多个线程并发执行,所以需要多线程来处理请求。

在JVM的进程中,所有的线程共享内存和其他可用的资源。每一个JVM进程在进入点(main方法)处都要启动一个主线程,其他线程都从主线程启动,成为执行过程中的一个独立部分。线程可以再不同的处理器上并行执行,同样也可以共享一个处理器,线程调度器负责处理多个线程共享一个处理器的情况。

很多应用(特别是服务端应用)会处理很多任务,需要并行运行。这些任务中有些是非常重要的,需要实时执行的。而另外一些是后台任务,可以在CPU空闲时执行。任务是在不同的线程中运行的。举例子来说,服务端可能有一些低优先级的线程,它们会根据一些数据来计算统计信息。同时也会启动一些高优先级的进程用于处理传入的数据,响应对这些统计信息的请求。这里可能有很多的源数据,很多来自客户端的数据请求,每个请求都会使服务端短暂的停止后台计算的线程以响应这个请求。所以,你必须监控在运行的线程数目并且保证有足够的CPU时间来执行必要的计算。

JVM的性能取决于其配置是否与应用的功能相匹配。尽管垃圾回收器和内存回收进程是自动管理内存的,但是你必须掌管它们的频率。通常来说,你的应用可使用的内存越多,那么这些会导致应用暂停的内存管理进程需要起作用的就越少。

如果垃圾回收发生的频率比你想的要多很多,那么可以在启动JVM的时候为其配置更大的最大堆大小值。堆被填满的时间越久,就越能降低垃圾回收发生的频率。最大堆大小值可以在启动JVM的时候,用-Xmx参数来设定。默认的最大堆大小是被设置为可用的操作系统内存的四分之一,或者最小1GB。

如果问题出在经常重新分配内存,那么你可以把初始化堆大小设置为和最大堆大小一样。这就意味着JVM永远不需要为堆重新分配内存。但这样做就会失去动态堆大小适配的优化,堆的大小从一开始就被固定下来。配置初始化对大小是在启动JVM,用-Xms来设定。默认初始化堆大小会被设定为操作系统可用的物理内存的六十四分之一,或者设置一个最小值。这个值是根据不同的平台来确定的。

如果你清楚是哪种垃圾回收(minor gc或major gc)导致了性能问题,可以在不改变整个堆大小的情况下设定新生代和老生代的大小比例。对于需要产生大量临时对象的应用,需要增大新生代的比例(当然,后果是减小了老生代的大小)。对于长生命周期对象较多的应用,则需增大老生代的比例(自然需要减少新生代的大小)。

以下几种方法可以用来设定新生代和老生代的大小:

1、在启动JVM时,使用-XX:NewRatio参数来具体指定新生代和老生代的大小比例。比如,如果想让老生代的大小是新生代的五倍,则设置参数为-XX:NewRatio=5,默认这个参数设定为2(即老生代占用堆空间的三分之二,新生代占用三分之一)。

2、在启动JVM时,直接使用-Xmn参数设定初始化和最大新生代大小,那么堆中的剩余大小即是老生代的大小。

3、在启动JVM时,直接使用-XX:NewSize和-XX:MaxNewSize参数设定初始化和最大新生代大小,那么堆中的剩余大小即是老生代的大小。

每一个线程都有一个栈,用于保存函数调用、返回地址等等,这些栈有着对应的内存分配。如果线程过多,就会导致OutOfMemory错误。即使你有足够的空间的堆来存放对象,你的应用也可能会因为创建一个新的线程而崩溃。这种情况下,需要考虑限制线程中的栈大小的最大值。线程栈大小可以在JVM启动的时候,通过-Xss参数来设置,默认这个值被设定为320KB至1024KB之间,这和平台相关。

内容参考《深入理解Java虚拟机:JVM高级特性与最佳实践》(第2版)周志明


转自:http://blog.youkuaiyun.com/SilenceOO/article/details/77883020

【保姆级教程/代码】使用PRIDE PPP-AR软件解算ZTD、反演GNSS PWV,并评估精度 在本算例中,我下载了BJFS站2024年的IGS ZTD产品,用于评估PRIDE PPP-AR软件解算出ZTD结果的精度。 阅读详情

相关推荐

Ollama模型路径迁移实战:Windows/Mac/Linux三平台保姆级教程(附常见问题排查)

本文提供了一份详细的Ollama模型路径迁移教程,涵盖Windows、macOS和Linux三大平台。通过设置OLLAMA_MODELS环境变量或创建符号链接,指导用户将模型从默认路径安全迁移至新位置,以释放系统盘空间或提升性能。教程包含迁移前的准备、分平台步骤、迁移后的验证以及常见问题排查,确保迁移过程平滑可靠。

js777的博客 1184

10 个免费的服务器监控工具

监控你的Web服务器或者Web主机运行是否正常与健康是非常重要的。你要确保用户始终可以打开你的网站并且网速不慢。服务器监控工具允许你收集和分析有关你的Web服务器的数据。 有许多非常好的服务器监控解决方案,而为了省去你寻找方案的麻烦,这里我为你列出了我能找到的最好的服务器监控工具。 1.Performance Co-Pilot Performance Co-Pilot,简称 PCP,是一个系统性...

huiqinbo的专栏 1249

薄膜比拟、开口截面扭转承载力以及风电混塔水平缝张开状态下抗扭承载力推导

风电混塔水平缝张开状态下的抗扭承载力推导,从弹性力学说起

George的博客 873

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

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

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

从硅片到时钟:揭秘SiTime MEMS谐振子的精密制造之旅

本文深入解析了SiTime MEMS谐振子的精密制造工艺,从硅晶圆的提纯到DRIE深硅刻蚀,再到真空封装技术,揭示了其如何克服传统石英晶振的局限。通过对比测试数据,展示了MEMS谐振子在精度、可靠性和生产效率上的显著优势,特别是在5G基站和汽车电子等领域的应用潜力。

weixin_42522953的博客 403

H3C ACL的应用与配置1

SWHC1-acl-ipv4-adv-3000]rule 30 permit ip source 192.168.50.252 0 destination 192.168.70.252 0 //设置一条ID为30的过滤,允许源地址为 192.168.50.252 访问目的地址为192.168.70.252 的设备。高级ACL范围3000-3999:对源IP,目地IP,协议,端口号进行过滤。[SWHC1]acl number 3000 //创建高级ACL 3000。

weixin_41120428的博客 2425

这几款比较好用的服务器监测软件你用过哪个

对于服务器的维护管理来说,我们肯定是需要用到的。一旦服务器或者里面的业务有故障问题可以及时的提醒。一般来说,服务器如果出现故障会通过监测软件推送信息,邮件或者是到微信等一些社交媒体中,然后我们运维人员就会通过监测的信息快速得到响应去解决服务器的问题。如果不用监测软件的话,我们可能当业务无法访问的时候才会发现问题。这样再处理可能就延误时机。

互联网那些事儿 2052

GB/T 27930-2023协议升级与CANoe仿真测试实践

本文深入解析GB/T 27930-2023协议的核心升级,包括A/B类系统分类与EVIN码引入,并详细指导如何使用CANoe搭建仿真测试环境、编写CAPL脚本及利用DLL库进行一致性验证与故障注入测试,助力开发人员确保电动汽车充电通信的合规性与稳定性。

y7z8a的博客 540

java之JVM调优

文章来源:https://blog.youkuaiyun.com/a2572371/article/details/78202874 一.根据Java虚拟机规范,JVM将内存划分为: 1.New(年轻代) 2.Tenured(年老代) 3.永久代(Perm)(备注:jdk1.8之后 改为元本地元空间) 其中,New和Tenured属于堆内存。-xmx:指定jvm堆内存最大值,-xms:jvm堆初...

感冒石头的博客 4030

从DC到DCG:手把手教你搭建物理感知综合流程(含DEF文件处理避坑指南)

本文详细介绍了从Design Compiler(DC)过渡到DC Topographical(DCT)和DC Graphical(DCG)的完整操作框架,特别针对DEF文件处理提供避坑方案。通过环境准备、工具升级、DEF文件处理、DCG综合配置等步骤,帮助开发者高效应对28nm以下工艺节点的物理感知综合挑战,显著提升时序收敛效率。

weixin_27966471的博客 380

ubuntu 20.04系统离线安装nfs

ubuntu环境下,离线安装nfs

m0_62464865的博客 2241

【JAVA】Java虚拟机性能优化实践

Java虚拟机是Java程序的运行环境,它将Java字节码转换为机器码并执行。Java虚拟机提供了自动内存管理、垃圾回收、线程管理等功能,使得Java程序具有跨平台性和高可靠性。Java虚拟机性能优化是Java程序开发中非常重要的一环。遵循优化原则,使用优化工具,针对实际问题进行优化,可以提高程序性能和可靠性。同时,Java虚拟机性能优化需要具备一定的专业知识和经验,建议在实践过程中多加思考和总结,不断提高自己的技术水平。

实践是检验真理的唯一标准 858

SAP_PP模块定额工艺路线简介

在 SAP PP(生产计划)模块中,定额工艺路线(Routing) 是生产制造流程中的核心主数据之一,用于定义制造一个产品所需的标准操作步骤。工艺路线详细描述了生产过程中的各个工序、使用的工作中心、标准作业时间、资源分配等信息,是进行生产计划、成本核算、排产控制、车间执行等功能的基础。

我小时候很黑的博客 765

《深入理解Java虚拟机JVM高级特性与性能优化实战解析》

主流的Java虚拟机采用的是可达性分析算法。垃圾收集器是内存回收的具体实现,HotSpot虚拟机提供了多种垃圾收集器,如Serial、ParNew、Parallel Scavenge、CMS、G1以及最新的ZGC和Shenandoah,每种收集器都有其特定的适用场景和优劣势,需要根据具体的应用需求和性能目标进行选择和调优。Java虚拟机栈也是线程私有的,其生命周期与线程相同,它描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。

kangzhijia的专栏 1680

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

《深入理解Java虚拟机JVM高级特性与性能优化(第3版)》核心技术解析与实践

现代垃圾收集器,如G1、ZGC和Shenandoah,采用了分代收集、并发标记和低延迟停顿等高级算法,通过精细划分内存区域和智能回收策略,有效平衡了吞吐量和响应时间。HotSpot虚拟机内置了C1、C2等多个即时编译器,通过热点代码探测、方法内联、逃逸分析、公共子表达式消除等技术,将高频执行的字节码动态编译优化为本地机器码,极大地提升了程序运行效率。JVM的类加载过程包括加载、验证、准备、解析和初始化五个阶段,其双亲委派模型保证了Java核心类库的安全性和稳定性。### 字节码执行与即时编译器。

liuyong_liu的博客 323

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

深入理解Java虚拟机JVM内存模型与性能优化实战指南

主流JVM均采用可达性分析算法,通过一系列称为“GC Roots”的对象作为起始点,向下搜索,所走过的路径称为引用链,当一个对象到GC Roots没有任何引用链相连时,则证明此对象是不可用的。现代商业虚拟机大多采用分代收集算法,其核心思想是根据对象存活周期的不同将内存划分为几块,一般是把Java堆分为新生代和老年代,然后根据各个年代的特点采用最适当的收集算法。Java堆是JVM所管理的内存中最大的一块,在虚拟机启动时创建,此内存区域的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存。

RussellFF的博客 705

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

《深入理解Java虚拟机JVM高级特性与性能优化》

Java虚拟机栈描述的是Java方法执行的内存模型,每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息,局部变量表存放了编译期可知的各种基本数据类型、对象引用和returnAddress类型。加载阶段虚拟机需要完成三件事情:通过一个类的全限定名来获取定义此类的二进制字节流、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构、在内存中生成一个代表这个类的java.lang.Class对象,作为方法区这个类的各种数据的访问入口。

zimskybo的专栏 364

深入理解Java虚拟机(JVM):从内存管理到性能优化

本文深入解析Java虚拟机(JVM)的核心架构与运行机制,重点探讨JVM的内存管理和性能优化策略。文章首先概述JVM的五大组成部分:类加载器、运行时数据区、执行引擎、本地方法接口和本地方法库。随后详细剖析内存管理机制,包括运行时数据区的具体结构、垃圾回收算法(标记清除、复制、标记整理等)以及分代收集策略。最后,文章提供JVM参数调优建议和常见性能问题排查方法,并附代码示例展示内存分配与GC过程。通过系统讲解JVM工作原理,帮助开发者编写高效稳定代码并解决性能瓶颈问题。

Java新手村的博客 1744

深入理解Java虚拟机JVM内存模型与性能优化实战

更深入的分析则需要使用内存转储工具,如jmap生成堆转储快照(Heap Dump),然后利用MAT或JProfiler等工具进行分析,找出持有大量内存的对象引用链,定位泄漏根源。线程共享区包括方法区(Method Area)和堆(Heap),而线程私有区则包括程序计数器(Program Counter Register)、Java虚拟机栈(Java Virtual Machine Stacks)和本地方法栈(Native Method Stacks)。随着技术的发展,JVM内存管理和垃圾回收也在不断演进。

SPM613110的博客 374

JVM性能优化-深入理解Java虚拟机:JVM高级特性与最佳实践

第一部分 走进Java 一、走进Java 1、概述   java广泛应用于嵌入式系统、移动终端、企业服务器、大型机等各种场合,摆脱了硬件平台的束缚,实现了“一次编写,到处运行”的理想 2、java技术体系结构   按照功能来划分 包括以下几个组成部分:Java程序设计语言,各种硬件平台的java虚拟机,Java API类库,来自商业机构和开源社区的第三方Java类库,Class文件格式 Java程序设计语言,java虚拟机,Java API类库统称为JDK,是用于支持java程序开发的最小环境

隔壁老瓦的专栏 1080

搞定JVM基本原理和面试题,看看这几本书妥妥够了!

点击蓝色“程序员书单”关注我哟 加个“星标”,每天带你读好书,看好文! 点击书籍图片即可查看对应思维导图! 在介绍本书单之前,我想先问一下各位读者,你们之前了解过JVM么,如果有了解过,那么了解的程度又如何呢。经过了10多年的发展,Java Web从开发框架到社区都已经非常成熟,很多程序员都可以通过使用框架很快速地搭建起一个Java Web应用,特别是近几年springboot大热,干脆连配置都不需要了解了,直接一键式编译部署运行,让Java工程师的学习成本变得越来越低。 但于此同时..

程序员书单 401

深入理解Java虚拟机(JVM)内存管理与性能优化实战指南

JVM内存管理与性能优化是一个需要理论与实践紧密结合的领域。开发者首先应深入理解JVM内存模型和GC原理,然后借助监控工具对应用进行持续观察和分析。调优并非一蹴而就,而是一个迭代的过程:设定性能目标、测试、监控、分析、调整参数、再测试。记住“没有最好的配置,只有最适合的配置”,最优的JVM参数组合高度依赖于具体的应用特性、硬件环境和性能要求。遵循编码最佳实践,如及时释放资源、避免创建不必要的对象、谨慎使用大型对象等,往往能从根本上减少性能问题的发生。

yr_lu的专栏 695
上一篇: 深入理解Java虚拟机——JVM、DVM(dalvik)和ART之间的区别
下一篇: android单元测试初探
class_brick
博客等级 码龄12年 223粉丝 76原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值