小编hsi*_*nen的帖子

是否有一个Java字节码优化器,可以删除无用的gotos?

问题:我有一个方法可以编译超过8000字节的Java字节码.HotSpot有一个神奇的限制,使得JIT不会超过8000字节的方法.(是的,有一个庞大的方法是合理的.这是一个标记器循环.)该方法在库中,我不想要求库的用户必须配置HotSpot来停用魔术限制.

观察:反编译字节码表明Eclipse Java Compiler生成了许多无意义的getos.(javac甚至更糟.)也就是说,有些只能从跳跃中获得.显然,跳转到goto的跳转应该直接跳到goto跳转的地方,goto应该被消除.

问题:是否有针对Java 5类文件的字节码优化器,可以使无意义的跳转链变平,然后删除不必要的getos?

编辑:我的意思是:

8698:   goto    8548
8701:   goto    0
Run Code Online (Sandbox Code Playgroud)

显然,第二个goto只能通过跳转到8701到达,这可能也是直接跳转到0.

在第二次调查中,这种可疑模式更为常见:

4257:   if_icmpne   4263
4260:   goto    8704
4263:   aload_0
Run Code Online (Sandbox Code Playgroud)

显然,人们希望编译器将"不等于"比较反转为"相等"比较,跳转到8704并消除goto.

java optimization bytecode goto jvm-hotspot

18
推荐指数
1
解决办法
1659
查看次数

是否为未使用的模板类方法生成了对象代码?

我有一个C++模板类,它使用3个不同的类型参数进行实例化.有一种方法,类只需要对这些类型中的一种进行处理,而且不会使用其他两种类型进行调用.

是否会生成该方法的对象代码三次(对于实例化模板的所有类型),或者只生成一次对象代码(对于实际使用它的类型)?

c++ templates footprint

12
推荐指数
1
解决办法
1919
查看次数

如何选择HTTP servlet容器的最大线程数?

我正在开发一个在Jetty中作为servlet(使用阻塞IO)运行的restful Web服务.找出最大线程的最佳设置似乎很难.

是否有研究公式用于从其他设置的一些易于测量的特征中确定最大线程数?

java concurrency optimization servlets http

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

Java数组在HotSpot中使用内存的准确程度(即多少slop)?

C malloc实现通常不分配所请求的精确内存量,而是使用固定大小的内存运行,例如,使用两个幂的大小,因此1025字节的分配实际上需要一个2048字节的段,丢失1023个字节作为slop.

HotSpot是否对Java数组使用类似的分配机制?如果是这样,分配Java数组的正确方法是什么,这样就没有什么了不起?(例如,数组长度应该是2的幂,还是2的幂,减去一些固定的开销量?)

java arrays memory-management allocation jvm-hotspot

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

在aarch64上未对齐的SIMD加载/存储的性能

一个旧的回答表明,aarch64支持不对齐的读/写,并有一个关于性能成本提及,但目前还不清楚,如果回答的都是关于ALU和SIMD(128位寄存器)操作了。

相对于对齐的128位NEON加载和存储,在aarch64上未对齐的128位NEON加载和存储要慢多少(如果有的话)?

是否有针对未对齐SIMD加载和存储的单独指令(如SSE2的情况),或者已知对齐的加载/存储的指令与潜在未对齐的加载/存储的指令相同?

simd alignment neon arm64

5
推荐指数
2
解决办法
1186
查看次数

如何初始化指向nullptr的指针联合?

假设我有一个像这样的C++类:

class Container
{
private:
  union {
    Foo* foo;
    Bar* bar;
  } mPtr;
};
Run Code Online (Sandbox Code Playgroud)

该类将在堆栈上构建.即它不会被new编辑,所以我不能只声明归零operator new.

我可以在构造函数中使用初始化程序设置mPtrnullptr某种程度吗?

Container()
 : mPtr(nullptr)
{
}
Run Code Online (Sandbox Code Playgroud)

不编译.甚至没有添加union类型的虚拟成员nullptr_t.

Container()
 : mPtr.foo(nullptr)
{
}
Run Code Online (Sandbox Code Playgroud)

也没有编译.

c++ unions

4
推荐指数
1
解决办法
412
查看次数

如何告诉GWT不要编译特定于浏览器的GWT核心和JDK仿真的排列?

我有一些代码用于使用GWT 1.x进行编译并链接到单个脚本.现在使用GWT 2.0.x(特别是GWT 2.0.3),编译器编译6个特定于浏览器的排列,然后单脚本链接器拒绝链接.

我不使用GWT小部件.我只使用来自GWT核心的com.google.gwt.user.client.Timer,com.google.gwt.core.client.JavaScriptObject/EntryPoint/JavaScriptException以及java.lang和java.util仿真.

如何在没有浏览器特定排列的情况下告诉GWT编译核心内容?

gwt

2
推荐指数
1
解决办法
3771
查看次数