众所周知,阿里开源的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. Vue案例——todolist

    最近在学习vue,实现todolist案例,实现效果如下: 该案例分为四个部分:header为输入框,body为列表,item是列表中的条目,footer为最下方的统计. 实现步骤: ①创建项目 vu ...

  2. Treetop Lights使用条款与免责协议

    Treetop Lights (以下简称"我们")在此特别提醒您务必认真阅读.充分理解本<使用条款与免责协议>(以下简称"本协议")中各条款并选择是 ...

  3. ARM-THUMB procedure call standard(ATPCS是ARM-Thumb过程调用标准的简称)

    为了使单独编译的c语言和汇编程序之间能够相互调用,必须为子程序之间的调用规定一定的规则.ATPCS就是ARM程序和Thumb程序中子程序的基本规则. 基本ATPCS规定了在子程序调用时的一些基本规则, ...

  4. 在windows 7下构建 FTP 服务器

    首先我们在C盘建立两个文件夹,用于发ftp的上传和下载 其次我们找到控制面板>程序>打开或关闭windows功能 进入后找到Internet 信息服务>FTP服务器>确定! 选 ...

  5. UE4常用快捷键

    编辑器快捷键 按键 操作 W 选择"移动"工具 E 选择"旋转"工具 R 选择"缩放"工具 F 聚焦对象 End 落到地面 Alt + En ...

  6. (转载)史上最详细的docker学习手册

    原文链接:https://my.oschina.net/u/1388595/blog/5078146 一.docker入门 1.docker的安装及入门示例 环境准备:docker需要安装在cento ...

  7. 添加vscode到windows的右键菜单

    保存为bat Windows Registry Editor Version 5.00 ; Open files [HKEY_CLASSES_ROOT\*\shell\Open with VS Cod ...

  8. python调用C库的方法

    主要介绍两种,一种是python的标准库内置的ctype,另一种是第三方的pybind11. 除此之外,还有其他的方案,例如,CFFI.Cython等等. 一.python的标准库ctype

  9. 解析bean封装成BeanDefinition

    默认命名空间 1:parseDefaultElement 从代码中可以了解到默认的命名空间的一节节点主要是4种,import,alias,bean,beans private void parseDe ...

  10. 小程序modal弹窗

    [注意]css放的位置可能影响效果 参考a-level competitionFilterCover 1.容器:position: absolute; top: 100vh; animation: m ...