
JVM
文章平均质量分 93
jvm
@程序员小袁
你说 然后呢 憋说话,让我静静
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
class 文件分析
Java 是跨平台的,JVM 作为中间层,自然要针对不同的操作系统提供不同的实现。通过不同操作系统的 JVM,源代码就可以不用根据不同的操作系统编译成不同的二进制可执行文件了,跨平台的目标也就实现了。那这个 class 文件到底是什么玩意呢?它是怎么被 JVM 识别的呢?编写一段简单的 Java 代码,文件名为 Hello.java。点击编译按钮后,IDEA 会自动生成一个名为 Hello.class 的文件,在的对应包目录下。原创 2024-10-10 09:20:37 · 791 阅读 · 0 评论 -
Java 8 的内存结构
由于java是一门高级语言,离硬件底层比较远,有时候无法操作底层的资源,于是,java添加了native关键字,被native关键字修饰的方法可以用其他语言重写,这样,就可以写一个本地方法,然后用C语言重写,这样来操作底层资源。当然,使用了native方法会导致系统的可移植性不高,这是需要注意的。int a=1;//这个1便是字面量//iloveu便是字面量。原创 2024-10-10 09:19:37 · 703 阅读 · 0 评论 -
小巧简单的JAVA字节码开源编辑器
jclasslib,可以理解他是一个工具,用于查询已编译成JAVA类的各种文件的实际内容,也可以通过jclasslib直接进行这些类文件的编写,jclasslib自带一个库,可以方便用户快速读写编辑类文件。引入JAVA类后,可以看到其,一般信息、常量池、接口、字段、方法、属性,并且可以分别进行查阅。jclasslib 可以切换中文、英文、波兰文、德文,并且可以自动识别系统当前使用语言;jclasslib,同时可以支持linux、mac、windows、unix多个平台。原创 2024-10-09 09:10:15 · 290 阅读 · 0 评论 -
为什么用元空间替换永久代
首先需要明确的是,以下讨论的HotSpot虚拟机,其他类型的虚拟机,例如JRockit与J9等,压根就没有永久代的概念。因此,下面所说的“虚拟机”都是HotSpot版本的。要想理解这种变化的原因,需要先理解方法区、永久代与元空间的概念与之间的关系。原创 2024-10-09 09:09:41 · 2024 阅读 · 0 评论 -
Java内存区域
Java内存区域。原创 2024-10-07 08:41:55 · 777 阅读 · 0 评论 -
JVM 内存布局
我们先来说堆。堆是 OOM 故障最主要的发生区域。它是内存区域中最大的一块区域,被所有线程共享,存储着几乎所有的实例对象、数组。所有的对象实例以及数组都要在堆上分配,但是随着 JIT 编译器的发展与逃逸分析技术逐渐成熟,栈上分配、标量替换优化技术将会导致一些微妙的变化发生,所有的对象都分配在堆上也渐渐变得不是那么“绝对”了。Java 堆是垃圾收集器管理的主要区域,因此很多时候也被称做“GC 堆”。从内存回收的角度来看,由于现在收集器基本都采用分代收集算法,所以 Java 堆中还可以细分为:新生代和老年代。原创 2024-10-07 08:41:26 · 1112 阅读 · 0 评论 -
Java类的生命周期浅析
简单一句话概括,类的加载阶段就是:找到需要加载的类并把类的信息加载到jvm的方法区中,然后在堆区中实例化一个java.lang.Class对象,作为方法区中这个类的信息的入口。那简单来说,java类被jvm进行加载到卸载的过程,就是java类的一生,称之为java类的生命的周期。jvm对类的加载时机没有明确规范,但对类的初始化时机有:只有当类被直接引用的时候,才会触发类的初始化。区别于对象的初始化,类的初始化所做的一起都是基于类变量或类语句的,也就是说执行的都是共性的抽象信息。类就是对象实例的抽象。原创 2024-10-06 12:39:52 · 852 阅读 · 0 评论 -
深入理解 Java 对象的内存布局
介绍了 Java 对象在 JVM 中的内存布局,整体可以分为:对象头、实例数据、对齐填充三个部分。第一部分的对象头包括了对象运行时数据和类型指针。其中对象运行时数据包括:哈希码、GC 分代年龄、锁状态标志等,类型指针指向对象类型元数据,确定对象是哪个类的实例。第二部分是实例数据,是真正存储的有效信息,包括各个类型的字段。第三部分是对齐填充,因为 JVM 要求对象起始地址必须是 8 字节的整数倍,所以必须有对齐填充来占位。原创 2024-10-06 11:15:36 · 843 阅读 · 0 评论 -
JVM 内存区域划分
在谈 JVM 内存区域划分之前,先来看一下 Java 程序的具体执行过程,画了一幅图。Java 源代码文件经过编译器编译后生成字节码文件,然后交给 JVM 的类加载器,加载完毕后,交给执行引擎执行。在整个执行的过程中,JVM 会用一块空间来存储程序执行期间需要用到的数据,这块空间一般被称为运行时数据区,也就是常说的 JVM 内存。所以,在谈 JVM 内存区域划分的时候,其实谈的就是这块空间——运行时数据区。了解官方出品的《Java 虚拟机规范》规范可以更方便地深入地理解 JVM。原创 2024-10-05 09:48:56 · 637 阅读 · 0 评论 -
6 个 Java 工具,轻松分析定位 JVM 问题
其中,S0 表示 Survivor0 区占用百分比,S1 表示 Survivor1 区占用百分比,E 表示 Eden 区占用百分比,O 表示老年代占用百分比,M 表示元数据区占用百分比,YGC 表示年轻代回收次数,YGCT 表示年轻代回收耗时,FGC 表示老年代回收次数,FGCT 表示老年代回收耗时。jstat 定时输出的特性,可以方便持续观察程序的各项指标。同样,如果没有条件使用图形界面(毕竟在 Linux 服务器上,主要使用命令行工具),又希望看到 GC 趋势的话,可以使用 jstat 工具。原创 2024-10-04 11:16:09 · 773 阅读 · 0 评论 -
强大的JVM监控工具
在生产环境中,经常会遇到各种各样奇葩的性能问题,所以掌握最基本的JVM命令行监控工具还是很有必要的名称主要作用jps查看正在运行的Java进程jstack打印线程快照jmap导出堆内存映像文件jstat查看jvm统计信息jinfo实时查看和修改jvm配置参数jhat用于分析heapdump文件。原创 2024-10-03 08:29:32 · 1211 阅读 · 0 评论 -
Java的栈帧和动态链接是什么?
在 Java 的面试过程中,不可避免的一个面试题那就是 JVM,而 JVM 的面试题中,有各种,比如在堆中会被问到的关于垃圾回收机制的相关问题,在栈中会被问到入栈以及出栈的过程,来聊一下关于栈的相关问题,比如,栈帧和动态链接指的是什么?总的来说,符号引用转为直接引用是Java类加载过程中解析阶段的一个重要步骤,它确保了符号引用能够被正确地解析为内存中的直接引用,从而实现Java程序的正常运行。:指向运行时常量池的方法引用,使得方法中的符号引用在运行时可以直接定位到引用的目标,比如某个类的成员或者方法。原创 2024-10-01 09:20:38 · 988 阅读 · 0 评论 -
JDK 内置实用工具:监视、故障排除
Javacore,也可以称为“threaddump”或是“javadump”,它是 Java 提供的一种诊断特性,能够提供一份可读的当前运行的 JVM 中线程使用情况的快照。即在某个特定时刻,JVM 中有哪些线程在运行,每个线程执行到哪一个类,哪一个方法。应用程序如果出现不可恢复的错误或是内存泄露,就会自动触发 Javacore 的生成。原创 2024-09-29 17:34:46 · 1251 阅读 · 0 评论 -
JVM相关的命令汇总
虽然目前市场上有很多成熟的 JVM 可视化监控分析工具,但是所有的工具其实都依赖于 JDK 的接口和底层相关的命令,了解这些命令的使用对于在紧急情况下排查 JVM 相关的线上故障,会有更加直观的帮助。下面一起来看看 JVM 常用的命令有哪些。原创 2024-09-29 17:30:02 · 1687 阅读 · 0 评论 -
九大 Java 性能优化工具
JProfiler集CPU、内存和线程性能分析于一体,可以用于分析性能瓶颈、内存泄漏、CPU负载和解决线程相关的问题,并且支持本地性能分析(分析与JProfiler软件安装在同一台机的应用)和远程性能分析(它可以分析远程没有安装JProfiler机器上的应用),这一点对开发人员非常有用。生成的数据可以由JDK工具生成和读取,多个Java程序的所有数据和信息都可以很方便地进行查看,包括本地和远程的运行程序。它更适合作为一个分析Java堆栈和计算大小的工具集,也可以用于监测内存泄漏和反模式带来的内存损耗。原创 2024-09-28 21:18:44 · 1061 阅读 · 0 评论 -
Java面试题之JVM之垃圾回收
Serial收集器:单线程的收集器,收集垃圾时,必须stop the world,使用复制算法。ParNew收集器:Serial收集器的多线程版本,也需要stop the world,复制算法。Parallel Scavenge收集器:新生代收集器,复制算法的收集器,并发的多线程收集器,目标是达到一个可控的吞吐量。如果虚拟机总共运行100分钟,其中垃圾花掉1分钟,吞吐量就是99%。Serial Old收集器:是Serial收集器的老年代版本,单线程收集器,使用标记整理算法。原创 2024-09-27 09:09:56 · 706 阅读 · 0 评论 -
Java面试之JVM之内存模型
类的加载是指把类的.class文件中的数据读入到内存中,通常是创建一个字节数组读入.class文件,然后产生与所加载类对应的Class对象。Survivor的存在意义,就是减少被送到老年代的对象,进而减少Full GC的发生,Survivor的预筛选保证,只有经历16次Minor GC还能在新生代中存活的对象,才会被送到老年代。JVM中类的装载是由类加载器(ClassLoader)和它的子类来实现的,Java中的类加载器是一个重要的Java运行时系统组件,它负责在运行时查找和装入类文件中的类。原创 2024-09-27 09:09:11 · 659 阅读 · 0 评论 -
Java面试题之JVM面试题
当引用失效时,计数器的值就会减一;并发标记的过程中,可能会有错标或者漏标的情况,此时就需要在重新标记一下,最后是并发清除阶段,清理掉标记阶段中判断已经死亡的对象。虽然 Serial 有 STW 这种显而易见的缺点,不过,从其他角度来看,Serial 还是很讨喜的,它还有着优于其他收集器的地方,那就是简单而高效,对于内存资源首先的环境,它是所有收集器中额外内存消耗最小的,对于单核处理器或者处理器核心较少的环境来说,Serial 收集器由于没有线程交互开销,所以 Serial 专心做垃圾回收效率比较高。原创 2024-09-26 21:20:15 · 1554 阅读 · 0 评论 -
Java面试题之JVM20问
1、说说 JVM 内存区域这张图就是一个 JVM 运行时数据图,「紫色区域代表是线程共享的区域」,JAVA 程序在运行的过程中会把他管理的内存划分为若干个不同的数据区域,「每一块儿的数据区域所负责的功能都是不同的,他们也有不同的创建时间和销毁时间」。「1.程序计数器」程序计数器是「程序控制流的指示器,循环,跳转,异常处理,线程的恢复等工作都需要依赖程序计数器去完成」。程序计数器是「线程私有」的,它的「生命周期是和线程保持一致」原创 2024-09-26 21:19:33 · 1205 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-01-JVM与Java体系结构
作为 Java 工程师的你曾被伤害过吗?你是否也遇到过这些问题?运行着的线上系统突然卡死,系统无法访问,甚至直接 OOM想解决线上 JVM GC 问题,但却无从下手新项目上线,对各种 JVM 参数设置一脸茫然,直接默认吧然后就 JJ 了每次面试之前都要重新背一遍 JVM 的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优 VM 参数,如何解决 GC、OOM 等问题,一脸懵逼。原创 2024-08-14 09:40:21 · 767 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-02-类加载子系统
Class 文件类加载子系统运行时数据区方法区堆程序计数器虚拟机栈本地方法栈执行引擎本地方法接口本地方法库如果自己想手写一个 Java 虚拟机的话,主要考虑哪些结构呢?类加载器执行引擎在 Java 的日常应用程序开发中,类的加载几乎是由上述 3 种类加载器相互配合执行的,在必要时,我们还可以自定义类加载器,来定制类的加载方式。为什么要自定义类加载器?隔离加载类修改类加载的方式扩展加载源防止源码泄漏。原创 2024-08-15 09:44:26 · 1027 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-03-运行时数据区及程序计数器
本节主要讲的是运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区内存是非常重要的系统资源,是硬盘和 CPU 的中间仓库及桥梁,承载着操作系统和应用程序的实时运行 JVM 内存布局规定了 Java 在运行过程中内存申请、分配、管理的策略,保证了 JVM 的高效稳定运行。不同的 JVM 对于内存的划分方式和管理机制存在着部分差异。原创 2024-08-16 09:32:47 · 842 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-04-虚拟机栈
由于跨平台性的设计,Java 的指令都是根据栈来设计的。不同平台 CPU 架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。原创 2024-08-21 13:46:08 · 1059 阅读 · 0 评论 -
JVM上篇:内存与垃圾-回收篇-05-本地方法接口和本地方法栈
简单地讲,一个 Native Method 是一个 Java 调用非 Java 代码的接囗。一个 Native Method 是这样一个 Java 方法:该方法的实现由非 Java 语言实现,比如 C。这个特征并非 Java 所特有,很多其它的编程语言都有这一机制,比如在 C++中,你可以用 extern “c” 告知 c++编译器去调用一个 c 的函数。原创 2024-08-17 23:19:19 · 1013 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-06-堆
堆针对一个 JVM 进程来说是唯一的,也就是一个进程只有一个 JVM,但是进程包含多个线程,他们是共享同一堆空间的。一个 JVM 实例只存在一个堆内存,堆也是 Java 内存管理的核心区域。Java 堆区在 JVM 启动的时候即被创建,其空间大小也就确定了。是 JVM 管理的最大一块内存空间。堆内存的大小是可以调节的。《Java 虚拟机规范》规定,堆可以处于物理上不连续的内存空间中,但在逻辑上它应该被视为连续的。原创 2024-08-23 20:30:09 · 1191 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-07-方法区
百度说一下 JVM 内存模型吧,有哪些区?分别干什么的?蚂蚁金服Java8 的内存分代改进 JVM 内存分哪几个区,每个区的作用是什么?一面:JVM 内存分布/内存结构?栈和堆的区别?堆的结构?为什么两个 survivor 区?二面:Eden 和 survior 的比例分配小米jvm 内存分区,为什么要有新生代和老年代字节跳动二面:Java 的内存分区二面:讲讲 vm 运行时数据库区 什么时候对象会进入老年代?京东JVM 的内存结构,Eden 和 Survivor 比例。原创 2024-08-24 17:17:06 · 1095 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-08-对象实例化及直接内存
不是虚拟机运行时数据区的一部分,也不是《Java 虚拟机规范》中定义的内存区域。直接内存是在 Java 堆外的、直接向系统申请的内存区间。来源于 NIO,通过存在堆中的 DirectByteBuffer 操作 Native 内存。通常,访问直接内存的速度会优于 Java 堆,即读写性能高。因此出于性能考虑,读写频繁的场合可能会考虑使用直接内存。Java 的 NIO 库允许 Java 程序使用直接内存,用于数据缓冲区。原创 2024-08-26 10:12:46 · 1107 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-09-执行引擎
执行引擎属于 JVM 的下层,里面包括解释器、及时编译器、垃圾回收器执行引擎是 Java 虚拟机核心的组成部分之一。“虚拟机”是一个相对于“物理机”的概念,这两种机器都有代码执行能力,其区别是物理机的执行引擎是直接建立在处理器、缓存、指令集和操作系统层面上的,而虚拟机的执行引擎则是由软件自行实现的,因此可以不受物理条件制约地定制指令集与执行引擎的结构体系,能够执行那些不被硬件直接支持的指令集格式。JVM 的主要任务是负责装载字节码到其内部。原创 2024-08-27 10:06:42 · 1076 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-10-StringTable
这纯粹是一个实现上的变化,对现有的公共接口没有变化。目前没有计划增加任何新的公共 API 或其他接口。迄今为止所做的原型设计工作证实了内存占用的预期减少,GC 活动的大幅减少,以及在某些角落情况下的轻微性能倒退。结论:String 再也不用 char[] 来存储了,改成了 byte [] 加上编码标记,节约了一些空间。原创 2024-08-27 10:21:41 · 886 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-11-垃圾回收概述及算法
垃圾收集,不是 Java 语言的伴生产物。早在 1960 年,第一门开始使用内存动态分配和垃圾收集技术的 Lisp 语言诞生。哪些内存需要回收?什么时候回收?如何回收?垃圾收集机制是 Java 的招牌能力,极大地提高了开发效率。如今,垃圾收集几乎成为现代语言的标配,即使经过如此长时间的发展,Java 的垃圾收集机制仍然在不断的演进中,不同大小的设备、不同特征的应用场景,对垃圾收集提出了新的挑战,这当然也是面试的热点。大厂面试题蚂蚁金服。原创 2024-08-27 10:36:26 · 847 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-12-垃圾回收相关概念
对于老版本的 Oracle JDK,因为永久代的大小是有限的,并且 JVM 对永久代垃圾回收(如,常量池回收、卸载不再需要的类型)非常不积极,所以当我们不断添加新类型的时候,永久代出现 OutOfMemoryError 也非常多见,尤其是在运行时存在大量动态类型生成的场合;如果这么做,当系统内存不足时,这些缓存数据会被回收,不会导致内存溢出。弱引用和软引用一样,在构造弱引用时,也可以指定一个引用队列,当弱引用对象被回收时,就会加入指定的引用队列,通过这个队列可以跟踪对象的回收情况。原创 2024-08-27 10:35:57 · 848 阅读 · 0 评论 -
JVM上篇:内存与垃圾回收篇-13-垃圾回收器
垃圾收集器没有在规范中进行过多的规定,可以由不同的厂商、不同版本的 JVM 来实现。由于 JDK 的版本处于高速迭代过程中,因此 Java 发展至今已经衍生了众多的 GC 版本。从不同角度分析垃圾收集器,可以将 GC 分为不同的类型。垃圾收集机制是 Java 的招牌能力,极大地提高了开发效率。这当然也是面试的热点。为什么要有很多收集器,一个不够吗?因为 Java 的使用场景很多,移动端,服务器等。所以就需要针对不同的场景,提供不同的垃圾收集器,提高垃圾收集的性能。原创 2024-08-28 10:00:16 · 1118 阅读 · 0 评论 -
JVM中篇:字节码与类的加载篇-01-class文件结构
在 Java 语言中,要重载(Overload)一个方法,除了要与原方法具有相同的简单名称之外,还要求必须拥有一个与原方法不同的特征签名,特征签名就是一个方法中各个参数在常量池中的字段符号引用的集合,也就是因为返回值不会包含在特征签名之中,因此 Java 语言里无法仅仅依靠返回值的不同来对一个已有方法进行重载。在 interfaces[]中,各成员所表示的接口顺序和对应的源代码中给定的接口顺序(从左至右)一样,即 interfaces[0]对应的是源代码中最左边的接口。常量池中的每一项都具备相同的特征。原创 2024-08-29 10:31:48 · 701 阅读 · 0 评论 -
JVM中篇:字节码与类的加载篇-02-字节码指令集
iload 从局部变量中装载int类型值lload 从局部变量中装载long类型值fload 从局部变量中装载float类型值dload 从局部变量中装载double类型值aload 从局部变量中装载引用类型值(refernce)iload_0 从局部变量0中装载int类型值iload_1 从局部变量1中装载int类型值iload_2 从局部变量2中装载int类型值iload_3 从局部变量3中装载int类型值lload_0 从局部变量0中装载long类型值。原创 2024-08-29 10:32:11 · 809 阅读 · 0 评论 -
JVM中篇:字节码与类的加载篇-03-类的加载过程(类的生命周期)详解
在 Java 中数据类型分为基本数据类型和引用数据类型。基本数据类型由虚拟机预先定义,引用数据类型则需要进行类的加载。按照 Java 虚拟机规范,从 class 文件到加载到内存中的类,到类卸载出内存为止,它的整个生命周期包括如下 7 个阶段:其中,验证、准备、解析 3 个部分统称为链接(Linking)从程序中类的使用过程看。原创 2024-08-30 10:16:25 · 887 阅读 · 0 评论 -
JVM中篇:字节码与类的加载篇-04-再谈类的加载器
类加载器是JVM执行类加载机制的前提。ClassLoader是Java的核心组件,所有的Class都是由ClassLoader进行加载的,ClassLoader负责通过各种方式将Class信息的二进制数据流读入JVM内部,转换为一个与目标类对应的java.lang.Class对象实例。然后交给Java虚拟机进行链接、初始化等操作。因此,ClassLoader在整个装载阶段,只能影响到类的加载,而无法通过ClassLoader去改变类的链接和初始化行为。原创 2024-08-30 10:16:46 · 1127 阅读 · 0 评论 -
JVM下篇:性能监控与调优篇-01-概述篇
支付宝三面:JVM 性能调优都做了什么?有做过 JVM 内存优化吗?从 SQL、JVM、架构、数据库四个方面讲讲优化思路JVM 的编译优化jvm 性能调优都做了什么JVM 诊断调优工具用过哪些?二面:jvm 怎样调优,堆内存、栈空间设置多少合适三面:JVM 相关的分析工具使用过的有哪些?具体的性能调优步骤如何如何进行 JVM 调优?有哪些方法?如何理解内存泄漏问题?有哪些情况会导致内存泄漏?如何解决?三面:JVM 如何调优、参数怎么调?从 SQL、JVM、架构、数据库四个方面讲讲优化思路。原创 2024-08-31 09:23:45 · 874 阅读 · 0 评论 -
JVM下篇:性能监控与调优篇-02-JVM监控及诊断工具-命令行篇
性能诊断是软件工程师在日常工作中需要经常面对和解决的问题,在用户体验至上的今天,解决好应用的性能问题能带来非常大的收益。Java 作为最流行的编程语言之一,其应用性能诊断一直受到业界广泛关注。可能造成 Java 应用出现性能问题的因素非常多,例如线程控制、磁盘读写、数据库访问、网络 I/O、垃圾收集等。想要定位这些问题,一款优秀的性能诊断工具必不可少。体会 1:使用数据说明问题,使用知识分析问题,使用工具处理问题。体会 2:无监控、不调优!简单命令行工具。原创 2024-08-31 18:06:06 · 1339 阅读 · 0 评论 -
JVM下篇:性能监控与调优篇-03-JVM监控及诊断工具-GUI篇
1.无法获取方法级别的分析数据,如方法间的调用关系、各方法的调用次数和调用时间等(这对定位应用性能瓶颈至关重要)。2.要求用户登录到目标 Java 应用所在的宿主机上,使用起来不是很方便。3.分析数据通过终端输出,结果展示不够直观。为此,JDK 提供了一些内存泄漏的分析工具,如 jconsole,jvisualvm 等,用于辅助开发人员定位问题,但是这些工具很多时候并不足以满足快速定位的需求。所以这里我们介绍的工具相对多一些、丰富一些。JDK 自带的工具。原创 2024-08-31 18:22:24 · 819 阅读 · 0 评论 -
JVM下篇:性能监控与调优篇-04-JVM运行时参数
Java 提供了 java.lang.management 包用于监视和管理 Java 虚拟机和 Java 运行时中的其他组件,它允许本地或远程监控和管理运行的 Java 虚拟机。通过使用这些 api,可以监控应用服务器的堆内存使用情况,设置一些阈值进行报警等处理。Hotspot JVM 有两种模式,分别是 server 和 client,分别通过-server 和-client 模式设置。同样地,通过 java -version 命令:可以看到 mixed mode 字样,代表当前系统使用的是混合模式。原创 2024-09-01 06:59:49 · 1159 阅读 · 0 评论