小编His*_*ham的帖子

Sun JVM(JRE jre1.6.0_24)段错误NET_Read

我们的JVM在生产过程中不时会出现分段故障,感觉就像是某种竞争条件.

设置重现: - Linux上的JRE jre1.6.0_24 Ubuntu 9.10和Debian 4.x 64位多核AMD - Apache tomcat 6.0.24 ... 6.0.32

用fastdebug重新编译java会重现问题(这个gcc -g1).但是,它不会产生比我们在这里有更多有用的信息.

使用debug重新编译java不会重现问题(这是gcc -g加上可能的一些-DSOMETHING代码调试标志).

任何帮助试图解决这个问题的人都会非常感激.

使用Oracle的1.6.0_24 jdk生成的核心文件.gdb出现了:

    Program terminated with signal 11, Segmentation fault.
    #0  0x00002aaab7b10666 in NET_Read () from
    /usr/local/jdk1.6.0_24/jre/lib/amd64/libnet.so
Run Code Online (Sandbox Code Playgroud)

好的,所以我的装配真的很生锈.记住这一点:

    (gdb) info frame
    Stack level 0, frame at 0x4b3e0040:
     rip = 0x2aaab7b10666 in NET_Read; saved rip 0x2aaab7b0d53b
     called by frame at 0x4b3f0090
             Arglist at 0x4b3dffc8, args:
     Locals at 0x4b3dffc8, Previous frame's sp is 0x4b3e0040
     Saved registers:
     rbx at 0x4b3e0008, rbp at 0x4b3e0010, r12 …
Run Code Online (Sandbox Code Playgroud)

java sockets jvm segmentation-fault

16
推荐指数
1
解决办法
2803
查看次数

Java Map :: hashCode()碰撞 - 为什么?

以下代码导致为两个地图生成相同的哈希码,任何想法?


import java.util.HashMap;
import java.util.Map;

public class Foo
{
    @SuppressWarnings("unchecked")
    public static void main (String[] args)
    {
        Map map;

        map = new HashMap();

        map.put("campaignId", 4770L);
        map.put("location", "MINI_PROFILE");
        map.put("active", "true");
        map.put("lazy", true);

        System.out.println(map.hashCode());

        map = new HashMap();

        map.put("campaignId", 4936L);
        map.put("location", "MINI_PROFILE");
        map.put("active", "true");
        map.put("lazy", false);

        System.out.println(map.hashCode());


    }
}

Run Code Online (Sandbox Code Playgroud)

结果是:

-1376467648
-1376467648
Run Code Online (Sandbox Code Playgroud)

简单地更改密钥名称就足以使代码生成两个不同的哈希代码.

java map hashcode collision

4
推荐指数
2
解决办法
3845
查看次数

标签 统计

java ×2

collision ×1

hashcode ×1

jvm ×1

map ×1

segmentation-fault ×1

sockets ×1