跳至主要內容
JavaAgent

JavaAgent

Javaagent 是什么?

Javaagent 是 java 命令的一个参数。参数 javaagent 可以用于指定一个 jar 包,它利用 JVM 提供的 Instrumentation API 来更改加载 JVM 中的现有字节码。

  1. 这个 jar 包的 MANIFEST.MF 文件必须指定 Premain-Class 项。
  2. Premain-Class 指定的那个类必须实现 premain() 方法。

premain 方法,从字面上理解,就是运行在 main 函数之前的的类。当 Java 虚拟机启动时,在执行 main 函数之前,JVM 会先运行-javaagent所指定 jar 包内 Premain-Class 这个类的 premain 方法 。


钝悟...大约 8 分钟JavaJavaSEJVMJavaJavaSEJVMJavaAgent
JVM 体系结构

JVM 体系结构

JVM 能跨平台工作,主要是由于 JVM 屏蔽了与各个计算机平台相关的软件、硬件之间的差异。

JVM 简介

计算机体系结构

真实的计算机体系结构的核心部分包含:

  • 指令集
  • 计算单元(CPU)
  • 寻址方式
  • 寄存器
  • 存储单元

JVM 体系结构简介

JVM 体系结构与计算机体系结构相似,它的核心部分包含:


钝悟...大约 3 分钟JavaJavaSEJVMJavaJavaSEJVM
jvm-and-java

JVM 和 Java 特性

JVM 如何执行方法调用

在 Java 程序里,如果同一个类中出现多个名字相同,并且参数类型相同的方法,那么它无法通过编译。如果我们想要在同一个类中定义名字相同的方法,那么它们的参数类型必须不同。这些方法之间的关系,我们称之为重载。

重载的方法在编译过程中即可完成识别。具体到每一个方法调用,Java 编译器会根据所传入参数的声明类型(注意与实际类型区分)来选取重载方法。选取的过程共分为三个阶段:

  1. 在不考虑对基本类型自动装拆箱(auto-boxing,auto-unboxing),以及可变长参数的情况下选取重载方法;
  2. 如果在第 1 个阶段中没有找到适配的方法,那么在允许自动装拆箱,但不允许可变长参数的情况下选取重载方法;
  3. 如果在第 2 个阶段中没有找到适配的方法,那么在允许自动装拆箱以及可变长参数的情况下选取重载方法。

钝悟...大约 8 分钟JavaJavaSEJVMJavaJavaSEJVM
JVM 命令行工具

JVM 命令行工具

Java 程序员免不了故障排查工作,所以经常需要使用一些 JVM 工具。

JDK 自带了一些实用的命令行工具来监控、分析 JVM 信息,掌握它们,非常有助于 TroubleShooting。

以下是较常用的 JDK 命令行工具:

名称 描述
jps JVM 进程状态工具。显示系统内的所有 JVM 进程。
jstat JVM 统计监控工具。监控虚拟机运行时状态信息,它可以显示出 JVM 进程中的类装载、内存、GC、JIT 编译等运行数据。
jmap JVM 堆内存分析工具。用于打印 JVM 进程对象直方图、类加载统计。并且可以生成堆转储快照(一般称为 heapdump 或 dump 文件)。
jstack JVM 栈查看工具。用于打印 JVM 进程的线程和锁的情况。并且可以生成线程快照(一般称为 threaddump 或 javacore 文件)。
jhat 用来分析 jmap 生成的 dump 文件。
jinfo JVM 信息查看工具。用于实时查看和调整 JVM 进程参数。
jcmd JVM 命令行调试 工具。用于向 JVM 进程发送调试命令。

钝悟...大约 25 分钟JavaJavaSEJVMJavaJavaSEJVM命令行
JVM GUI 工具

JVM GUI 工具

Java 程序员免不了故障排查工作,所以经常需要使用一些 JVM 工具。

本文系统性的介绍一下常用的 JVM GUI 工具。

jconsole

jconsole 是 JDK 自带的 GUI 工具。jconsole(Java Monitoring and Management Console) 是一种基于 JMX 的可视化监视与管理工具

jconsole 的管理功能是针对 JMX MBean 进行管理,由于 MBean 可以使用代码、中间件服务器的管理控制台或所有符合 JMX 规范的软件进行访问。


钝悟...大约 7 分钟JavaJavaSEJVMJavaJavaSEJVMGUI
Java 故障诊断

Java 故障诊断

故障定位思路

Java 应用出现线上故障,如何进行诊断?

我们在定位线上问题时要有一个整体的思路,顺藤摸瓜,才能较快的找到问题原因。

一般来说,服务器故障诊断的整体思路如下:

img
img

钝悟...大约 17 分钟JavaJavaSEJVMJavaJavaSEJVM故障诊断
Java 内存管理

Java 内存管理

内存简介

物理内存和虚拟内存

所谓物理内存就是通常所说的 RAM(随机存储器)。

虚拟内存使得多个进程在同时运行时可以共享物理内存,这里的共享只是空间上共享,在逻辑上彼此仍然是隔离的。

内核空间和用户空间

一个计算通常有固定大小的内存空间,但是程序并不能使用全部的空间。因为这些空间被划分为内核空间和用户空间,而程序只能使用用户空间的内存。

使用内存的 Java 组件

Java 启动后,作为一个进程运行在操作系统中。

有哪些 Java 组件需要占用内存呢?


钝悟...大约 25 分钟JavaJavaSEJVMJavaJavaSEJVM
JVM 类加载

JVM 类加载

img
img

类加载机制

类是在运行期间动态加载的。

类的加载指的是将类的 .class 文件中的二进制数据读入到内存中,将其放在运行时数据区的方法区内,然后在堆区创建一个java.lang.Class对象,用来封装类在方法区内的数据结构。类的加载的最终产品是位于堆区中的Class对象,Class对象封装了类在方法区内的数据结构,并且向 Java 程序员提供了访问方法区内的数据结构的接口。


钝悟...大约 21 分钟JavaJavaSEJVMJavaJavaSEJVM
JVM 垃圾收集

JVM 垃圾收集

程序计数器、虚拟机栈和本地方法栈这三个区域属于线程私有的,只存在于线程的生命周期内,线程结束之后也会消失,因此不需要对这三个区域进行垃圾回收。垃圾回收主要是针对 Java 堆和方法区进行

对象活着吗

引用计数算法

给对象添加一个引用计数器,当对象增加一个引用时计数器加 1,引用失效时计数器减 1。引用计数为 0 的对象可被回收。

两个对象出现循环引用的情况下,此时引用计数器永远不为 0,导致无法对它们进行回收。


钝悟...大约 30 分钟JavaJavaSEJVMJavaJavaSEJVMGC
JVM 教程

JVM 教程

【Java 虚拟机】总结、整理了个人对于 JVM 的学习、应用心得。

📖 内容


钝悟...大约 1 分钟JavaJavaSEJVMJavaJavaSEJVM
2