我最近在Eclipse中查看了我的警告并遇到了这个问题:

如果方法可以声明为static,它将给出编译器警告.
[edit] Eclipse帮助中的确切引用,对私有和最终的压力:
启用后,编译器将对private或final方法发出错误或警告,并且仅引用静态成员.
是的我知道我可以关掉它,但我想知道打开它的原因?
为什么将每个方法声明为静态是一件好事?
这会带来任何性能优势吗?(在移动领域)
指出一个方法为静态,我想是显示你不使用任何实例变量因此可以移动到utils样式类?
在一天结束时,我应该关闭它"忽略"或者我应该修复它给我的100多个警告吗?
你认为这只是污染代码的额外关键字,因为编译器无论如何只会内联这些方法吗?(有点像你没有声明每个变量你可以最终但你可以).
下面的代码分别调用两个简单的函数100亿次.
public class PerfTest {
private static long l = 0;
public static void main(String[] args) {
List<String> list = Arrays.asList("a", "b");
long time1 = System.currentTimeMillis();
for (long i = 0; i < 1E10; i++) {
func1("a", "b");
}
long time2 = System.currentTimeMillis();
for (long i = 0; i < 1E10; i++) {
func2(list);
}
System.out.println((time2 - time1) + "/" + (System.currentTimeMillis() - time2));
}
private static void func1(String s1, String s2) { l++; }
private static void func2(List<String> sl) …Run Code Online (Sandbox Code Playgroud) 我需要在 Java 中使用必须尽可能快的序列化库。这个想法是创建各种方法来序列化指定的值及其关联的键,并将它们放在字节缓冲区中。由于需要序列化的对象可能很多,因此必须创建多个包装此缓冲区的对象。
注意事项:我知道 Unsafe 类可能不会在每个 JVM 中实现,但这不是问题。过早优化:这个库必须很快,而且这个序列化是它唯一要做的事情。序列化后的对象通常很小(小于 10k),但它们很多,最大可达 2Gb。底层缓冲区可以扩展/减少,但我将跳过实现细节,该方法类似于 ArrayList 实现中使用的方法。
澄清我的情况:我有各种方法,例如
public void putByte(short key, byte value);
public void putInt(short key, int value);
public void putFloat(short key, float value);
... and so on...
Run Code Online (Sandbox Code Playgroud)
这些方法将键和值附加到字节流中,因此如果我调用 putInt(-1, 1234567890) 我的缓冲区将如下所示:(流是大端)
key the integer value
[0xFF, 0xFF, 0x49, 0x96, 0x02, 0xD2]
Run Code Online (Sandbox Code Playgroud)
最后, 必须调用像toBytes()这样的方法来返回一个字节数组,该数组是底层缓冲区的修剪(如果需要)版本。
现在,我的问题是:在 Java 中执行此操作的最快方法是什么?
我在谷歌上搜索并偶然发现了各种页面(其中一些在 SO 上),我也做了一些基准测试(但我在基准测试方面并没有真正的经验,这就是我向更有经验的程序员寻求帮助的原因之一话题)。
我想出了以下解决方案:
1-最直接的:字节数组
如果我必须序列化一个 int ,它看起来像这样:
public void putInt(short key, int value)
{
array[index] = (byte)(key >> 8);
array[index+1] = (byte) …Run Code Online (Sandbox Code Playgroud) java ×4
performance ×2
arrays ×1
benchmarking ×1
coding-style ×1
jvm ×1
jvm-hotspot ×1
memory ×1
optimization ×1
static ×1