5.1 객체의 생성과 소멸
< 참조 변수와 대입 연산 >
-기초 변수와 참조 변수는 대입 연산에서 다르게 동작한다.
1) 기초 변수
: 변수의 값을 복사한다.
2) 참조 변수
: 참조값을 복사한다.
Ex)
Television tv1 = new Television();
Television tv2 = tv1;
tv1과 tv2는 동일한 값을 가리킨다.
tv2 -> tv1 -> 값
이 아니다.
tv2.channel = 11;
을 실행하면,
tv2 뿐만 아니라 tv1 또한 11의 값이 할당된다.
< 객체의 소멸과 가비지 컬렉션 >
•히프 메모리(heap memory)
: JVM이 가지고 있는 가용 메모리.
-자바에서 객체들은 new 연산자에 의하여
heap memory에 할당된다.
&메모리는 무한하지 않기 때문에 JVM에서 사용되지 않는 객체들을 삭제하여메모리를 확보하는 것이 필요하다.
=> 삭제 연산자가 없으므로, 자바에서는 자동 메모리 삭제 시스템을 사용한다. (=가비지 컬렉션)
어떤 코드가 가비지 컬렉션의 후보가 되는가?
Television tv1 = new Television();
Television tv2 = new Television();
tv2 = tv1;
=> tv2가 가리키고 있었던 객체는 위의 코드 실행 후에는 아무도 참조하지 않게 되어 더는 접근할 수 없다.
가비지 컬렉션의 후보가 되는 것.
가비지 컬렉션
•가비지 컬렉터
: 히프 메모리에서 더 이상 필요 없는 객체를 찾아 지우는 작업을 한다.
-JVM의 핵심 부분

(1) 참조되지 않은 객체가 식별된다.
(2) 표시된 객체가 삭제된다.
(3) 선택적으로 컬렉터가 객체를 삭제한 후 메모리를 압축한다.
압축하면 새 객체에 메모리를 순차적으로 할당하기가 더 쉽다.
< 가비지 컬렉션 요청 >
System.gc(); // 가비지 컬렉션 요청
-System 객체의 gc() 메소드를 호출하여서 가비지 컬렉션을 요청할 수 있다. (바로 실행X)
-System.gc()나 Runtime.gc() 메소드를 사용하여 가비지 컬렉터를 실행하는 코드에 힌트를 줄 수 있다.
*컬렉션을 조정하는 가장 좋은 방법은 JVM을 실행할 때 플래그를 설정하는 것이다.
C> java - XX:+UseParallelGC -jar Application.java
=> 다음과 같이 JVM을 실행한다.