众所周知,阿里开源的Arthas已经成为Java开发中调优的基本工具,其功能在于监控JVM运行情况,并对CPU、内存状况生成报告或者是火炬图。

从JDK5开始,java.lang.instrument可以使用Instrumentation构建一个独立于应用程序的代理程序(agent),用来监测运行在 JVM 上的其他进程,甚至替换和修改某些类的定义,这是一种虚拟机级别的 AOP (动态代理模式)。一开始,JDK只支持在类运行之前对类进行增强,通过java -javaagent参数指定代理类的方式。利用代理类(agent),在目标运行类被加载之前,通过修改二进制字节码的形式对目标类进行增强。至于什么类被增强,得看agent是否对类进行了判断,如果没有判断那任何类都会被增强。

VM启动前设置Instrument例子:https://blog.csdn.net/chuixue24/article/details/103829931

此处作者编写了两个类输出1和2,在agent中加载了2的字节码文件(为一个byte数组)对1的字节码在类加载前进行了替换。

JDK6以后,Instrumentation类进一步的有了agentmain方法,允许在一个类运行时对其增强。然后sun公司提供了com.sun.tools.attach包,这个包在JDK的lib文件夹的tools.jar内。

使用attach可以向目标JVM attach一个agent,然后方便的监控一个 JVM,运行一个外加的代理程序。

也就是说它的运行时增强也是改写class文件然后重新加载JVM内的类实现的。

attach操作系统层面实现使用了套接字:http://lovestblog.cn/blog/2014/06/18/jvm-attach/?spm=ata.13261165.0.0.26d52428n8NoAy

使用ASM重写字节码:https://www.cnblogs.com/chengxuzhixin/p/14552275.html

网易二面-Arthas的底层原理的更多相关文章

  1. 【T-SQL进阶】02.理解SQL查询的底层原理

    本系列[T-SQL]主要是针对T-SQL的总结. [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础]02.联接查询 [T-SQL基础]03.子查询 [T-SQL基础]04.表表达式 ...

  2. 理解SQL查询的底层原理

    阅读目录 一.SQL Server组成部分 二.查询的底层原理 本系列[T-SQL]主要是针对T-SQL的总结. T-SQL基础 [T-SQL基础]01.单表查询-几道sql查询题 [T-SQL基础] ...

  3. Synchronized之二:synchronized的实现原理

    Java提供了synchronized关键字来支持内在锁.Synchronized关键字可以放在方法的前面.对象的前面.类的前面. 当线程调用同步方法时,它自动获得这个方法所在对象的内在锁,并且方法返 ...

  4. SQL 执行 底层原理(一)

    一.SQL Server组成部分 1.关系引擎:主要作用是优化和执行查询.包含三大组件: (1)命令解析器:检查语法和转换查询树. (2)查询执行器:优化查询. (3)查询优化器:负责执行查询. 2. ...

  5. java面试-CAS底层原理

    一.CAS是什么? 比较并交换,它是一条CPU并发原语. CAS是一种无锁算法,CAS有3个操作数,内存值V,旧的预期值A,要修改的新值B.当且仅当预期值A和内存值V相同时,将内存值V修改为B,否则什 ...

  6. WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇]

    原文:WCF技术剖析之二十二: 深入剖析WCF底层异常处理框架实现原理[中篇] 在[上篇]中,我们分别站在消息交换和编程的角度介绍了SOAP Fault和FaultException异常.在服务执行过 ...

  7. 深入源码分析SpringMVC底层原理(二)

    原文链接:深入源码分析SpringMVC底层原理(二) 文章目录 深入分析SpringMVC请求处理过程 1. DispatcherServlet处理请求 1.1 寻找Handler 1.2 没有找到 ...

  8. 【Spring Data JPA篇】JPA的底层原理(二)

    一.接口继承结构 二.底层原理

  9. iOS 技术篇:从使用到了解block底层原理 (二)

    block实质 序言 上篇文章中主要通过简单的demo展示了block的使用场景,本篇将基于上篇文章iOS 技术篇:从使用到了解block底层原理 (一)进一步了解block底层的实现原理. bloc ...

  10. JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能

    摘要: 理解浏览器渲染. 原文:JavaScript是如何工作的: CSS 和 JS 动画底层原理及如何优化它们的性能 作者:前端小智 Fundebug经授权转载,版权归原作者所有. 这是专门探索 J ...

随机推荐

  1. 虚拟机中debian11修改控制台(console)分辨率|linux控制台分辨率|linux console resolution

    实体机一般安装好驱动分辨率就没啥问题,而且个人pc也没有只用控制台的需求.但是虚拟机中不安装桌面的时候,默认的控制台分辨率常不能满足需求. 这个需求貌似也比较少,而且几乎搜到的文章大部分都是旧的,不能 ...

  2. 大数据算法与分析_pdf

    链接:https://pan.baidu.com/s/1ksU_Zt1pVZzQ0MmURgoi_w 提取码:r92u

  3. react中如何正确使用setState(附例子)

    概述 setState中对于某个state多次修改,只执行一次(最后一次),所以可以将修改放在同一次中 import React, {Component} from 'react'; class De ...

  4. cv::flip

    int main(int argc, char** argv) { cv::namedWindow("Example 2-3", cv::WINDOW_AUTOSIZE); cv: ...

  5. 【C++复习】第七章 类的继承(基类、派生类、虚基类)

    1.基类与派生类 类的继承:面向对象的程序设计中提供了类的继承机制,允许程序员在保持原有类特性的基础上,进行更具体.更详细的定义 用途:代码的重用性(继承)和可扩充性(派生) 例:植物大战僵尸游戏中, ...

  6. DELL品牌电脑开机显示supportASsiSt丨pre-Boot SyStem Proforman?

    这个问题,我百度了N个网站,得到的结果都是针对老版本BIOS的 https://wen.baidu.com/question/1647310335599401700.html https://zhua ...

  7. lg8862题解

    脑抽了,一开始想着扫描线然后用线段树求历史最大值.

  8. JAVA远程调用 webService

    package com.example.demo; import org.apache.cxf.endpoint.Client; import org.apache.cxf.jaxws.endpoin ...

  9. 02 Spark架构与运行流程

    1. 为什么要引入Yarn和Spark. YARN优势1.YARN的设计减小了JobTracker的资源消耗,并且让监测每一个Job子任务(tasks)状态的程序分布式化了,更安全.更优美. 2.在新 ...

  10. Software--电商平台系统--P2 支撑基础设施 Infrastructure

    2018-01-11  18:19:49 架构 客户体验 Ajax 交互技术. 网站快速加载且响应灵敏,则应该缓存商品数据. 灵活的缓存机制,以支持任何类型的存储(即分布式存储或内存中存储). 日志功 ...