首页>新闻>沈阳靠前的java学习班

沈阳靠前的java学习班

来源:达内教育IT培训沈阳分校

时间:2021/7/31 16:14:03

沈阳靠前的java学习班,小编在这里为您推荐达内教育,凭借雄厚的技术研发实力、过硬的教学质量、成熟的就业服务团队,为学员提供强大的职业竞争力,在用人企业中树立了良好的口碑.为不影响您的学习,来校区前请先电话或QQ咨询,方便我校安排相关课程的专业老师为您解答~接下来达内教育的小编为您分享,Java中八个潜在的内存泄露风险,你知道几个?

虽然Java程序员不用像C/C++程序员那样时刻关注内存的使用情况,JVM会帮我们处理好这些,但并不是说有了GC就可以高枕,内存泄露相关的问题一般在测试的时候很难发现,一旦上线流量起来可能马上就是一个诡异的线上故障。

  1. 内存泄露的定义

  如果GC无法回收内存中不再使用的对象,则定义为内存有泄露。

  2. 未关闭的资源类

  当我们在程序中打开一个新的流或者是新建一个网络连接的时候,JVM都会为这些资源类分配内存做缓存,常见的资源类有网络连接,数据库连接以及IO流。值得注意的是,如果在业务处理中异常,则有可能导致程序不能执行关闭资源类的代码,因此较好按照下面的做法处理资源类。

  public void handleResource() {

      try {

          // open connection

          // handle business

      } catch (Throwable t) {

          // log stack

      } finally {

          // close connection

      }

  }

  3. 未正确实现equals()和hashCode()

  假如有下面的这个类:

  public class Person {

      public String name;

      

      public Person(String name) {

          this.name = name;

      }

  }

  并且如果在程序中有下面的操作:

  @Test

  public void givenMapWhenEqualsAndHashCodeNotOverriddenThenMemoryLeak() {

      Map<Person, Integer> map = new HashMap<>();

      for(int i=0; i<100; i++) {

          map.put(new Person("jon"), 1);

      }

      Assert.assertFalse(map.size() == 1);

  }

  可以预见,这个单元测试并不能通过,原因是Person类没有实现equals方法,因此使用Object的equals方法,直接比较实体对象的地址,所以map.size() == 100

  如果我们改写Person类的代码如下所示:

  public class Person {

      public String name;

      

      public Person(String name) {

          this.name = name;

      }

      

      @Override

      public boolean equals(Object o) {

          if (o == this) return true;

          if (!(o instanceof Person)) {

              return false;

          }

          Person person = (Person) o;

          return person.name.equals(name);

      }

      

      @Override

      public int hashCode() {

          int result = 17;

          result = 31 * result + name.hashCode();

          return result;

      }

  }

  则上文中的单元测试就可以顺利通过了,需要注意的是这个场景比较隐蔽,一定要在平时的代码中注意。

  • 上一篇:沈阳java开发选达内
  • 下一篇:沈阳前几的java培训机构地址在哪
  • 相关推荐 更多>

    沈阳当地有名的短视频拍摄剪辑培训...

    沈阳学视频剪辑有什么靠谱的培训机...

    沈阳皇姑区短视频剪辑培训去哪里

    沈阳评价高的pr影视后期剪辑培训...

    沈阳精选几家口碑出名的短视频拍摄...

    沈阳本地值得力推的短视频拍摄剪辑...

    预约体验课

    版权所有:搜学搜课(www.soxsok.com)

  • 在线咨询
  • 电话咨询
  • 预约试听

  • ;