JVM-Homework1

    public static void main(String[] args) {
        int i = 1;                      // 1
        Object o = new Object();        // 2
        Integer ii = 2;                 // 3
        printAll(o, i, ii);             // 4
        System.out.println("finished"); // 7
    }
    private static void printAll(Object o, int i, Integer ii) {
        Integer uselessVar = 700;                   // 5
        System.out.println(o.toString() + i + ii);  // 6
    }
}

Загрузка класса JvmComprehension в Application ClassLoader,  далеее проверка валидности,связывание – 
Linkiding и инициализация static полей Initialization, потом загрузка в область памяти Metaspace (загружаются данные о классе
и константы)
 Runtime Data Area. Создается стековая память для использования методом main(). Создается фрейм main() в Stack Memory
1.	Выделяется область памяти внутри фрейма main() в Stack Memory под int I  и присваивается этой переменной значение  –  1
2.	В  heap (куча) выделяется область памяти под объект Object, в стеке внутри фрейма main()  выделяется память под переменную – о,
    в которую записывается адрес в куче объекта Object31.	
3.  В области памяти heap (куча) выделяется место под объект Integer, создается ссылка ii в памяти стека фрейма main() на переменную
    Integer,
    значение которой = 2  помещается в heap.
4.	Cоздается фрейм printAll() в Stack Memory, в который передается ссылки на o, ii и переменная int i
5.	В heap выделяется блок памяти под Integer, а в памяти стека фрейма printAll() создается ссылка на него uselessVar. 
    Значение 700 помещается в heap
6.	В стеке создается фрейм для метода println() и в нем переменная int i, ссылка ii объекта Integer, созданный в heap п.3, ссылка на строку,
    которую вернет метод toString(). В heap под эту строку выделяется память String
    В стеке создается фрейм toString() и в нем ссылка о на объект Object, созданный в heap п.п. 2. Метод toString() возвращает строку,
    фрейм закрывается.
    Метод println() выводит на печать, фрейм закрывается. Метод printAll() отработал, фрейм закрывается. 
7.	Рисунок 2. В стеке создается фрейм памяти для метода println() и в нем ссылка на строку "finished", сама строка попадает в String. 
    Строка выводится на печать, закрывается фрейм метода println(). Закрывается фрейм метода main().
    Сборщик мусора сначала удалит неиспользуемую переменную uselessVar, затем строку из String после выполнения метода println() п.6,
    затем Object и строку из String после выполнения метода println() п.7