- 如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?
垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。当对象在JVM运行空间中无法通过根集合到达(找到)时,这个对象被称为垃圾对象,这个对象就可以被回收了。根集合是由类中的静态引用域与本地引用域组成的,JVM通过根集合索引对象。 在释放对象占用的内存之前,垃圾收集器会调用对象的finalize()方法,一般建议在该方法中释放对象持有的资源。如果对象的引用被置为null,垃圾收集器不会立即释放对象占用的内存,在下一个垃圾回收周期中,这个对象将是可被回收的。
2.继承和聚合的区别在哪?
继承:指的是一个类(称为子类)继承另外的一个类(称为基类)的功能,并增加它自己的新功能的能力,继承是类与类之间最 常见的关系。类图中继承的表示方法是从子类拉出一条闭合的、单键头(或三角形)的实线指向基类。
聚合:指的是整体与部分的关系。通常在定义一个整体类后,再去分析这个整体类的组成结构。从而找出一些组成类,该整体类和组成类之间就形成了聚合 关系。例如一个航母编队包括海空母舰、驱护舰艇、舰载飞机及核动力攻击潜艇等。需求描述中“包含”、“组成”、“分为…部分”等词常意味着聚合关系。
3.动态代理的几种实现方式,分别有什么优缺点?
jdk动态代理和cglib动态代理。两种方法同时存在,各有优劣。jdk动态代理是由java内部的反射机制来实现的,cglib动态代理底层则是借助asm来实现的。总的来说,反射机制在生成类的过程中比较高效,而asm在生成类之后的相关执行过程中比较高效(可以通过将asm生成的类进行缓存,这样解决asm生成类过程低效问题)。还有一点必须注意:jdk动态代理的应用前提,必须是目标类基于统一的接口。如果没有上述前提,jdk动态代理不能应用。由此可以看出,jdk动态代理有一定的局限性,cglib这种第三方类库实现的动态代理应用更加广泛,且在效率上更有优势。
西安尚学堂练习09.16|Java编程笔试面试题
最新推荐文章于 2024-10-17 19:11:48 发布