nieyuanhong 最近的时间轴更新
nieyuanhong

nieyuanhong

V2EX 第 335631 号会员,加入于 2018-07-25 09:02:40 +08:00
今日活跃度排名 14998
nieyuanhong 最近回复了
啊? 只支持硅基流动?
1 天前
回复了 woodfizky 创建的主题 电动汽车 小米 SU7 高速碰撞爆燃报告
@needpp 外企可以维权, 国内企业也有铁拳. 大家都有美好的未来.
5 天前
回复了 4ra1n 创建的主题 Java 有没有什么思路对 Fat Jar 进行瘦身
甚至都可以不用到 agent, 直接重定义类加载器, 记录所有加载的类. 甚至可以直接在类加载器里开一个 zip 边记录边去重后往里边塞用到的类. 如果还想优化, 甚至可以记录方法调用(可以使用 javassist 向方法插入记录代码, 然后使用 butebuddy 运行时替换类的字节码, 比传统的 agent 应该简单一些), 把没用到的方法也剪掉. 但就算这样还是有个问题, 如何保证所有用到的类/方法被调用一遍了呢?
107 天前
回复了 Chelseawin 创建的主题 职场话题 今天过生日,但开会也被警告了........
每天下班打开 boss 直聘开刷呗, 骑驴找马
不退押金? 直接洗衣机空调全给他卖了, 马桶砸了, 下水道全用水泥堵了, 玩的就是一手鱼死网破.
217 天前
回复了 javak 创建的主题 Java Java hello world 确实就要占用 30M
dO yOu GuYs NoT hAvE mEmOrY?
这段代码应当改为
```java
CallSite applyAsInt = LambdaMetafactory.metafactory(
lookup.in(Phone.class),
"applyAsInt",
methodType(ToIntFunction2.class),
methodType(int.class, Phone.class, int.class, int.class),
getSum,
methodType(int.class, Phone.class, int.class, int.class)
);
```
因为调用 metafactory 方法时, 方法内部初步生成的 Lambda 字节码会被作为 lookup.in(Phone.class)的内部类加载, 加载时, 会调用方法 java.lang.invoke.InnerClassLambdaMetafactory#generateInnerClass, 具体逻辑形如
```java
//jdk21
return caller.makeHiddenClassDefiner(lambdaClassName, classBytes, Set.of(NESTMATE, STRONG), lambdaProxyClassFileDumper)
.defineClass(!disableEagerInitialization, classdata);
```
在 defineClass 中逻辑形如
```java
//jdk21
Class<?> lookupClass = lookup.lookupClass();
ClassLoader loader = lookupClass.getClassLoader();
//...
```
这里的第一句 lookup.lookupClass() 获取的就是 metafactory 的第一个参数 lookup.in(Phone.class)中的 Phone.class, 如果用原始的 lookup 的话, 会获取到 Object.class, 显然 Object 的 classloader 会找不到 Phone.class, 但是可以找到其他和它位于同个 classloader 中的类, 比如 String.class.
@gzlt 感谢感谢,辛苦了
这个历史聊天记录可以找回来吗?感觉上次对答状态很好,但是关了之后聊天记录找不到了。
关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   887 人在线   最高记录 6679   ·     Select Language
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.5 · 12ms · UTC 22:01 · PVG 06:01 · LAX 15:01 · JFK 18:01
Developed with CodeLauncher
♥ Do have faith in what you're doing.