哪些情况下的对象会被垃圾回收机制处理掉?
利用可达性分析算法,虚拟机会将一些对象定义为 GC Roots,从 GC Roots 出发沿着引用链
向下寻找,如果某个对象不能通过 GC Roots 寻找到,虚拟机就认为该对象可以被回收掉。
哪些对象可以被看做是 GC Roots 呢?
1)虚拟机栈(栈帧中的本地变量表)中引用的对象;
2)方法区中的类静态属性引用的对象,常量引用的对象;
3)本地方法栈中 JNI(Native 方法)引用的对象;
对象不可达,一定会被垃圾收集器回收么?
即使不可达,对象也不一定会被垃圾收集器回收,1)先判断对象是否有必要执行 finalize()方法,对象必须重写 finalize()方法且没有被运行过。2)若有必要执行,会把对象放到一个 队列中,JVM 会开一个线程去回收它们,这是对象最后一次可以逃逸清理的机会.
讲一下常见编码方式?
编码的意义:计算机中存储的最小单元是一个字节即 8bit
,所能表示的字符范围是
255
个,
而人类要表示的符号太多,无法用一个字节来完全表示,固需要将符号编码,将各种语言翻
译成计算机能懂的语言。
1
)ASCII 码:总共
128
个,用一个字节的低
7
位表示,0〜
31
控制字符如换回车删除等;32~126
是打印字符,可通过键盘输入并显示出来;
2
)
ISO-8859-1,
用来扩展
ASCII
编码,
256
个字符,涵盖了大多数西欧语言字符。
3
)
GB2312:
双字节编码,总编码范围是
A1-A7,A1-A9
是符号区,包含
682
个字符,
B0-B7
是汉字区,包含 6763
个汉字;
4
)
GBK
为了扩展
GB2312,
加入了更多的汉字,编码范围是
8140~FEFE
,有
23940
个码位,能表示 21003
个汉字。
5
)
UTF-16: ISO
试图想创建一个全新的超语言字典,世界上所有语言都可通过这本字典Unicode 来相互翻译,而
UTF-16
定义了
Unicode
字符在计算机中存取方法,用两个字节来表示 Unicode
转化格式。不论什么字符都可用两字节表示,即
16bit
,固叫
UTF-16
。
6
)
UTF-8
:
UTF-16
统一采用两字节表示一个字符,但有些字符只用一个字节就可表示,浪费存储空间,而 UTF-8
采用一种变长技术,每个编码区域有不同的字码长度。 不同类型的字 符可以1~6
个字节组成。
静态代理和动态代理的区别
代理是一种常用的设计模式,目的是:为其他对象提供一个代理以控制对某个对象的访问,
将两个类的关系解耦。代理类和委托类都要实现相同的接口,因为代理真正调用的是委托类
的方法。
1)静态代理:
由程序员创建或是由特定工具生成,在代码编译时就确定了被代理的类是哪
一个是静态代理。静态代理通常只代理一个类;
2)动态代理:
在代码运行期间,运用反射机制动态创建生成。动态代理代理的是一个接口
下的多个实现类;
举例:Spring
的
AOP
机制 就是动态代理机制