V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX  ›  fantastM  ›  全部回复第 10 页 / 共 20 页
回复总数  392
1 ... 6  7  8  9  10  11  12  13  14  15 ... 20  
2021 年 1 月 29 日
回复了 ByteMind 创建的主题 问与答 男生,从寸头开始留长发 18 个月了
我是从 18 年国庆开始留发的,一年差不多的时候可以扎起来。在老家市里逛商场的时候,带着那种夹夹的耳钉,在路上和妹子四眼相对的概率特别高...
2021 年 1 月 27 日
回复了 yeyuefeng 创建的主题 奇思妙想 你听过“伤害性不高,侮辱性极强”的一句话是啥
涨薪 500
2021 年 1 月 27 日
回复了 Cbdy 创建的主题 Java 求一个 Java 面试题的最佳实践
#10 说的方案是可行的,并且是基于 CAS 无锁的

https://gist.github.com/fantasticmao/f78ae0016a81877cf5019d9c22c81c73
简单回答:可以在 agent 中自定义类加载器,避免遵循 Java 类加载器中的双亲委派模型。

详细回答:
JVM 加载类是按照双亲委派模型来执行的,每个类都会优先委托给父类加载器来加载,当父类加载器无法加载类的时候再由子类加载器来加载,因此在 JVM 中加载的类会有一种层级关系。

在你的例子中 `ThreadPoolExecutor` 会由 BootStrap ClassLoader 加载,参数 -javaagent 指定的 baselog.jar 包默认会由 System ClassLoader 加载,所以你一开始描述的问题原因是:`ThreadPoolExecutor` 类在被 BootStrap ClassLoader 加载之后链接的时候,无法找到需要被 System ClassLoader 加载的 baselog.jar 包里的 `MDCInheritableThreadLocal`。(注意这个问题是发生在链接阶段,这也是 JVM 为什么抛了 `NoClassDefFoundError` 而不是 `ClassNotFoundException` 的原因)

然后你将 baselog.jar 包指定为由 BootStrap ClassLoader 加载,这样的话,`ThreadPoolExecutor` 类在被 BootStrap ClassLoader 加载、链接、初始化的时候,就可以找到同样是被 BootStrap ClassLoader 加载的 `MDCInheritableThreadLocal` 了。

你在 #7 里说的事情,我理解为是你在 baselog.jar 包里用到了「项目中的引入的 jar 」(可能是 Spring 之类的吧),这部分包不由是 BootStrap ClassLoader 加载的,可能是 System ClassLoader,也可能是 Tomcat 的 Webapp ClassLoader,所以自然也会有 `ClassNotFoundException` 的问题。解决方案的话,我不建议把这类包也指定为由 BootStrap ClassLoader 来加载,更好的解决方案是自定义类加载机制,破坏一下 Java 类加载器中的双亲委派模型。

具体实现的话,可以借鉴一些分布式追踪 APM 系统,它们在采集应用的数据时候,使用的无侵入式方案也是 javaagent,也会对项目中的一些代码做改造。

一些可供查阅的资料:
https://docs.oracle.com/javase/8/docs/api/java/lang/instrument/package-summary.html
https://docs.oracle.com/javase/specs/jvms/se8/html/jvms-5.html
在启动参数里用 -javaagent 的话,确实是如 #3 说的类加载问题。可以用 arthas 的 sc 、classloader 之类的命令来查看类的加载情况
2021 年 1 月 25 日
回复了 James369 创建的主题 Linux 为什么终端有那么多的名称?
kernel 、system call 、shell 这几个的关系,看这段描述应该就清楚了

https://i.imgur.com/pPw6ldg.png
2021 年 1 月 19 日
回复了 gengzi 创建的主题 Java 请教一个问题, threadPoolExecutor.execute()能被 AOP 增强吗?
@eaglewangl37670 #7 不妨看看我博客里的这篇文章,对线程池的源码分析得更多 :)

https://blog.fantasticmao.cn/2020/10/01/java-threadpoolexecutor-源码分析 /
2021 年 1 月 18 日
回复了 gengzi 创建的主题 Java 请教一个问题, threadPoolExecutor.execute()能被 AOP 增强吗?
> 想在线程执行前,执行后,做一些事情

ThreadPoolExecutor 内部提供了两个钩子方法 beforeExecute(Thread, Runnable) 和 afterExecute(Runnable, Throwable),正好符合你的需求。具体的看源码就清楚了 https://github.com/openjdk/jdk/blob/jdk8-b21/jdk/src/share/classes/java/util/concurrent/ThreadPoolExecutor.java#L1098-L1130
2021 年 1 月 15 日
回复了 bigpigeon 创建的主题 Linux rocketmq 踩坑和吐槽
对于第一点,据我了解,Kafka 中的分区和消费者也是这种设计。这样做的原因估计是在实现上会简单很多吧
2021 年 1 月 11 日
回复了 zsxzy 创建的主题 分享创造 更新 Airplay 投屏应用, 新增 2K 画质投屏
楼主是在哪儿阅读 Airplay 协议的
2020 年 12 月 17 日
回复了 luxinfl 创建的主题 程序员 面试碰到一个问题,搞不定
先同步调用 a,再用线程池异步并行地调用 bcde 。

因为整合数据时,需要保证 bcde 请求调用完成,所以就用一下 CountDownLatch 来实现这个等待机制。
2020 年 12 月 16 日
回复了 nightspirit 创建的主题 职场话题 某滴面试题,请教答案
#8 这两个关系都存一下
2020 年 12 月 16 日
回复了 nightspirit 创建的主题 职场话题 某滴面试题,请教答案
订单 id -> 用户 id,用户 id -> 订单 id
2020 年 12 月 4 日
回复了 nekoneko 创建的主题 Elasticsearch 一个关于 ES 的问题,和_stats 这个接口有关
看来老哥也是个宝可梦粉
2020 年 11 月 16 日
回复了 coderabbit 创建的主题 程序员 通过 charles 抓淘宝 app 抓包抓不到数据!
可以在浏览器上抓 m.taobao.com 上的请求
2020 年 11 月 14 日
回复了 yangkw 创建的主题 酷工作 杭州阿里-新零售场景金融技术部- Java p6p7
多问一下,是 base 杭州吗,哪个区呢
2020 年 11 月 10 日
回复了 linxiaoziruo 创建的主题 Java 类 jprofiler 是怎么在 jvm 运行时获得 jvm 相关信息的
2020 年 11 月 5 日
回复了 funway 创建的主题 分享创造 发布了一个 macOS 的倒计时小工具
不错。顺带想问下楼主学习 SwiftUI 的途径是什么?
2020 年 11 月 5 日
回复了 lambdafate 创建的主题 程序员 有没有简洁的博客主题推荐一下
1 ... 6  7  8  9  10  11  12  13  14  15 ... 20  
关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   Solana   ·   5450 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 34ms · UTC 05:54 · PVG 13:54 · LAX 22:54 · JFK 01:54
♥ Do have faith in what you're doing.