Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Unsafe.putAddress和Unsafe.putLong方法之间有什么区别?_Java - Fatal编程技术网

Java Unsafe.putAddress和Unsafe.putLong方法之间有什么区别?

Java Unsafe.putAddress和Unsafe.putLong方法之间有什么区别?,java,Java,方法和方法之间的区别是什么?javadoc在这方面非常清楚。对于putAddress()它说: 在目标地址实际写入的字节数可以通过参考#addressSize来确定 而putLong() 换句话说:一个地址可能会消耗一个长值的所有位,但不一定非得如此!然后将64位写入内存中的某个位置很可能不是一个好主意 因此,您需要能够区分这两种用例(从64位中写入n位,并精确写入64位) 但具体来说,地址大小的javadoc表示: 以字节为单位报告本机指针的大小。。。此值将为4或8 所以我想,从实用的角度来看

方法和方法之间的区别是什么?

javadoc在这方面非常清楚。对于
putAddress()
它说:

在目标地址实际写入的字节数可以通过参考#addressSize来确定

putLong()

换句话说:一个地址可能会消耗一个长值的所有位,但不一定非得如此!然后将64位写入内存中的某个位置很可能不是一个好主意

因此,您需要能够区分这两种用例(从64位中写入n位,并精确写入64位)

但具体来说,地址大小的javadoc表示:

以字节为单位报告本机指针的大小。。。此值将为4或8


所以我想,从实用的角度来看,这两种方法是一样的。因为现在,(几乎?!)所有存在的JVM A)实现这些方法,B)是64位JVM。(因此我假设32位JVM将返回4而不是8)

我认为您是对的。但是我对
putAddress()
进行了测试,方法
addressSize()
总是返回8。什么时候方法>代码> AddiSrsieSe()/Cuth.Read 4?我检查了方法的代码热点<代码> AddiSrsiZe()/Cuth>,实现总是返回<代码> siZeOf(Value*)< /Cuff>,使它成为底层C++编译器的依赖。是的,现在很清楚了。对于方法
putLong
,它将在给定地址写入
long
值。对于 PuxAdvult>代码,如果C++编译器中的指针占用了4个字节,则值<代码> x>代码>实际上占用4个字节,虽然<> > x>代码>是<代码>长< /COD>参数。