目录
3)我们能将 int 强制转换为 byte 类型的变量吗?如果该值⼤于byte 类型的范围,将会出现什么现象?
4)哪个类包含 clone ⽅法?是Cloneable 还是 Object?
7)我能在不进⾏强制转换的情况下将⼀个double 值赋值给 long 类型的变量吗?
8)3*0.1 == 0.3 将会返回什么?true 还是 false?
10)为什么 Java 中的 String 是不可变的(Immutable)?
14)Serial 与 Parallel GC之间的不同之处?
15)32 位和 64 位的 JVM,int 类型变量的长度是多数?
16)Java 中WeakReference 与 SoftReference的区别?
18)JVM 选项-XX:+UseCompressedOops 有什么作⽤?为什么要使⽤?
19)怎样通过 Java 程序来判断 JVM 是 32 位还是 64 位?
20)32 位 JVM 和 64 位 JVM 的最⼤堆内存分别是多数?
如果不是特别关心内存的话,使用bigdecimal,否则使用预定义精度double类型。
可以使用String接收byte[]参数的构造器来进行转换,需要注意的点是要是用的正确的编码,否则会使用平台默认的编码,这个编码可能跟原来的相同,也可能不同。
可以做强制转换,但是java中int是32位的,而byte是8位的,所以,如果强制转换的话,int类型的高24位将会被丢弃,byte类型的范围是从-128到128。
java..lang.Cloneable是一个标示性接口,不包含任何方法,clone方法在object类中定义。并且需要知道clone()方法是一个本地方法,这意味着它是由c或c++或其他本地语言实现的。
不是线程安全的操作。它涉及到多个指令,如读取变量值,增加,然后存储回内存,这个过程可能会出现多个线程交叉。
+=隐式的将加操作的结果类型强制转换为持有结果的类型。如果这个整型相加,如byte、short或者int,首先会将他们提升到int类型,然后再执行加法操作,则a+b会出现编译错误,但是a+=b没问题。
不行,你不能在没有进行强制转换的前提下将一个double值赋值给long类型的变量,因为double类型的范围比long类型更广,所以必须进行强制转换。
false,因为有些浮点数不能完全精确的表示出来
integer对象会占用更多的内存。Integer是一个对象,需要存储对象的元数据。但是int是一个原始类型的数据,所以占用的空间更少。
java中的string不可变是因为java的设计者认为字符串使用非常频繁,将字符串设置为不可变允许多个客户端之间共享相同的字符串
从java7开始,我们可以在Switch case中使用字符串,但这仅仅是一个语法糖。内部实现在Switch中使用字符串的hash code。
当你从一个构造器中调用另一个构造器,就是java中的构造器链。这种情况只在重载了类的构造器的时候才会出现。
java中,int类型变量的长度是一个固定值,与平台无关,都是32位。意思是说,在32位和64位的java虚拟机中,int类型的长度是相同的。
serial与parallel在gc执行的时候都会引起stop-the-world。他们之间主要不同serial收集器是默认的复制收集器,执行gc的时候只有一个线程,而parallel收集器使用多个gc线程来执行。
32位和64位的jvm,int类型变量长度是相同的,都是32位或者4个字节。
虽然WeakReference 与SoftReference 都有利于提高gc和内存的效率,但是WeakReference ,一旦失去最后一个强引用,就会被gc回收,而软引用虽然不能组织被回收,但是可以延迟jvm内存不足的时候。
WeakHashMap 的工作与正常的HashMap类似,但是使用弱引用作为key,意思就是当key对象没有任何引用时,key/value将会被回收。
当你将你的应用从32位的jvm迁移到64位的jvm时,由于对象的指针从32位增加到64位,因此堆内存会突然增加,差不多要翻倍。这也会对cpu缓存(容量比内存小很多)的数据产生不利影响。因为,迁移64位的jvm主要动机在于可以指定最大堆大小,通过压缩oop可以节省一定的内存。通过-XX:+UseCompressedOops 选项,jvm会使用32位的oop。而不是64位的oop。
你可以检查某些系统属性如sun.arch.data.model或os.arch来获取该信息。(System.getProperty("sun.arch.data.model"))= 32/64
理论上说32位的jvm堆内存可以达到2^32,即4GB,但,实际上会比这个小很多。不同操作系统之间不同,如Windows系统大学1.5GB,Solaris大约3GB。64位jvm系统允许指定最大的堆内存,理论上可以达到2^64,这是一个非常大的数字,实际上你可以指定堆内存大小到100GB。甚至有的jvm,如Azul,堆内存到1000G都是可能的。
jre代表java运行时,是运行java引用所必须的。jdk代表java开发工具,是java程序的开发工具母乳java编译器,它也包含jre。jvm代表java虚拟机,它的责任是运行java应用。jit代表即时编译,当代码执行的次数超过一定的阈值时,会将java字节码转换为本地代码,如,主要的热点代码会被转换为本地代码,这样有利于大幅度提高java应用的性能。