2016-06-26 3 views
0

У меня только что было интервью, и меня спросили, возможно ли утечка памяти в Java. Я не знал ответа. Поэтому я хотел бы знать:Возможны ли утечки памяти на Java?

  • Как это было бы возможно?
  • Какой пример?
  • Возможно ли это, даже если Java использует сбор мусора?

ответ

3

Утечка памяти в более широком смысле - это любая ситуация, когда вы продолжаете удерживать выделенную память, которую вам больше не нужны, и больше не собираетесь использовать.

Рассмотрим следующий [правда] искусственный пример:

public class LeakingClass { 
    private static final List<String> LEAK = new ArrayList<>(); 

    public static void main(String[] args) { 
     Scanner in = new Scanner(System.in); 
     System.out.println("What is your name? "); 
     while (in.hasNext()) { 
      name = in.next(); 
      System.out.println("Hi " + name); 
      LEAK.add(name); 
      System.out.println("What is your name? "); 
     } 
    } 
} 

LEAK список растет в каждой итерации, и нет никакого способа, чтобы освободить его, но он никогда не используется. Это утечка.

+0

Зачем нужен ввод пользователя? a 'LEAK.add (" str ");' inside 'while (true)' будет достаточно –

+1

@sharonbn. Этот пример просто казался несколько приятным, но, в конечном счете, в этом нет ничего особенного, и в нем могут быть разные примеры. – Mureinik

+0

true, true ..... –

Смежные вопросы