写在文章开头
在现代软件开发中,Java 语言凭借其“一次编写,到处运行”的理念成为了企业级应用的首选之一。这一理念的背后支撑技术正是 Java 虚拟机(JVM)。JVM 是一个抽象的计算机,它实现了 Java 编程语言的各种特性,并且能够执行编译后的字节码文件。了解 JVM 的工作原理对于优化程序性能、调试代码以及深入理解 Java 应用至关重要。
本文将简要介绍 JVM 中常见的指令及其作用,旨在为开发者提供一个清晰的认识框架,帮助他们更好地掌握 JVM 指令集的基本概念及其实战技巧。我们将从最基础的加载和存储指令开始,逐步探讨控制转移、方法调用等更复杂的操作符,最终带领读者深入了解 JVM 内部工作机制的一角。
Hi,我是 sharkChili ,是个不断在硬核技术上作死的技术人,是 CSDN的博客专家 ,也是开源项目 Java Guide 的维护者之一,熟悉 Java 也会一点 Go ,偶尔也会在 C源码 边缘徘徊。写过很多有意思的技术博客,也还在研究并输出技术的路上,希望我的文章对你有帮助,非常欢迎你关注我的公众号: 写代码的SharkChili 。
同时也非常欢迎你star我的开源项目mini-redis:https://github.com/shark-ctrl/mini-redis
因为近期收到很多读者的私信,所以也专门创建了一个交流群,感兴趣的读者可以通过上方的公众号获取笔者的联系方式完成好友添加,点击备注 “加群” 即可和笔者和笔者的朋友们进行深入交流。
详解JVM常见指令
jinfo(查看配置信息)
查看Java
应用程序配置参数或者JVM
系统属性,相关命令详情我们可以使用-help
或者man
命令查看
jinfo -help
对此我们也给出jinfo指令集的说明:
Usage:
jinfo [option] <pid>
(to connect to running process)
jinfo [option] <executable <core>
(to connect to a core file)
jinfo [option] [server_id@]<remote server IP or hostname>
(to connect to remote debug server)
where <option> is one of:
-flag <name> to print the value of the named VM flag
-flag [+|-]<name> to enable or disable the named VM flag
-flag <name>=<value> to set the named VM flag to the given value
-flags to print VM flags
-sysprops to print Java system properties
<no option> to print both of the above
-h | -help to print this help message
为了演示,笔者在服务器上开启了一个Java
应用,我们可以使用jps
命令查看其进程id
,可以看到笔者服务器中有一个pid
为19946
的Java进程,查看当前应用所有的配置参数以及系统配置属性命令为jinfo pid
,可以看到通过jinfo结合进程号即可看到这个java进程对应的各自类库、版本号以及系统信息:
Attaching to process ID 19946, please wait...
Debugger attached successfully.
Server compiler detected.
JVM version is 25.202-b08
Java System Properties:
java.runtime.name = Java(TM) SE Runtime Environment
java.vm.version = 25.202-b08
sun.boot.library.path = /root/jdk8/jre/lib/amd64
java.protocol.handler.pkgs = org.springframework.boot.loader
java.vendor.url = http://java.oracle.com/
java.vm.vendor = Oracle Corporation
path.separator = :
file.encoding.pkg = sun.io
java.vm.name = Java HotSpot(TM) 64-Bit Server VM
sun.os.patch.level = unknown
sun.java.launc