面试题(2)

【反射】-常见面试题汇总

什么是反射?
反射就是动态加载对象,然后可以拿到这个对象的所有方法和属性,对于任何一个对象,都能动态获取它的任何属性或者任意一个方法。这种动态调用对象的任意信息的功能就是java的反射机制。

如何使用java的反射?
通过全类名Class.forName(“全类名”);来获取对象。
类名.class;获得。
对象.getClass(),来获得。
反射的应用场景
通常使用在框架的底层。
实现ORM框架,通过读取数据表,然后运用反射机制,创建对象及其属性。
如何通过反射获取类的private的属性。
在父类中填写该属性的get&set方法。通过反射调用方法获取。
先获取对象,然后通过getDeclaredField方法获取私有字段
通过setAccessible让jvm不检查权限
通过set方法设置对象为具体的值
通过获取构造方法来创建对象。
newInstance()方法
getConstructor()方法。
区别:newInstance方法只能获取空参的构造
getConstructor方法可以通过传入的参数类型或者数量来获取

【JVM】-常见面试题总结

什么是jvm、jdk、jre?
jdk:编译。
jre:运行时环境。
jvm:在jre中。
jvm中分为几个区?每个区的作用?

栈区:

栈区又分为java虚拟机栈和本地方法栈。
栈中主要是运行程序中的方法,存放方法的局部变量,返回类型等的内容。每个方法执行都会创建一个栈帧,用于存放局部变量表,每个方法从开始执行到执行结束都对应这一个入栈和出栈的过程。
本地方法栈是jvm调用操作系统的api,因为jvm运行也要依赖操作系统。本地方法栈主要是和操作系统相关。也是跨平台原理的关键点。

堆区:

堆是所有线程的共享区域,虚拟机一启动就创建,用来存放对象的实例。
堆是垃圾回收的主要区域。

方法区:

被所有线程共享的区域,用于存放已经被加载的类的信息,常量,静态变量等数据。
垃圾回收器很少光顾这个区域,主要针对常量池进行回收。

扫描二维码关注公众号,回复: 5056783 查看本文章

程序计数器:

当前线程所执行的行号指示器,通过改变行号来执行下一条指令,每条线程拥有自己独立的程序计数器。

堆的划分?
堆划分为:新生代、老年代、永久代。垃圾回收频率由多到少。
新生代又分了一个年轻区,两个幸存者区。
每个程序都有一个筏值,年轻区每经过一次垃圾回收,筏值就会增加1,当达到筏值,就会复制到下一个区域,到幸存区,同样道理幸存区也会有一个目标筏值,达到后,会复制到下一个区域。每次复制到下一个区域,上一个区域的对象就会被清空,下一个区域就会被内存整理的存放各个对象,内存整理就不会出现内存碎片。这就是我对复制法垃圾回收的理解。
垃圾回收常见算法?
引用计数 :古老,每次创建对象,就会计数加1,删除一次,计数减一,垃圾回收就手机计数为0的对象,无法解决循环引用的问题。
复制:把内存划分为两个相等的区域,垃圾回收时,遍历当前的使用区域,把正在使用的对象复制到另一个区域中,清空上一个内存区,缺点就是需要两倍内存空间。
标记清除法:当对象创建时,将和这个对象有关的所有的对象做一个标记,然后遍历整个堆,如果有未标记的对象,就对未标记的进行垃圾回收。缺点:需要暂停整个应用,并且垃圾回收后会产生碎片。
标记整理法:结合标记清除法和复制法,解决了产生碎片的缺点。
垃圾收集器是什么?
对垃圾回收算法的具体实现。
对年轻代收集的:次收集。
对老年代手机的:全收集。

猜你喜欢

转载自blog.csdn.net/weixin_44001965/article/details/86625748