相关疑难解决方法(0)

如何在JDBC中建立连接池?

任何人都可以提供有关如何建立JDBC连接池的示例或链接吗?

从搜索谷歌我看到许多不同的方式这样做,这是相当混乱.

最终我需要代码来返回一个java.sql.Connection对象,但我无法入门.欢迎提出任何建议.

更新: 没有javax.sql或java.sql已经汇集连接实现?为什么不最好使用这些?

java connection-pooling jdbc

104
推荐指数
8
解决办法
18万
查看次数

JVM如何确保System.identityHashCode()永远不会改变?

通常,默认实现Object.hashCode()是内存中对象的已分配地址的某个函数(尽管这不是JLS强制要求的).鉴于VM在内存中分流对象,为什么System.identityHashCode()在对象的生命周期内返回的值永远不会改变?

如果它是"一次性"计算(对象的hashCode计算一次并隐藏在对象标题或其他东西中),那么这是否意味着两个对象可能具有相同的identityHashCode(如果它们碰巧首先在内存中的相同地址)?

java jvm heap-memory hashcode

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

什么是Java中的"内部地址"?

在Javadoc for Object.hashCode()中声明

尽管合理实用,但是由class定义的hashCode方法Object确实为不同的对象返回了不同的整数.(这通常通过将对象的内部地址转换为整数来实现,但Java™编程语言不需要此实现技术.)

这是一个常见的miconception,这与内存地址有关,但它并没有因为它可以在没有通知的情况下改变,而hashCode()不会,也不能改变对象.

@Neet提供了一个很好的答案的链接/sf/answers/39579151/但我正在寻找更多细节.


这是一个例子来说明我的担忧

Field theUnsafe = Unsafe.class.getDeclaredField("theUnsafe");
theUnsafe.setAccessible(true);
Unsafe unsafe = (Unsafe) theUnsafe.get(null);

for (int t = 0; t < 10; t++) {
    System.gc();
    Object[] objects = new Object[10];
    for (int i = 0; i < objects.length; i++)
        objects[i] = new Object();

    for (int i = 0; i < objects.length; i++) {
        if (i > 0) System.out.print(", ");
        int location = unsafe.getInt(objects, Unsafe.ARRAY_OBJECT_BASE_OFFSET + Unsafe.ARRAY_OBJECT_INDEX_SCALE * i);
        System.out.printf("%08x: hc= …
Run Code Online (Sandbox Code Playgroud)

java memory unsafe hashcode low-level

23
推荐指数
2
解决办法
2355
查看次数

何时使用System.identityhashcode()和hashcode()方法?

何时使用System.identityhashcode()和hashcode()方法?*

java hashcode

9
推荐指数
1
解决办法
1802
查看次数

jvm何时在对象头中分配哈希码值

我了解到java 对象头包含hashcode,gc year,biased lock等信息.然后一个谜题来到我面前,为了明确表达我的问题.我举个例子.
这是代码:

public class Demo{
    @Override
    public int hashCode(){
        System.out.println("the hashCode method was called");
        return super.hashCode();
    }

    public static void main(String[] args){
        Demo demo = new Demo();
        System.out.println("after generate an object");
        //
        Set<Demo> set = new HashSet<Demo>();
        set.add(demo);
    }
}
Run Code Online (Sandbox Code Playgroud)

并输出:

after generate an object
the hashCode method was called
Run Code Online (Sandbox Code Playgroud)

我想当我们新建一个对象时,jvm会在对象头中设置hashcode.但是如果为了生成hashCode,它应该调用这个对象的hashCode方法. 但是根据输出似乎它没有在新的对象时调用hashCode方法.并将值添加到hashSet 中调用hashCode方法,这是预期的.

所以我的问题是:jvm什么时候在对象头中分配哈希码值?它发生在一个新的对象阶段?

  • 如是.为什么它没有调用hashcode方法,没有这个如何计算这个对象的hashcode.
  • 如果第唔......这是毫无意义的是更新哈希码的对象头 …

java jvm

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

hashcode是否返回内存地址?

可能重复:
什么是对象hashcode
hashCode()和identityHashCode()如何在后端工作?

我不是在讨论String类或任何其他重写hashcode的类.假设我只是创建了一个Object类的新对象,那么hashcode()无论如何都会identityHashCode(Object x)返回true,返回该对象的内存地址?

java hashcode

3
推荐指数
1
解决办法
6561
查看次数

如何为仅包含对下一个节点的引用的节点实现HashCode()?

public class Node {
    private Node nextNode;

    @Override
    public int hashCode() {
        //How to implement this?
        //Because you just have a attribute which is a reference.
        //I think the attribute is almost useless, because if you use the HashCode of the attribute, you will finally fall into a useless loop.
        //Thus, I think you should find a way to represent the HashCode of reference (instance) itself.
    }
}
Run Code Online (Sandbox Code Playgroud)

从代码中的注释,我的问题实际上是如何唯一地标识引用本身,如C中的地址.

java reference hashcode

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

每个对象如何彼此不同

我在面向对象的上下文中读过有关对象标识的文章.其中说"你创建的每个对象都有自己独特的身份".但我对以下代码感到困惑.

     String str="Hello";
     String str1="Hello";
     System.out.println(str.hashCode()); //69609650
     System.out.println(str1.hashCode()); //69609650
     System.out.println(System.identityHashCode(str));//19313225
     System.out.println(System.identityHashCode(str1));//19313225
Run Code Online (Sandbox Code Playgroud)

str和str1的哈希码和identityhashcode是相同的.如果我理解错了,请纠正我.

另外hashcode()和system.identityhashcode()之间有什么区别

java hashcode

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

当我的对象调用 hascode 方法时

我怀疑何时会为我的对象调用 hashcode method() 。我重写了 MessageThread 类的 hashcode 方法。

MainActivity.java

        MessageThread messageThread=new MessageThread();

        
        Log.e("hashcode", messageThread.hashCode()+"");
        Messages messages=new Messages();

        messageThread.addMessage(messages);
        Log.e("hashcode after", messageThread.hashCode()+"");
            
Run Code Online (Sandbox Code Playgroud)

消息线程.java

公共类消息线程{

    List<Messages> messages = new ArrayList<Messages>();

    
    public boolean equals(Object o) 
    {

        if((o instanceof MessageThread )&&(((MessageThread)o).getMessages().size()==this.getMessages().size()))
        {
            return true;
        }
        else
        {
            return false;
        }
    }


    public int hashCode()
    {
        return messages.size();
    }

    public List<Messages> getMessages() {
        return messages;
    }


    public void setMessages(List<Messages> messages) {
        this.messages = messages;
    }

    public void addMessage(Messages message)
    {
        messages.add(message);
    }

}
Run Code Online (Sandbox Code Playgroud)

消息.Java

public …
Run Code Online (Sandbox Code Playgroud)

java

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