前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Java面试高频知识点总结 part4

Java面试高频知识点总结 part4

作者头像
Steve Wang
发布2020-11-12 11:14:06
2860
发布2020-11-12 11:14:06
举报
文章被收录于专栏:从流域到海域

整理自各种各样的面经、博客等,对问题的回答博主自身优化过。

Java为什么不支持多继承,使用多继承的坏处是什么?

钻石问题(菱形继承)所引发的二义性问题: 假设类B和类C都继承自类A,且都重写了类A的某一个方法,而现在又有类D继承自类A和类B,那么此时类D会继承B、C的该同名方法,那么类D继承的该方法究竟是来自类A还是类B呢?这里产生了歧义。

同理可以扩展到多个类:

  • 若子类继承的父类中拥有相同的成员变量,子类在引用该变量时将无法判别使用哪个父类的成员变量
  • 若一个子类继承的多个父类拥有相同方法,同时子类并未覆盖该方法(若覆盖,则直接使用子类中该方法),那么调用该方法时将无法确定调用哪个父类的方法。

这就是为什么Java利用接口来变相实现多重继承,接口中的方法都是未实现的,不会出现歧义问题。

Java中什么情况下会出现内存泄露?

Memory Leak是指程序中已经动态分配的堆内存由于某种原因程序未释放或者无法释放,造成系统内存的浪费,导致程序运行减慢甚至是系统崩溃等严重后果。

Java中有8种情况会出现内存泄露:

  1. 静态集合类:HashMap、LinkedList等。如果这些容器是静态的,那么它们的声明周期与程序一致,则容器中的对象在程序结束之前将不能被释放。简单而言,长生命周期的对象持有短生命周期对象引用,尽管短生命周期的对象不再使用,但是因为长生命周期对象持有它的引用而导致不能被回收。
  2. 各种连接:数据库连接、网络连接、IO连接等。所有的连接在使用后,都需要使用close方法来释放连接,只有连接关闭后,垃圾回收器才会回收该连接对象。在访问数据库连接的过程中,如果不显式关闭ConnectionStatementResultSet,将会造成大量对象无法被回收,从而引起内存泄露。
  3. 变量不合理的作用域:一般而言,一个变量定义的作用范围大于其使用范围,很有可能会发生内存泄露;
  4. 对象不再使用却未设置为null:某些对象不使用之后应该立即设为null,否则很有可能导致内存泄露。例:栈中弹出的对象不再使用应设置为null,否则GC不会释放这部分内存。
  5. 内部类对象持有外部类对象:如果一个外部类的实例对象的方法返回一个内部类的实例对象,这个内部类对象就被长期引用了。即使那个外部类实例对象不再被使用,但由于内部类持有外部类的实例对象,外部类对象并不会被垃圾回收,这也会造成内存泄露。
  6. 哈希值被改变:当一个对象被存储进HashSet集合后,就不能修该这个对象中那些参与计算哈希值的字段了,否则,对象修改后的哈希值与最初存储进HashSet集合中的哈希值就不一样了。这种情况下,contains方法检索该对象时将返回false,因而也无法单独删除该对象,造成内存泄露。
  7. 缓存泄露:对象被放到缓存中后容易被遗忘,从而导致其占有的空间不会被释放。可以使用WeakHashMap来替代HashMap,这种Map的特点是,如果除了自身对key存在引用,没有其他引用存在时会自动丢弃该key。
  8. 监听器和回调: 如果客户端在API中注册回调,却没有显式的取消,那么就会积聚。需确保回调立即被当做垃圾回收的最佳方法是只保存它的弱引用,例如存储为WeakHashMap中的键。

参考

java中内存泄露8种情况的总结

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/11/10 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Java为什么不支持多继承,使用多继承的坏处是什么?
  • Java中什么情况下会出现内存泄露?
  • 参考
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档