请教各位大拿两个问题:1. HashSet,HashMap中的Hash算法是什么类型的运算?整数运算?浮点运算?2. 使用new关键字创建对象时,其耗时长短跟cpu的什么性能有关?整数运算?浮点运算?或是其他?由于本人非科班出生,对计算机原理了解不是很透彻,忘各位大拿不吝赐教。感谢!

解决方案 »

  1.   

    补充一个问题:对于一个运行 多线程密集型计算的Java程序(计算所需数据全部加载至内存) 的服务器而言,计算性能的提升在硬件上需要注意哪些方面?
      

  2.   

    1.按整数浮点数分hash是整数的.
        static int hash(int h) {
            // This function ensures that hashCodes that differ only by
            // constant multiples at each bit position have a bounded
            // number of collisions (approximately 8 at default load factor).
            h ^= (h >>> 20) ^ (h >>> 12);
            return h ^ (h >>> 7) ^ (h >>> 4);
        }2.
    创建对象跟对象的复杂程度有关,如果对象的属性方法很多,那么需要的指令就相应多了,消耗的时间也第多,下面以这个为例,看java虚拟机干了啥 Integer i = new Integer(12);
    Double d = new Double(12.5); Code:
      0:   new     #16; //class java/lang/Integer
      3:   dup
      4:   bipush  12
      6:   invokespecial   #18; //Method java/lang/Integer."<init>":(I)V
      9:   astore_1  10:  new     #21; //class java/lang/Double
      13:  dup
      14:  ldc2_w  #23; //double 12.5d
      17:  invokespecial   #25; //Method java/lang/Double."<init>":(D)V
      20:  astore_2
      21:  return
    上面那段告诉我们,在new整形或者浮点型的时候,编译器都是这样干的
    要new整形12吗?好,把12压到栈中,要new浮点数12.5吗?好,把12.5压到栈中。
    同理对象也是这样,当然要更复杂就是。
    当然这还不是底层,更深入就涉及到汇编和二进制等等...
      

  3.   

    感谢 eXeSP 的回复.关于第二个问题, 我补充下这个问题的需求: 我想确切的知道,在 new 一个相同类型的对象时,比如同样都是new一个HashSet,对于cpu来说, 它的什么性能影响到new的效率? 主频? 缓存? 整型运算能力? 浮点运算能力? 说是其他.
      

  4.   

    1集合运算
    2new的对象是被转换为什么类型 CPU就相应的调用运算类型  如 浮点数  整数 ...
      

  5.   


    你的意思是CPU的那种性能对new对象有影响吗?咳咳,这应该涉及到计算机组成原理的内容,CPU的处理指令的过程。在大多数情况下,new一个对象(比如HashSet)并不需要很多指令,假设在new某个对象的是需要执行很多指令,那么它的性能跟cpu某些指标还是有关系的:如时钟频率,前端总线,缓存,指令集等。