李鼎

Results 132 comments of 李鼎

> 还要进一步确认: > > `WeakHashMap`在遍历过程中,`Key`被 GC 了,会不会导致`ConcurrentModificationException`异常。 > > 上面情况应该不会出现,否则`WeakHashMap`的使用会非常复杂难用;我可以构造一个case 来实测证明。 > > 如果这个情况会出现,hotfix的实现要再加强。 写了测试`Demo` 实证: `WeakHashMap`在遍历过程中,`Key`被 GC 了,并不会导致`ConcurrentModificationException`异常。 @Markkkkks ### 验证Demo https://github.com/oldratlee/HelloKt 运行方式: ```sh ./gradlew execTestMain -P mainClass=playground.weakhashmap.WeakHashMapGcIterationKt ```...

> 使用hotfix版本的ttl这个问题没有重现了,thanks a lot @oldratlee > > 业务代码中,在子线程`future`中调用了`remove`方法,同时主线程使用了`future.get()`方法, 可能是这个原因导致的`ConcurrentModificationException`,我尝试复现下。 发布了正式版`v2.12.2`,包含了这个`hotfix`的修改内容。 https://github.com/alibaba/transmittable-thread-local/releases/tag/v2.12.2 ----------------- 这个Issue 先关闭了;如果复现问题,随时 Reopen~ 💕 @Markkkkks @wmq930626

@happyomg 非常专业的问题说明、排查说明 及其 设计讨论~ 👍 ------------------ > * 建议:是否可以在 `beforeExecute` 和 `afterExecute` 的doc上加上一些明显的提示,提示用户在该实现内务必反复确认不要触发到`addValue()`和`removeValue()`方法(无论间接还是直接) @happyomg 『doc上加上一些明显的提示』赞成! 容易出问题的地方 值得说明出来。 > * 讨论:如果我们通过代码分析出来,TTL几乎不可能存在线程不安全的操作,那么是否还有必要做 `v2.12.2` 版本的那个修正? 该修正会掩盖用户错误实现( `ConcurrentModificationException`本身就是为了`fail-fast`,帮助用户发现bug ),并且还可能跟用户的预期不符(比如导致某些TTL丢失或者多传了) @happyomg 『掩盖用户错误实现( `ConcurrentModificationException`本身就是为了`fail-fast`,帮助用户发现bug ),并且还可能跟用户的预期不符(比如导致某些TTL丢失或者多传了)』 赞成!...

> 其实问题比较简单,就是 像这样的异步调用是否有 > 除了用`TtlRunnable/TtlWrappers`修饰回调以外的方法,在回调和外部传递类似`MDC`的参数? 这个 是 `Netty`与`TTL`的集成。 就像 `JDK`线程池 集成了 TTL,从而 省去了 每次执行任务时的`TtlRunnable/TtlWrappers`修饰的操作: - 因为 `JDK`线程池 是标准库,所以 `TTL`库 里就直接 集成了。 - 这个集成就是 - [2.3 使用Java Agent来修饰JDK线程池实现类](https://github.com/alibaba/transmittable-thread-local#23-%E4%BD%BF%E7%94%A8java-agent%E6%9D%A5%E4%BF%AE%E9%A5%B0jdk%E7%BA%BF%E7%A8%8B%E6%B1%A0%E5%AE%9E%E7%8E%B0%E7%B1%BB) - 与 [2.2...

👍 @guyeu 具体的解决方法的展开要好好想想; 我也想想 😀 PS 相关的 issue: 在Reactor Webclient的场景下,使用TTL MDC不生效 https://github.com/oldratlee/log4j2-ttl-thread-context-map/issues/5 ----------- > 但我其实并不太确定`Java Agent`内建这样的修饰逻辑是不是一个好办法,这种类涉及的场景太多了,肯定会有场景不需要这样的修饰。我猜这也是`TTL`的`Java Agent`没有对`Runnable`及其子类进行修饰的原因。 我想的和你一样,『这种类涉及的场景太多了,肯定会有场景不需要这样的修饰』,即 Overkill 了。 相关『对`Runnable`及其子类进行修饰』的做法的 更多讨论 参见 Issue: - #187

> ```java > static { > Function decorator = task -> { > return TtlRunnable.get(task); > }; > Schedulers.onScheduleHook("my-hook", decorator); > } > ``` > > 这种方式能解决 @oldratlee @guyeu COOL...

@AnonymMan `Mac`下`ps`命令没有支持,也没有找到其它的命令支持。 ------- 我去翻了过Mac的系统API,想写C程序来获取系统的 - 线程`ID` - 及其CPU使用率 没有找到。 ---- 我到现在还没有找到解法, @AnonymMan 你看看有没有办法 ? :smile:

你说明参数是指`:类型参数,有参数的选项,值只有一个`,是吧。 如果是必选的,脚本自己可以判断。 当然,`parseOpts`支持,可以简化脚本的编写,现在我没有想到好的参数规格描述: ``` bash parseOpts "a,a-long:|b:,b-long:!" "$@" ``` 加个感叹号,表示必选? :smile:

Java内存问题,可以的检查操作有: \# 下面的这些都不方便做成脚本直接得出`jvm中最大对象`。谁有方法脚本化 **欢迎**提供或是实现。 :+1: ## 查看不同类型占用的内存 ``` bash $ jmap -histo | head -n 20 num #instances #bytes class name ---------------------------------------------- 1: 13352 60321384 [B 2: 108823 13516768 3:...