实力解决“疑难杂症”,Java性能调优JDK命令行工具

01_JVM与Java体系结构 你是否也遇到过这些问题?运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!想解决线上JVM GC问题,但却无从下手。新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就GG了。每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。大部分Java开发人员,除了会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。 阅读详情

JDK命令行工具

在JDK的开发包中,除了大家熟知的java.exe和javac.exe外,还有一系列辅助工具。这些辅助工具位于JDK安装目录下的bin目录中,可以帮助开发人员很好地解决Java应用程序的一些“疑难杂症”。图6.16显示了部分辅助工具。

乍看之下,虽然这些工具都是.exe的可执行文件,但事实上它们只是Java程序的一层包装,其真正的实现是在tools.jar中,如图6.17所示。

​

​

以jps工具为例,在控制台执行jps命令和 java-classpath%Java_HOME%/lib/tools.jarsun.tools.jps.Jps命令是等价的,即jps.exe只是这个命令的一层包装。

jps命令

jps命令类似于Linux下的ps,但它只用于列出Java的进程。直接运行jps命令不加任何参数,可以列出Java程序进程ID及Main函数短名称,例如:

​

从这个输出结果中可以看到,当前系统中共存在3个Java应用程序,其中第一个输出Jps就是jps命令本身,这也证明了此命令的本质是一个Java程序。此外,jps还提供了一系列参数来控制它的输出内容。

参数-q可以指定jps只输出进程ID,而不输出类的短名称,例如:

​

参数-m可以用于输出传递给Java进程(主函数)的参数,例如:

​

参数-l可以用于输出主函数的完整路径,例如:

​

参数-v可以显示传递给JVM的参数,例如:

​

注意:jps命令类似于ps命令,但是它只列出系统中所有的Java应用程序。通过jps命令可以方便地查看Java进程的启动类、传入参数和JVM参数等信息。

jstat命令

jstat是一个可用于观察Java应用程序运行信息的工具。它的功能非常强大,可以通过它查看堆信息的详细情况。其基本使用语法如下:

​

其中,选项option可以由以下值构成。

·-class:显示ClassLoader的相关信息。

·-compiler:显示JIT编译的相关信息。

·-gc:显示与GC操作相关的堆信息。

·-gccapacity:显示各个代的容量及使用情况。

·-gccause:显示垃圾收集的相关信息(同-gcutil),同时显示最后一次或当前正在发生的垃圾收集的诱发原因。

·-gcnew:显示新生代信息。

·-gcnewcapacity:显示新生代的大小与使用情况。

·-gcold:显示老年代和永久代的信息。

·-gcoldcapacity:显示老年代的大小。

·-gcpermcapacity:显示永久代的大小。

·-gcutil:显示垃圾收集信息。

·-printcompilation:输出JIT编译的方法信息。相关参数含义如下:

·-t:可以在输出信息前加上一个Timestamp列,显示程序的运行时间。

·-h:可以设定在周期性数据输出时,当输出多少行数据后跟着输出一个表头信息。

·interval:用于指定输出统计数据的周期,单位为ms。

·count:用于指定一共输出多少次数据。

如下示例输出Java进程2972的ClassLoader相关信息。每秒统计一次信息,一共输出2次。

在以上的输出结果中,Loaded表示载入类的数量,第1个Bytes表示载入类的合计大小,Unloaded表示卸载类的数量,第2个Bytes表示卸载类的大小,Time表示在加载类和卸载类上所花的时间。

下例显示了查看JIT编译的信息。

​

其中,Compiled表示编译任务执行的次数,Failed表示编译失败的次数,Invalid表示编译不可用的次数,Time表示编译的总耗时,FailedType表示最后一次编译失败的类型,FailedMethod表示最后一次编译失败的类名和方法名。

下例显示了与GC操作相关的堆信息输出结果。

​

其中,各列的信息含义如下:

·S0C:s0(from)的大小(KB)。

·S1C:s1(from)的大小(KB)。

·S0U:s0(from)已使用的空间(KB)。

·S1U:s1(from)已使用的空间(KB)。

·EC:eden区的大小(KB)。

·EU:eden区已使用的空间(KB)。

·OC:老年代的大小(KB)。

·OU:老年代已经使用的空间(KB)。

·PC:永久区的大小(KB)。

·PU:永久区已使用的空间(KB)。

·YGC:新生代GC操作次数。

·YGCT:新生代GC操作耗时。

·FGC:FullGC操作次数。

·FGCT:FullGC操作耗时。

·GCT:GC操作总耗时。

下例显示了各个代的信息,与-gc相比,它不仅输出了各个代的当前大小,也包含各个代的最大值和最小值。

​

其中部分列的信息含义如下:

·NGCMN:新生代最小值(KB)。

·NGCMX:新生代最大值(KB)。

·NGC:当前新生代大小(KB)。

·OGCMN:老年代最小值(KB)。

·OGCMX:老年代最大值(KB)。

·PGCMN:永久代最小值(KB)。

·PGCMX:永久代最大值(KB)。

下例显示了最近一次执行GC操作的原因及当前执行GC操作的原因。

​

其中部分列的信息含义如下:

·LGCC:上次执行GC操作的原因。

·GCC:当前执行GC操作的原因。

以上输出结果显示,最近一次执行GC操作是由于显式的System.gc()调用所引起的,当前时刻未执行GC操作。

-gcnew参数可以用于查看新生代的一些详细信息。

​

其中部分列的信息含义如下:

·TT:新生代对象晋升到老年代对象的年龄。

·MTT:新生代对象晋升到老年代对象的年龄最大值。

·DSS:所需的survivor区大小。

-gcnewcapacity参数可以详细地输出新生代各个区的大小信息。

​

其中部分列信息如下:

·S0CMX:s0区的最大值(KB)。

·S1CMX:s1区的最大值(KB)。

·ECMX:eden区的最大值(KB)。

-gcold参数用于展现老年代GC操作的概况。

​

-gcoldcapacity参数用于展现老年代的容量信息。

​

-gcpermcapacity参数用于展示永久区的使用情况。

​

-gcutil参数用于展示GC回收的相关信息。

​

其中部分列的信息如下:

·S0:s0区使用的百分比。

·S1:s1区使用的百分比。

·E:eden区使用的百分比。

·O:old区使用的百分比。

·P:永久区使用的百分比。

注意:jstat命令可以非常详细地查看Java应用程序的堆使用情况及GC操作情况。

jinfo命令

jinfo可以用来查看正在运行的Java应用程序的扩展参数,甚至支持在运行时修改部分参数。其基本语法如下:

​

其中,option可以为以下信息:

·-flag<name>:打印指定JVM的参数值。

·-flag[+|-]<name>:设置指定JVM参数的布尔值。

·-flag<name>=<value>:设置指定JVM参数的值。

在很多情况下,Java应用程序不会指定所有的JVM参数,此时,开发人员可能不知道某一个具体的JVM参数的默认值。在这种情况下,需要通过查找文档获取某个参数的默认值。这个查找过程可能是非常艰难的,但有了jinfo工具,开发人员可以很方便地找到JVM参数的当前值。

例如,下例显示了新生代对象晋升到老年代对象的最大年龄。在应用程序启动时并没有指定这个参数,但通过jinfo可以查看这个参数的当前数值。

​

下例显示了是否打印GC的详细信息。

​

除了查找参数的值,jinfo也支持修改部分参数的数值,当然这个修改能力是极其有限的。下例中通过调用jinfo对PrintGCDetails参数进行修改,jinfo可以在Java程序运行时关闭或者打开这个开关。

​

注意:jinfo不仅可以查看运行时某一个JVM参数的实际取值,甚至可以在运行时修改部分参数,并使之立即生效。

jmap命令

jmap命令可以生成Java应用程序的堆快照和对象的统计信息。

下例使用jmap命令生成PID为2972的Java程序的对象统计信息,并输出到s.txt文件中。

​

可以看到,这个输出结果显示了内存中的实例数量和合计。

jmap命令的另一个更为重要的功能是得到Java程序的当前堆快照,例如执行以下命令:

​

本例中,将应用程序的堆快照输出到C盘的heap.bin文件中。之后,便可以通过多种工具分析该文件,例如6.3.5节中将要介绍的jhat工具。这里使用VisualVM工具打开这个快照文件,如图6.18所示。

注意:jmap命令可用于导出Java应用程序的堆快照。

​

jhat命令

使用jhat命令可以分析Java应用程序的堆快照内容。这里分析6.3.4节中使用jmap命令生成的堆文件heap.hprof,如下:

​

jhat在分析完成后,使用HTTP服务器展示其分析结果。在浏览器中访问http://127.0.0.1:7000,结果如图6.19所示。

​

在默认页中,jhat服务器显示了所有的非平台类信息。单击链接进入,可以查看选中类的超类、ClassLoader及该类的实例等信息。此外,在页面的底部,jhat还为开发人员提供了其他查询方式,如图6.20所示。

​

通过这些链接,开发者可以进一步查看所有类的信息(包括Java平台的类)、所有类的实例数量及实例的具体信息。最后,还有一个链接指向OQL查询界面。

图6.21显示了在jhat中查看Java应用程序中java.lang.String类的实例数量。

​

单击instances链接可以进一步查看String对象的实例,如图6.22所示。

​

通常,导出的堆快照信息非常多,因此可能很难通过页面上简单的链接索引找到想要的信息。为此,jhat还支持使用OQL语句对堆快照进行查询。执行OQL语句的界面非常简洁,如图6.23所示。例如,使用OQL查询出当前Java程序中所有java.io.File对象的路径,则OQL语句如下:

​

jhat的OQL语句与VisualVM的OQL非常接近,有兴趣的读者可以查阅本书中的相关章节。

注意:jhat命令可以对堆快照文件进行分析,它启动一个HTTP服务器,开发人员可以通过浏览器浏览Java堆快照。

​

jstack命令

jstack命令可用于导出Java应用程序的线程堆栈。其语法如下:

其中,-l选项用于打印锁的附加信息。

jstack工具会在控制台输出程序中所有的锁信息,并可以使用重定向将输出结果保存到文件中。例如:

下例演示了一个简单的死锁,两个线程分别占用south锁和north锁,并同时请求对方占用的锁,导致死锁发生。

​

使用jstack工具打印上例的输出结果,部分结果如下:

​

从jstack工具的输出结果中可以很容易地找到发生死锁的两个线程及死锁线程的持有对象和等待对象,从而帮助开发人员解决死锁问题。

注意:通过jstack工具不仅可以得到线程堆栈,还可以自动进行死锁检查,并输出找到的死锁信息。

jstatd命令

在本节之前所述的工具中,只涉及监控本机的Java应用程序,而在这些工具中,一些监控工具也支持对远程计算机的监控(如jps、jstat)。为了启用远程监控,则需要配合使用jstatd命令。

jstatd命令是一个RMI服务端程序,它的作用相当于代理服务器,建立本地计算机与远程监控工具的通信。jstatd服务器将本地的Java应用程序信息传递到远程计算机上,如图6.24所示。

直接打开jstatd服务器可能会抛出拒绝访问的异常:

​

这是由于jstatd程序没有足够的权限所致。可以使用Java的安全策略,为其分配相应的权限。下面的代码为jstatd分配了最大的权限,并将其保存在jstatd.all.policy文件中。

​

使用以下命令再次开启jstatd服务器:

​

这样,服务器开启成功。

注意:-J参数是一个公共参数,如jps和jstat等命令都可以接受这个参数。由于jps和jstat命令本身也是Java应用程序,-J参数可以为jps等命令本身设置其JVM参数。

默认情况下,jstatd将在1099端口开启RMI服务器。

以上命令行显示,本机的1099端口处于监听状态,相关进程号是3656。使用jsp命令查看3656进程正是jstatd,说明jstatd启动成功。

下面使用jps显示远程计算机的Java进程,执行命令如下:

​

使用jstat显示远程进程460的GC操作情况,执行命令如下:

​

hprof工具

与前文中介绍的监控工具不同,hprof不是独立的监控工具,它只是一个Javaagent工具,可以用于监控Java应用程序在运行时的CPU信息和堆信息。使用java-agentlib:hprof=help命令可以查看hprof的帮助文档。下面是hprof工具帮助信息的输出结果,加粗部分是常用的参数。

​

使用hprof工具可以查看程序中各个函数的CPU占用时间。以下代码包含3个方法,分别占用不同的CPU时间。

​

使用参数-agentlib:hprof=cpu=times,interval=10运行以上代码。times选项将会在Java函数的调用前后记录函数的执行时间,进而计算函数的执行时间。程序运行的部分输出结果如下:

​

可以很容易地看到运行时间最长的函数。

使用参数-agentlib:hprof=heap=dump,format=b,file=c:\core.hprof运行程序,可以将应用程序的堆快照保存在指定文件c:\core.hprof中。使用MAT或者VisualVM等工具可以分析这个堆文件。

使用参数-agentlib:hprof=heap=sites运行程序,可以输出Java应用程序中各个类所占的内存百分比。部分输出结果如下:

​添加图片注释,不超过 140 字(可选)

注意:使用hprof工具可以监控Java应用程序各个函数的运行时间,或导出程序的堆快照。

jcmd命令

在JDK7之后,JDK新增了一个命令行工具jcmd。不同于之前的命令行工具,jcmd是一个多功能工具,它几乎包括之前介绍的所有命令的功能。

如下命令类似于jps,列出当前正在运行的Java程序。

​

下面的命令显示了给定程序的启动时间。

​

不同于之前的命令行工具,jcmd的使用更加友好,它不仅支持pid作为输入,也可以使用主程序类名作为其输入,例如:

​

它足够“聪明”,甚至可以只写类的短名称,例如:

还可以通过jcmd很轻松地打印线程堆栈(类似于jstack),例如:

​

也可以通过jcmd打印类的柱状图信息(类似于jmap-histo),例如:

​

同样支持dump整个堆数据,例如:

​

上述命令会将整个堆信息转存到D:\d.dump文件中。

还可以查看进程启动时的虚拟机参数,例如:

​

JVM调优工具详解 这个因为之前已经大概知道Young GC的频率,假设是每5分钟一次,那么可以执行命令 jstat -gc pid 300000 10 ,观察每次结果eden,survivor和老年代使用的变化情况,在每次gc后eden区使用一般会大幅减少,survivor和老年代都有可能增长,这些增长的对象就是每次Young GC后存活的对象,同时还可以看出每次Young GC后进去老年代大概多少对象,从而可以推算出老年代对象增长速率。尽量减少Full GC的频率,避免频繁Full GC对JVM性能的影响。 阅读详情

相关推荐

关于RT-Thread中PWM无法正常输出的学习

按照官方的PWM配置,并没有输出PWM,网上有比较多的办法,试了很多,有些还是不能实现输出,这里做个记录。记录自己完成PWM输出的过程,以及修改的地方。 关于STM32CubeMX配置就不多说了,网上有很多。 首先必定是按照流程来,一定一定按照流程来!!! 需要注意的是加上通道数!!!! 这是流程上没有的,也是RTT的一点小BUG吧 配上board.c中添加的代码,我用的是PA2定时2的通道3,需要使用的朋友修改对应定时器和GPIO! void HAL_TIM_Base_MspInit(TIM_Han

weixin_42566346的博客 3556

干货:JVM操作篇

JVM操作篇内存溢出栈溢出堆溢出直接内存方法区溢出内存泄漏长生命周期的对象持有短生命周期对象的引用连接未关闭 内存溢出 内存溢出的原因:程序在申请内存时,没有足够的内存空间 栈溢出 方法死循环递归调用(StackOverflowError)、不断建立线程(OutOfMemoryError) 堆溢出 不断创建对象,分配对象大于最大堆的大小(OutOfMemoryError:Java heap spa...

日有寸进 759

STM32CubeMX+FreeRTOS+CAN总线+传感器实战:多任务系统与通信融合开发详解

本文详细介绍了基于STM32CubeMX和FreeRTOS的CAN总线与光电传感器融合开发实战。通过多任务系统设计,实现传感器数据采集与CAN通信的协同工作,提供完整的配置例程和调试技巧,适用于工业控制与机器人感知等应用场景。

n2o3p4的博客 735

用实力诠释细节“Java性能调优六大工具”之JDK命令行工具

JDK命令行工具 在JDK的开发包中,除了大家熟知的java.exe和javac.exe外,还有一系列辅助工具。这些辅助工具位于JDK安装目录下的bin目录中,可以帮助开发人员很好地解决Java应用程序的一些“疑难杂症”。图6.16显示了部分辅助工具。 乍看之下,虽然这些工具都是.exe的可执行文件,但事实上它们只是Java程序的一层包装,其真正的实现是在tools.jar中,如图6.17所示。 以jps工具为例,在控制台执行jps命令和 java-classpath%Java_HOM

m0_63256311的博客 729

基于Cesium的北斗卫星轨道实时可视化系统开发实践

本文详细介绍了基于Cesium的北斗卫星轨道实时可视化系统开发实践,涵盖系统架构设计、轨道计算实现、后端服务开发及前端可视化实现等关键环节。通过优化算法和数据流设计,系统实现了厘米级精度的卫星轨道实时渲染,适用于导航卫星系统的科研与工程应用。

j7k8l的博客 521

CATIA二次开发实战:我用VBA写了个BOM表自动导出工具,效率提升80%

本文详细介绍了如何利用VBA进行CATIA二次开发,构建BOM表自动导出工具的全过程。通过智能解析算法、异常处理机制和性能优化技巧,该工具将BOM表生成时间从2.5小时缩短至8分钟,效率提升80%。文章还探讨了与PDM系统集成和定制化报告生成等扩展应用,为机械设计工程师提供了实用的自动化解决方案。

weixin_33709590的博客 558

常见jvm内存溢出典型案例

-agentlib:hprof=heap=dump,format=b,file=C:\Users\sxp\Desktop\heapDump1.hprof jvm生成快照文件 1吞吐量优先收集器在硬件提升的情况下由于大对象在更大堆中的频繁 FULL GC导致的性能下降问题 解决方案 a)更换64位JDK等增大堆容量的操作,评估FULL GC时间

weixin_38492591的博客 709

手把手教你用ArduPilot搭建低成本无人车(附APM飞控+有刷电调配置清单)

本文提供了一份基于ArduPilot开源平台搭建低成本智能无人车的详细实战指南。核心内容包括APM架构飞控的选型、双向有刷电调的兼容性配置与校准、系统连接逻辑,以及通过Mission Planner地面站进行参数调校和自主导航功能设置的完整流程,帮助爱好者快速实现从手动控制到自主行驶的跨越。

java5的博客 851

一些常用的JDK附带工具

    在JDK的安用装目录bin下,有一些有非常实用的小工具,可用于分析JVM初始配置、内存溢出、内存泄漏、硬件资源异常等问题,我们接下来将对些常用的工具进行一些说明。默认的执行这些命令的时候都是要进入到其所在目录下,例:/usr/jdk1.6.0_45/bin   1.jps       通过jps工具我们可以知道当前正在运行的Java进程,以及这些进程初始化的参数配置。命令如下:./jp...

小楠哥的博客 2398

非凸问题的求解方法以及连续凸逼近SCA(Successive Convex Approximation)方法

非凸问题的求解方法 针对形如下式的函数: min⁡x∈XV(x)=F(x)+G(x)\min\limits_{{\bf{x}}\in X} V(x)=F(x)+G(x)x∈Xmin​V(x)=F(x)+G(x); 其中F为光滑的(不一定convex),G是convex的但是可能不可微,且存在:对于n维实矢量空间,有X=X1×...×XNX=X_1 \times...\times X_NX=X1​×...×XN​; x=(x1,...,xN)\bf{x} =(x_1,...,x_N)x=(x1​,...,xN

weixin_44535200的博客 2万+

基于Playwright和反爬虫规避技术的雪球股票讨论数据采集方案

随着量化投资和社交投资的兴起,雪球作为中国领先的投资社交平台,其用户讨论数据成为研究市场情绪的重要来源。本文将详细介绍如何使用最新的Playwright技术和反爬虫规避策略,构建一个高效、稳定的雪球股票讨论爬虫系统。本文详细介绍了基于Playwright的雪球股票讨论爬虫实现方案,涵盖了从基础配置到高级反爬虫策略的各个方面。AI驱动的反爬虫对抗更智能的请求调度算法区块链技术在数据溯源中的应用联邦学习在数据采集中的运用。

2201_76125261的博客 1012

Java项目中遇到的疑难杂症(不断进行更新)

Java 1.启动Jboss时出现的问题 出错信息: java.net.BindException: Address already in use: JVM_Bind:80 at org.apache.tomcat.util.net.PoolTcpEndpoint.initEndpoint(PoolTcpEndpoint.java:302) at org.apache.coyote.http11.Http11Protocol.init(Http11Protocol.java:184) … 原因:80端口被占

qq_41523445的博客 1662

Allegro172版本DFM功能介绍

Allegro172版本提供了实时DFM检查的功能,让违反要求的地方实时以DRC的形式报出来,让加工不可加工因素在设计的时候同步避免。打开Constraint,选择Manufacturing, 所有DFM相关DRC都在这。把所有下面DRC开关(DFM,DFA,DFT)都选择on,选择OK。这个规则和物理和间距规则等等都没有关系,单独的一个加工规则。这些DRC大部分是正常的,正常的可以去修改规则来消除。等待DRC刷新,板子上会出现很多DRC,类似下图。下面介绍如何调用和产生DFM规则。一直往下点击next。

weixin_54787054的博客 1341

JVM系列-第1章-JVM与Java体系结构

文章目录第1章-JVM和Java体系架构前言开发人员如何看待上层框架架构师每天都在思考什么?我们为什么要学习JVMJava VS C++什么人需要学JVM?推荐及参考书籍TIOBE排行榜Java生态圈Java-跨平台的语言JVM-跨语言的平台多语言混合编程如何真正搞懂JVM?Java发展重大事件Open JDK和Oracle JDK虚拟机虚拟机概念Java虚拟机JVM的位置JVM的整体结构Java代码执行流程JVM的架构模型基于栈的指令集架构基于寄存器的指令级架构两种架构的举例JVM架构总结JVM的生命周期

youthlql的博客 2798

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

牛皮了!头一次见有大佬把「JVM和Java体系架构」详解得如此清晰明了

JVM和Java体系架构前言开发人员如何看待上层框架架构师每天都在思考什么?我们为什么要学习JVMJava VS C++什么人需要学JVM?[【获取资源】](https://jq.qq.com/?_wv=1027&k=bjrwsgLP)推荐及参考书籍TIOBE排行榜Java生态圈Java-跨平台的语言JVM-跨语言的平台多语言混合编程如何真正搞懂JVM?Java发展重大事件Open JDK和Oracle JDK虚拟机虚拟机概念[【获取资源】](https://jq.qq.com/?_wv=1027&

Emmliy的博客 358

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

第1章-JVM与Java体系结构

你是否也遇到过这些问题?运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!想解决线上JVM GC问题,但却无从下手。新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了。每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。大部分Java开发人员,除了会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。

xiejunxing的专栏 554

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

JVM和Java体系架构

前言 你是否也遇到过这些问题? 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM!想解决线上JVM GC问题,但却无从下手。新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了。每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。 大部分Java开发人员,除了会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的核心Java虚拟机了解甚少。 开发人员如何看待上.

阳神 615

【JVM系列】-第1章-JVM与Java体系结构

文章摘要 本文是JVM系列的第1章,主要介绍了JVM与Java体系结构。文章首先指出大多数Java开发者对JVM了解不足的问题,强调了学习JVM的重要性,包括面试需求、性能调优和架构设计等方面。通过对比Java与C++的内存管理方式,突出了JVM的优势。文章还推荐了相关学习资料,分析了Java的跨平台特性和JVM的跨语言能力,指出JVM正在向"多语言虚拟机"发展。最后回顾了Java发展的重大事件,展示了Java生态的演变历程。本文适合有一定经验的Java开发人员、架构师和系统调优人员阅读

金哥的博客 743

JVM-01-JVM与Java体系结构

JVM与Java体系结构

迷雾总会解 586

JVM- 第一章-JVM与Java体系结构(前言介绍)

作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题?● 运行着的线上系统突然卡死,系统无法访问,甚至直接OOM● 想解决线上JVM GC问题,但却无从下手● 新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了● 每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。

沉淀所学,分享所思,让热爱与成长同行。商务记录AI实战经验,助力开发者快速成长。 热爱AI,希望做出有影响力的技术成果。 技术点亮生活,分享连接价值与机会。 专注AI落地实战,陪你走好技术每一步。 641

JVM命令之 jstat:查看JVM统计信息

其中vmid是进程id号,也就是jps之后看到的前面的号码,如下: option参数 -gc 新生代相关 S0C是第一个幸存者区的大小(字节) S1C是第二个幸存者区的大小(字节) S0U是第一个幸存者区已使用的大小(字节) S1U是第二个幸存者区已使用的大小(字节) EC是Eden空间的大小(字节) EU是Eden空间已使用大小(字节) 老年代相关 OC是老年代的大小(字节) OU是老年代已使用的大小(字节) 方法区(元空间)相关 MC是方法区的大小 MU是方法区已使用的大小 CCSC是压缩类空间的大小

张俊杰 的博客 2334

JVM笔记(一)初识JDK调优相关命令及可视化监控工具

目录 jvisualvm 安装GC监控插件:Visual GC 监控远程linux服务器java应用 Visual GC界面初识 jvisualvm 目录:$JAVA_HOME/bin下jvisualvm.exe 打开后界面如下,选择要监控的程序进程,能看到jvm参数、线程执行情况、CPU和堆内存使用情况等,如果需要查看堆详细情况和gc情况需要另外安装插件 安装GC监控插件:Visual GC 安装步骤: 1、打开jvisualvm,工具--》插件--》可用插件,勾选Vis.

xyjy11的博客 406

JDK自带调优命令详解

这些命令是JDK自带的调优和性能分析工具,可以帮助开发人员定位和解决Java应用程序的性能问题。它们可以在不使用任何第三方工具的情况下,快速获取Java虚拟机的状态信息和线程堆栈信息,帮助开发人员进行性能优化和故障排查。这里我会为您详细解释JDK自带的一些常用调优命令:Jstat、Jinfo、Jmap、Jhat和Jstack。这些命令在Java虚拟机(JVM)的调优和性能分析中非常有用。

kankan_s的专栏 288
上一篇: 简短精悍,千字解答Java性能调优JConsole工具
下一篇: 功能强大、多合一,Java性能调优VisualVM多合一工具
Java_LingFeng
博客等级 码龄4年 505粉丝 259原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值