为什么Java API会使用int,何时short甚至byte是足够的?
示例:DAY_OF_WEEK类中的字段Calendar使用int.
如果差异太小,那么为什么存在这些数据类型(short,int)?
在我的Java类中,我们刚刚了解了以下每种原始数据类型:
byteshortintlong由于long数据类型包含的位数最多,因此专门使用long数据类型以避免限制是否有意义?
问题
long数据类型是否有特殊的缺点?int数据类型而不是数据类型是否有意义long?我知道byte不是一个足以包含read方法结果的正确类型.
因此,read方法返回int类型值.
但我认为短类型比int更有效.
它可以包含范围-256~255的值.
为什么read方法返回int,而不是short?
我尝试通过将int基元更改为short来优化Android游戏的RAM使用率.在我这样做之前,我对Java中原始类型的性能感兴趣.
所以我使用caliper库创建了这个小测试基准.
public class BenchmarkTypes extends Benchmark {
@Param("10") private long testLong;
@Param("10") private int testInt;
@Param("10") private short testShort;
@Param("5000") private long resultLong = 5000;
@Param("5000") private int resultInt = 5000;
@Param("5000") private short resultShort = 5000;
@Override
protected void setUp() throws Exception {
Random rand = new Random();
testShort = (short) rand.nextInt(1000);
testInt = (int) testShort;
testLong = (long) testShort;
}
public long timeLong(int reps){
for(int i = 0; i < reps; i++){
resultLong += testLong;
resultLong -= …Run Code Online (Sandbox Code Playgroud) 我想这是一个基本问题,但是为什么没有sload指令?为什么您可以加载除short之外的所有基元?(有saload,但仍然...)
对于:
public class ShortTest {
public void test() {
short i = 1;
System.out.print(i);
}
}
Run Code Online (Sandbox Code Playgroud)
编译器仍使用iload_1。是因为16位类型短而处理器能处理更好的32位(因为所有现代处理器都是32/64位)?
在Java虚拟机指令集页面提供有关助记符如aaload信息,aastore ...等等.
但是无论这些助记符将占用的CPU周期被提及也没有对这些助记符的字节大小或字大小的任何信息.
知道在哪里可以找到这些信息吗?
java ×6
jvm ×2
android ×1
bytecode ×1
caliper ×1
integer ×1
java-api ×1
long-integer ×1
optimization ×1
performance ×1
types ×1