LINUX.ORG.RU

Java-гуру вопрос - Куда девается ArrayList?

 arraylist,


0

1

Вопрос не технический, а скорее любопытственный...

Там написано: «ArrayList - это список, реализованный на основе массива».

А еще там написано: "...массив имеет определенный начальный размер n (в коде это параметр capacity), по умолчанию n = 10, при записи n+1 элемента, будет создан новый массив размером (n * 3) / 2 + 1, в него будут помещены все элементы из старого массива + новый, добавляемый элемент."

Но куда же девается старый массив? Он что? В памяти так и висит?

Перемещено mono из talks

В Development.

И да, сборщик мусора. </thread>

reserved
()

Grow в ArrayList копирует массив через Arrays.copyOf

elementData = Arrays.copyOf(elementData, newCapacity);
который использует обычный System.arrayCopy. Область памяти, на которую раньше ссылалась elementData становится недоступной и собирается сборщиком мусора.
Ваш Кэп.

GblGbl ★★★★★
()
Ответ на: комментарий от ii8_

Я тут изучаю Java, и у меня каждые 12 минут такие вопросы. Куда девается строка после слияния со второй строкой и т.д. и т.п.

Ужасные впечатления.

Munhgauzen
() автор топика
Ответ на: комментарий от Munhgauzen

В откуда они появляются у тебя вопросов не возникает? Откуда появились туда и уйдут. Главное что бы Хорон не тормозил и вовремя всех переправлял.

anonymous
()

загрузи с официального сайта сырцы реализации стандартной библиотеки и посмотри как оно сделано.

зы. в жабке сборка мусора. такие дела.

qulinxao ★★☆
()
Ответ на: комментарий от Munhgauzen

Куда девается строка после слияния со второй строкой

Кстати говоря, этот вопрос интересен ещё и тем, что последовательные операции конкатенации строк компилятор автоматически заменяет на StringBuilder.append

static_lab ★★★★★
()
Ответ на: комментарий от f1xmAn

StringBuffer, емнип

в новых версиях уже и StringBuilder:

public class Test {

	public static void main(String[] args) {
		String a = "Hello";
		String b = ", ";
		String c = "World";
		String d = a + b + c;
		System.out.println(d);
	}
}
Compiled from "Test.java"
public class Test {
  public Test();
    Code:
       0: aload_0       
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return        

  public static void main(java.lang.String[]);
    Code:
       0: ldc           #2                  // String Hello
       2: astore_1      
       3: ldc           #3                  // String , 
       5: astore_2      
       6: ldc           #4                  // String World
       8: astore_3      
       9: new           #5                  // class java/lang/StringBuilder
      12: dup           
      13: invokespecial #6                  // Method java/lang/StringBuilder."<init>":()V
      16: aload_1       
      17: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      20: aload_2       
      21: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      24: aload_3       
      25: invokevirtual #7                  // Method java/lang/StringBuilder.append:(Ljava/lang/String;)Ljava/lang/StringBuilder;
      28: invokevirtual #8                  // Method java/lang/StringBuilder.toString:()Ljava/lang/String;
      31: astore        4
      33: getstatic     #9                  // Field java/lang/System.out:Ljava/io/PrintStream;
      36: aload         4
      38: invokevirtual #10                 // Method java/io/PrintStream.println:(Ljava/lang/String;)V
      41: return        
}
static_lab ★★★★★
()

Куда пропадают старые, неиспользуемые переменные? ШОК! ВИДЕО! Загадка мирового масштаба!

Коли вы начали изучать java и читаете книжку (я предполагаю), дочитайте до конца... а то это не последний вопрос, я чувствую ;)

BattleCoder ★★★★★
()
Ответ на: комментарий от anonymous

Главное что бы Хорон не тормозил

Это от слова хоронить? :)

ovk48 ★★★
()
Ответ на: комментарий от BattleCoder

А если он учит Java программированию на нем, как тут кто-то часто советует?

stevejobs ★★★★☆
()

В книжке «Java. Новое поколение разработки» Эванса и Вербурга есть главы, посвящённые управлению памятью в JVM и сборке мусора. Примеры в основном касаются JDK 7, но также описываются унаследованные механизмы.

Вообще же, эта книжка больше подходит не начинающим, а «продолжающим» разработчикам. А для начинающих скоро выйдет двухтомник Хорстманна и Корнелла «Java. Библиотека профессионала», 9-е издание, с описанием Java 7.0.

iZEN ★★★★★
()
Ответ на: комментарий от f1xmAn

StringBuffer, емнип.

До Java 5.0 компилятор его подставлял, потом — StringBuilder, где возможно.

iZEN ★★★★★
()
Ответ на: комментарий от BattleCoder

Коли вы начали изучать java и читаете книжку (я предполагаю)

Далеко не факт, вдруг топикстартеру 18 нет. Судя по этому, нынче нельзя изучать Java малолеткам.

Sora ★★
()
Ответ на: комментарий от Munhgauzen

Строки иммутабельны, так что у тебя в результате будет 3 строки. А вот что с ними будет зависит от того, потеряешь ли ты на каждую из них ссылку

vertexua ★★★★★
()
Ответ на: комментарий от vertexua

читаем внимательно сырцы чего рекомендованно смотреть.

qulinxao ★★☆
()
Ответ на: комментарий от ii8_

в JDK_INSTALL/bin есть jvisualvm. Запусти и позырь как жаба работает с памятью.

Да, так оно безопаснее, чем в сырцы стандартной библиотеки смотреть. Для здоровья безопаснее.

Munhgauzen
() автор топика
Ответ на: комментарий от static_lab

Кстати говоря, этот вопрос интересен ещё и тем, что последовательные операции конкатенации строк компилятор автоматически заменяет на StringBuilder.append

Забавно. Что он, как те двое из ларца, за меня еще и думать будет?

Munhgauzen
() автор топика
Ответ на: комментарий от iZEN

В книжке «Java. Новое поколение разработки» Эванса и Вербурга есть главы, посвящённые управлению памятью в JVM и сборке мусора. Примеры в основном касаются JDK 7, но также описываются унаследованные механизмы.

Чур меня. Как ты догадался, что я ее изучаю?

Там написан 2014 год издания, решил начать изучать прямо оттуда, из будущего.

А про 9-е издание не слышал. Пока запасся восьмым. Обидно.

Munhgauzen
() автор топика
Ответ на: комментарий от Sora

Далеко не факт, вдруг топикстартеру 18 нет. Судя по этому, нынче нельзя изучать Java малолеткам.

Я как раз подхожу под возрастную категорию :)

Munhgauzen
() автор топика
Ответ на: комментарий от dave

только срыв коры.

только перезапуск по вотчдогу.

только перезапуск всегда (1 секунды хватит на всё).

подход падать как можно раньше( ранний с и юникс , теперь эрланг с автоперезапуском)

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.