深圳建设执业注册中心网站,常见的简单的app开发,iis7站长工具,三合一网站管理系统Java的基本数据类型 类型意义取值boolean布尔值true或falsebyte8位有符号整型-128~127short16位有符号整型-pow(2,15)~pow(2,15)-1int32位有符号整型-pow(2,31)~pow(2,31)-1long64位有符号整型-pow(2,63)~pow(2,63)-1float32位浮点数IEEE754标准单精度浮点数double64位浮点数IE…Java的基本数据类型 类型意义取值boolean布尔值true或falsebyte8位有符号整型-128~127short16位有符号整型-pow(2,15)~pow(2,15)-1int32位有符号整型-pow(2,31)~pow(2,31)-1long64位有符号整型-pow(2,63)~pow(2,63)-1float32位浮点数IEEE754标准单精度浮点数double64位浮点数IEEE754标准双精度浮点数char字符型16位不带符号Unicode字符JVM本地对应的类型 typedef unsigned char jboolean;
typedef signed char jbyte;
typedef short jshort;
typedef int jint;
typedef long long jlong;
或
typedef __int64 jlong;
typedef double jdouble;
typedef float jfloat;
typedef unsigned short jchar;复制代码java的boolean在jvm中对应unsigned char类型0为false而非0为truebyte对应signed char类型short对应short类型int对应int类型long对应long long或者_int64类型double对应double类型float对应float类型char对应unsigned short类型。 编译器生成bytecode的类型 compiler将java编译为class而class文件除了结构信息和元数据等还包含了bytecode这其实就是虚拟机的指令好比物理机的机器指令。举个例子 public int getInt(){int a 100;return a;}复制代码生成该方法的bytecode为 bipush 100
istore_1
iload_1
ireturn复制代码bipush 100将100以byte型推进operand stack中istore_1将operand stack顶int型数值存入第二个局部变量iload_1将第二个int型局部变量推进operand stackireturn返回int。 对于一些toy jvm会简单地直接用C/C处理指令但对于工业级的openjdk中的Hotspot则会继续生成汇编指令执行。 从上面的情况可以看到java的int型编译成bytecode后可能会变成byte型来表示这个主要取决于java的int型数值的大小编译器会在编译期间判断大小从而生成对应的指令比如小于128时则为bipush大于138且小于32768时则为sipush它表示以short型表示而大于32768的则都是用ldc常量池来表示。 执行时的类型 在指令执行时JVM并不需要指明类型因为指令已经包含了类型信息但由于bytecode指令只用1个字节来表示所以指令数量需要控制并不是每种基础数据类型都有对应的操作指令比如iload lload fload dload对应int long float and double。类似还有ireturn lreturn freturn dreturn。 所以执行引擎只要根据不同的指令做不同的类型处理即可。 Java调本地 如果某个java对象调用了native方法此本地方法由编译器编译后access flags 会生成ACC_NATIVE标识执行引擎执行bytecode时根据java-jvm类型的映射也可能会涉及到类型处理。 相关阅读从JDK源码角度看并发锁的优化从JDK源码角度看线程的阻塞和唤醒从JDK源码角度看并发竞争的超时从JDK源码角度看Java并发的公平性从JDK源码角度看java并发线程的中断 广告时间可直接跳过 鄙人的新书《Tomcat内核设计剖析》已经在京东预售了有需要的朋友可以到 item.jd.com/12185360.ht… 进行预定。感谢各位朋友。 欢迎关注 这里写图片描述