小编Nit*_*art的帖子

如何动态修改java.lang类?

我正在寻找一种通过重写字节代码并重新加载类来动态添加字段到线程的方法,不确定它是否完全可能.欢迎任何指示.我发现了一些关于修改和加载类的信息,我知道JRebel可以无缝地交换你的代码,但不确定这里是否适用相同的方法/工具.

这里的动机是探索理论上更好的替代线程本地对象.如果方法有效,我应该能够用注释替换本地线程,结果应该优于当前的JDK实现.

PS:请救我"所有邪恶言论的根源"

澄清用例:

想象一下,我有一个ThreadLocal类:


class A {
   ThreadLocal<Counter> counter;
   ...
   counter.get().inc()
}
Run Code Online (Sandbox Code Playgroud)

我想用注释替换它:


class A {
   @ThreadLocal
   Counter counter;
   ...
   counter.inc()
}
Run Code Online (Sandbox Code Playgroud)

但是代替上面的代码生成我想改变Thread,这样Thread现在有一个Acounter字段,实际的代码将是:


class A {
   // Nothing here, field is now in Thread
   ...
   Thread.currentThread().Acounter.inc()
}
Run Code Online (Sandbox Code Playgroud)

java classloader dynamic-class-loaders dynamic-class-creation

16
推荐指数
4
解决办法
4613
查看次数

JVMTI代理如何在启动时设置JVM标志?

为了支持更好的分析数据,我希望我的JVMTI代理能够启用几个JVM标志.有问题的代理是Honest-Profiler,它只能在启动时加载.

我想启用标志: -XX:+UnlockDiagnosticVMOptions -XX:+DebugNonSafepoints

根据此处记录的问题,如果标志不在,我们会得到一个有偏见的配置文件.最好不要警告用户并启用标志.

java jvm jvmti

7
推荐指数
1
解决办法
688
查看次数

Thread上的eetop字段是什么?

我找不到任何文件,只有以下讨论内容并不十分明确.

java

6
推荐指数
1
解决办法
594
查看次数

如何使用JMH正确评估'&'与'%'成本

所以这是我试图测试的简单事情,什么是更快的mod操作或AND一个(假设2的幂) - 这就是hashMap内部的作用.这是一个拼写正确的"测试"吗?我不得不承认jmh的内部结构并且在经过所有样本(我认为第3次)之后编写正确的微基准测试是一个相当大的挑战.:)

   @State(Scope.Thread)
@BenchmarkMode(org.openjdk.jmh.annotations.Mode.AverageTime)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class MeasureSpeedModuleVsAnd {

    public static void main(String[] args) throws Exception {
        Options opt = new OptionsBuilder()
                .include(MeasureSpeedModuleVsAnd.class.getSimpleName())
                .forks(1)
                .warmupIterations(1)
                .measurementIterations(5)
                .warmupTime(TimeValue.seconds(2))
                .build();

        new Runner(opt).run();

    }

    @Param({ "16", "32", "256", "1048576" /* 2 power of 10 */ })
    public int number_of_buckets;

    @Param({ "345984", "123456", "111", "98653" })
    public int hashcode;

    @Benchmark
    public int benchamark_modulo() {
        return hashcode % number_of_buckets;
    }

    @Benchmark
    public int benchmark_and() {
        return (number_of_buckets - 1) & hashcode;
    }
}
Run Code Online (Sandbox Code Playgroud)

java benchmarking jmh

5
推荐指数
1
解决办法
205
查看次数