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压到栈中。 同理对象也是这样,当然要更复杂就是。 当然这还不是底层,更深入就涉及到汇编和二进制等等...
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压到栈中。
同理对象也是这样,当然要更复杂就是。
当然这还不是底层,更深入就涉及到汇编和二进制等等...
2new的对象是被转换为什么类型 CPU就相应的调用运算类型 如 浮点数 整数 ...
你的意思是CPU的那种性能对new对象有影响吗?咳咳,这应该涉及到计算机组成原理的内容,CPU的处理指令的过程。在大多数情况下,new一个对象(比如HashSet)并不需要很多指令,假设在new某个对象的是需要执行很多指令,那么它的性能跟cpu某些指标还是有关系的:如时钟频率,前端总线,缓存,指令集等。