反射概念:
1.在运行期jvm可以对一个类洞悉它的属性和方法,对任意一个对象都能访问它的属性和方法
2.依靠这种机制,可以动态创建一个类的对象和调用对象的方法
反射常用的API:
1.获取class对象:class.forname(完整类名)
2.获取构造方法:class对象.getConstructor
3.获取类的方法:getMethod和getMethods
4.创建一个对象实例:class对象.newInstance
反射的优点:
1.灵活性高,可以动态获取类的相关信息,动态创建对象实例
反射的缺点:
1.效率低,编译器没法对反射相关的代码做优化,例如jit编译器
2.会破坏封装,通过反射可以访问类的私有方法,不安全
使用场景:
1.开发框架,反射+xml+xml解析
扩展:
jit的概念:
当虚拟机发现某个方法或代码块运行特别频繁,就会把这些代码认定为“热点代码”(Hot Spot Code),为了提高热点代码的执行效率,在运行时,虚拟机将会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称 为即时编译器(Just In Time Compiler,JIT)
优化技术:
1.公共字表达式擦除
2.数组边界消除
3.方法内联
4.逃逸分析