⭐包装类型常量池技术了解吗?
常量池也叫缓存池,主要存储一些常用的数据。基本类型除开double和float浮点数太大了,没有常量池,其他都实现了。当发生自动装箱的时候,如果基本类型的值在缓存的范围内,则不会重新创建对象,而是复用缓存池中已经创建好的对象。
不同的包装类缓存的范围不同,也可以通过jvm参数上调。
原理:
- 装箱:调用的是XXX.valueOf()方法;在这个方法里面有缓存区间的代码。
- 拆箱:调用的是XXX.intValue()方法。
⭐String、StringBuffer和StringBuilder的区别是什么?String为什么是不可变的?
- 可变性:String内部的value值是final修饰的,所以它是一个不可变的类。因此每次修改String的值的时候都会new一个新的对象。而StringBuffer和StringBuilder是可变的。
- 线程安全性:
- String由于它的不可变性,导致了它是一个线程安全的
- StringBuffer也是线程安全的,因为它每个方法里面都使用了synchronized关键字
- StringBuilder不是线程安全的。
- 性能:StringBuilder>StringBuffer>String
- 存储:
- String存储在字符串常量池里面
- StringBuffer和StringBuilder是存储在堆内存空间的。其次这两个类都有一个共同的父类。
字符串常量池,是 JVM 为了提升性能和减少内存消耗针对字符串(String 类)专门开辟的一块区域,主要目的是为了避免字符串的重复创建。
具体要看JVM了。
java反射
- 本质:是运行时动态操作类的能力
- 实现:是直接读取操作编译之后的类.class文件,更多就是JVM了。
- 隐患:对性能和安全是有影响的。
BIO、NIO、AIO有什么区别?
- BIO:同步阻塞,传统的socket
- NIO:异步阻塞,selector+channel
- AIO:异步非阻塞,缓冲区+CompletionHandler,实用性不如NIO普及。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 coder-xuyong!
评论





