摘要: 背景 众所周知, Java 或者其他运行在 JVM(java 虚拟机)上面的程序都需要最终便以为字节码,然后被 JVM加载运行,那么这个加载到虚拟机的过程就是 classloader 类加载器所干的事情.直白一点,就是 通过一个类的全限定类名称来获取描述此类的二进制字节流 的过程. 双亲委派模型 说 阅读全文
posted @ 2020-03-15 22:22 洛神灬殇 阅读(748) 评论(0) 推荐(0) 编辑
摘要: premain是Java SE5开始就提供的代理方式,由于其必须在命令行指定代理jar,并且代理类必须在main方法前启动。因此,要求开发者在应用前就必须确认代理的处理逻辑和参数内容等等。在有些场合下,premain代理方式不能满足需求。为解决运行时启动代理类的问题,Java SE6开始提供了在应用 阅读全文
posted @ 2020-03-15 16:12 洛神灬殇 阅读(804) 评论(0) 推荐(0) 编辑
摘要: 一个代理实现ClassFileTransformer接口用于改变运行时的字节码(class File),这个改变发生在jvm加载这个类之前。对所有的类加载器有效。 class File这个术语定义于虚拟机规范3.1,指的是字节码的byte数组,而不是文件系统中的class文件。 接口中只有一个方法: 阅读全文
posted @ 2020-03-15 14:54 洛神灬殇 阅读(1762) 评论(0) 推荐(0) 编辑
摘要: retransformClasses:已经加载的类重新进行转换处理,即会触发重新加载类定义,需要注意的是,新加载的类不能修改旧有的类声明,譬如不能增加属性、不能修改方法声明 redefineClasses:与如上类似,但不是重新进行转换处理,而是直接把处理结果(bytecode)直接给JVM 总结: 阅读全文
posted @ 2020-03-15 10:13 洛神灬殇 阅读(3413) 评论(0) 推荐(0) 编辑
摘要: premain是Java SE5开始就提供的代理方式,由于其必须在命令行指定代理jar,并且代理类必须在main方法前启动。因此,要求开发者在应用前就必须确认代理的处理逻辑和参数内容等等。在有些场合下,premain代理方式不能满足需求。为解决运行时启动代理类的问题,Java SE6开始提供了在应用 阅读全文
posted @ 2020-03-15 10:07 洛神灬殇 阅读(951) 评论(0) 推荐(0) 编辑
摘要: 在上篇博客(http://blog.csdn.net/raintungli/article/details/51646556)中提到了在on_attach的方式上如何重新定义class,里面也提到了最后attach时候会调用我们自定义的agent class的agentmain方法,在Instrum 阅读全文
posted @ 2020-03-15 09:59 洛神灬殇 阅读(555) 评论(0) 推荐(0) 编辑
摘要: 问题 开发过程中,咱们经常需要使用不同的库版本,而这些版本又不是向后兼容的,或者出于某种原因需要支持同一库的多个版本。 在这种情况下,默认的类加载器已经是不支持了,因为 loadClass 方法只加载一次特定的类,之后所有的加载请求就直接返回现有 Class 实例的引用了。 解决办法 在这种情况下, 阅读全文
posted @ 2020-03-15 09:14 洛神灬殇 阅读(316) 评论(0) 推荐(0) 编辑
摘要: retransformclasses void retransformclasses(class... classes) throws unmodifiableclassexception 重转换提供的类集。 此函数为检测已加载类提供了方便。 当最初加载了类或重定义了类时,初始类文件字节可以使用 c 阅读全文
posted @ 2020-03-15 09:03 洛神灬殇 阅读(2739) 评论(0) 推荐(0) 编辑
摘要: 我使用asm库来执行一些Java字节码修改 - 特别是修改我的类来实现一个新的接口和相关的方法。我目前的做法是通过javaagent使用核心asm API。我想保留这种动态方法,而不是静态修改.class文件。 在更高层次上,我的问题是,如果我选择修改从B扩展的类A,我还需要修改B.(鉴于我对如何在 阅读全文
posted @ 2020-03-14 20:41 洛神灬殇 阅读(1138) 评论(0) 推荐(0) 编辑
摘要: 1.前提概要 jvm的attach的方式上如何重新定义class,里面也提到了最后attach时候会调用我们自定义的agent class的agentmain方法,在Instrumentation的接口里面实际上本身提供了redfineClasses的方法 也就是agentmain的方法只是一个调用 阅读全文
posted @ 2020-03-14 19:51 洛神灬殇 阅读(2107) 评论(1) 推荐(0) 编辑
摘要: 基于pinpoint改造的一种方式的思考(1)--agent 添加代理层 1.Pinpoint简介 Pinpoint 是用 Java 编写的 APM(应用性能管理)工具,用于大规模分布式系统。在 Dapper(dapper.docx) 之后,Pinpoint 提供了一个解决方案,以帮助分析系统的总体 阅读全文
posted @ 2020-03-14 17:56 洛神灬殇 阅读(639) 评论(0) 推荐(0) 编辑
摘要: jaegeropentracing的Java-client完整分布式追踪链,在分布式系统中透传trace信息 下面是代码: client端代码如下: public static void main(String[] args) throws InterruptedException { Config 阅读全文
posted @ 2020-03-14 17:42 洛神灬殇 阅读(737) 评论(0) 推荐(0) 编辑
摘要: 关于jaegeropentracing的Java-client做记录如下: 1.依赖jar包 2.Java-client 代码示例: <A>.调用示例1 注:该方式client会侵入已有业务代码,如需在不改动原有业务代码的前提下,是否考虑可以使用拦截器/过滤器?(未验证) <B>.使用Spring 阅读全文
posted @ 2020-03-14 17:41 洛神灬殇 阅读(609) 评论(0) 推荐(0) 编辑
摘要: 请求转发 Spring Cloud Gateway 可以通过代码或者配置文件指定路由,我还是习惯在配置文件里面操作。这里简单配置将所有 /api/** 的请求都转发到 api-service 进行处理。 spring: cloud.gateway.routes: - id: api-service- 阅读全文
posted @ 2020-03-14 15:43 洛神灬殇 阅读(12549) 评论(1) 推荐(0) 编辑
摘要: 随着微服务架构的流行,一次请求往往需要涉及到多个服务,因此服务性能监控和排查就变得更复杂。APM因此而生。 目前,市面上的APM服务端已经有了非常多的实现。比如Zipkin、Jaeger、SkyWalking、Elastic APM等(Pinpoint并不支持OpenTracing,所以我们不介绍) 阅读全文
posted @ 2020-03-14 14:26 洛神灬殇 阅读(411) 评论(0) 推荐(0) 编辑