jvm
文章平均质量分 88
烛影摇红透纱窗
这个作者很懒,什么都没留下…
展开
-
spring aop(二) JdkDynamicAopProxy 代理执行过程
本文来分析 Spring 中 JdkDynamicAopProxy 代理对象的生成 getProxy() 方法和拦截增强 invoke 方法的相关处理逻辑。上文我们研究过了 Pointcut 和 Advice(Advisor)接口以及它们在 Spring AOP 代理中的作用,并利用几个 Demo 演示了其相关关系。为了方便阅读,把上文中的 ProxyFactoryDemo 类代码再次贴出来。public class ProxyFactoryDemo { public static void ma原创 2021-06-30 21:14:57 · 364 阅读 · 0 评论 -
JDK 动态代理实现内幕
1. jdk 动态代理使用要求:jdk 动态代理要求被代理的对象至少实现一个接口。代理逻辑:jdk 会先产生一个继承 Proxy 类,并实现所有目标对象 implement 接口的代理类,然后调用代理类的构造方法(参数类型为 InvocationHandler)。代理类会:复写目标对象所有 implement 接口的所有方法,还会对 Object 类中的 equals, toString, hashCode 方法进行复写这些方法内部都是使用 InvocationHandler 对象的 inv原创 2021-06-30 00:40:17 · 95 阅读 · 0 评论 -
ClassLoader双亲委派模型与SPI
1. ClassLoader 的 parent 层级jvm 中的类都是由类加载器加载的, 类加载器本身也是一个对象,所以我们说的 ClassLoader 是一个可以加载类的对象。jvm 内置了三个进程内唯一的类加载器对象,此外用户也可以用 new 实例化自己的类加载器对象。jvm 自身维护了内置的三个类加载器对象和自己实例化的类加载器对象之间的 parent 层级关系,表现为:由 C++ 实现的顶级 BootStrap加载器:因为是 C++ 实现,如果打印这个类加载器对象,表示为 null。负责加载原创 2021-06-29 01:25:34 · 251 阅读 · 0 评论 -
线上debug的一般步骤
线上问题排查套路df, free ,top 三连jstack, jmap 查jvm一. CPU 查看线程总览可以先用 pstree -p [pid] | wc -l 看看进程内部的线程个数是否合理,[@js_38_140 platform-new]# pstree -p 30081 | wc -l104然后再使用 jstack 查看某个线程top -H -p pid 查看线程-H: 进入线程模式, 显示 CPU 利用率高的线程printf '%x \n' threadId原创 2021-06-17 00:14:50 · 1001 阅读 · 0 评论 -
G1 与 ParNew + CMS 收集器
G1 内存划分G1 提供延迟和吞吐量之间的平衡, 有可预测的 gc 停顿时间-XX:+UseG1GC 开启 G1 收集器 (G1 是标记复制, CMS 是标记清除)g1 取消 青年代, 老年代的空间划分, 不必担心每个代内存是否足够. 取而代之的是,将堆划分为若干个区域(Region), 这些区域的身份可以互相转化,分为:(1) Eden 区域 (2) Survior 区域 (3) old 区域 (4) 新加的 humongous 区域.所以 G1 其实仍然属于分代收集器, 只是这些代不原创 2021-06-15 19:35:14 · 870 阅读 · 0 评论