[F-lab 모각코 챌린지 29일차] TIL

JeongheeKim·2023년 6월 29일

TIL

목록 보기
29/66

학습계획


  • garbage collection & garbage collector
  • Heap영역의 물리적 공간
  • Heap 메모리 동작 과정
  • java.lang패키지

Today I Learned


  • garbage collection 동적으로 할당된 객체들 중 사용하지 않는 객체(garbage)를 식별하고, 해당 객체들의 메모리를 해제하는 프로세스
  • garbage collector garbage collection을 수행하는 프로그램

https://journaldev.nyc3.digitaloceanspaces.com/2014/05/Java-Memory-Model.png

https://journaldev.nyc3.digitaloceanspaces.com/2014/05/Java-Memory-Model.png

Heap영역의 물리적 공간

  • Young generation = Eden + S0(Survival0), S1(Survival1)
    • 대부분의 객체가 금방 접근 불가능 상태이므로 많은 객체가 여기서 생성되었다가 사라진다.
    • Young generation에서 객체가 사라질 때 Minor GC(Minor Garbage Collection)가 발생한다고 표현한다.
  • Old generation
    • Young영역에서 살아남은 객체가 복사되는 곳
    • Young영역보다는 GC가 적게 발생한다.
    • Old generation에서 객체가 사라질 때 Major GC(Major Garbage Collection)가 발생한다고 표현한다.
  • Perm 영역 (Method Area)
    • intern된 문자열 정보를 저장하는곳
    • 일반적으로 GC대상은 아니지만 문자열 참조대상이 없는 경우 GC가 발생. Major GC로 포함된다.
    • 단, 동적으로 생성된 문자열은 여기에 포함되지 않는다.

Heap 메모리 동작 과정

  1. 새로운 객체가 Eden영역에 생성
  2. Eden영역의 메모리가 꽉 차면 GC 한번 발생 후 살아있는 객체만 Survivor영역으로 복사
  3. Survivor영역이 꽉차면 S1영역으로 객체가 복사된다.

GC의 단점

GC는 주기적으로 수행되므로 성능에 좋지않은 영향을 끼칠 수 있다.

GC가 수행되면 stop-the-world가 발생하고 GC수행이외의 쓰레드는 모두 멈추게 된다. (=어플리케이션 실행을 멈추는것)

개발자가 GC 튜닝을 하는 궁극적인 목표는 무엇일까요?

어떤 GC알고리즘을 사용하더라도 stop-the-world가 발생한다. 보통의 GC튜닝을 하는 궁극적인 목표는 stop-the-world시 발생하는 어플리케이션이 멈추는 시간을 줄이는것을 뜻한다. stop-the-world가 발생하면 gc가 작동하는 이외의 쓰레드는 모든 작업을 멈추기 때문에 실시간 처리 및 분산처리 어플리케이션에서는 큰 사이드 이펙트를 발생 시킬 수 있다.

기본자료형과 참조자료형을 왜 메모리 공간을 나누어 저장하는가?

heap에 저장되는 참조 자료형은 동적생성(→ 효율관리는 gc)하며, 객체생성으로 여러곳에서 참조할 수 있다. 하지만 스택에 저장되는 기본자료형의 경우 정적인 생명주기를 가지며 스코프가 종료되면 사라지기 때문에 스택에 쌓인 순서로 사라지기 적합해서 스택에 쌓인다.

  • 메모리를 차지하는 사이즈 측면
    • 동적으로 할당되는 참조자료형의 경우 메모리가 동적으로 늘어나기 때문에 메모리 해제가 쉽지 않다. 이에 비해 기본 자료형의 경우 고정된 사이즈로 빠르게 스택에 쌓았다가 메모리 해제가 가능할 수 있다.

java.lang패키지

  • 언어, 문자열, 기본자료형,숫자. 쓰레드, 예외, 런타임 관련 기능 제공
  • import하지 않아도 사용할 수 있다.
    • java compiler가 기본적으로 import한다. java.lang패키지에 있는 클래스들은 자바 프로그램을 작성하는데 있어 필수적인 기능들이기 때문 → 디컴파일 하면 import 기본으로 import된 부분 확인할 수 있다는데 아직 모르겠다.
  • 숫자처리 클래스(Byte, Short등)는 Number라는 추상클래스를 확장한다.
    • static 메소드) parse타입()→ 기본자료형 리턴, valueOf() → wrapper타입 리턴
    • Integer + String의 연산은 성립되지 않고, +연산이 가능한것은 String 뿐이다.
public class JavaLangNumber {
	public static void main(String[] args) {
		JavaLangNumber javaLangNumber = new JavaLangNumber();
		javaLangNumber.numberTypeCheck();
	}

	private void numberTypeCheck() {
		String value1 = "3";
		String value2 = "5";

		Integer refInt1 = Integer.valueOf(value1);
		Integer refInt2 = Integer.valueOf(value2);

		System.out.println(refInt1 + refInt2 + "7");//87

	}
}

연습문제

같은 패키지에 있는 클래스를 제외하고, 별도로 import 하지 않아도 되는 패키지는 무엇인가요?

  • java.lang

자바의 메모리가 부족해서 발생하는 에러는 무엇인가요?*

  • OutOfMemoryError

메소드 호출관계가 너무 많아서 발생하는 에러는 무엇인가요?*

  • StackOverFlowError

java.lang 패키지에 선언되어 있는 3개의 어노테이션에는 어떤 것들이 있고, 각각의 역할은?*

  • Deprecated
    • 삭제예정임을 컴파일러에게 알림
  • Override
    • 부모클래스의 메소드를 재정의함을 알려준다.
  • Suppress Warnings
    • 경고알림을 무시하도록 컴파일에게 전달한다.

Double과 Integer 같은 숫자 타입에서 처리할 수 있는 최대, 최소값을 알 수 있는 상수의 이름은?*

  • MIN_VALUE, MAX_VALUE

Integer값을 2진법으로 표현하려면 어떤 메소드를 사용해야 하나요?*

  • toBinaryString()

Integer값을 16진법으로 표현하려면 어떤 메소드를 사용해야 하나요?*

  • toHexString()

속성(Properties)과 환경(Environment) 값의 차이는 무엇인가요?*

  • properties는 java.util패키지에 속하며 hash table을 상속받는다.
  • properties는 추가가 가능하지만 환경은 읽기만 가능

System.out과 System.err 에서 사용할 수 있는 메소드들은 어떤 클래스의 API를 봐야 하나요?*

  • PrintStream

System 클래스에서 현재 시간을 조회하는 용도로 사용하는 메소드 이름은 무엇인가요?*

  • System.currentTimeMillis()

System 클래스에서 시간 측정 용도로 사용하는 메소드 이름은 무엇인가요?*

  • nanoTime()

System.out.print() 메소드와 System.out.println() 메소드의 차이는 무엇인가요?*

  • 한줄띄기가능

System.out.println() 메소드에 객체가 매개변수로 넘어 왔을 때 String의 어떤 메소드가 호출되어 결과를 출력하나요? 그리고, 그 메소드를 사용하는 이유는 무엇인가요?*

  • valueOf()

숫자 계산을 위해서 필요한 메소드들을 모아 놓은 클래스는 무엇인가요?*

  • Math

위의 문제의 답인 클래스에 있는 메소드는 객체를 생성해서 사용해야 하나요?*

  • X, 디폴트 패키지이므로 import 하지 않아도 된다.

숫자의 절대값을 구하는 메소드는 무엇인가요?*

  • Math.abs()

숫자의 반올림을 하는 메소드는 무엇인가요?*

  • Math.round()

각도를 라디안으로 변환하는 메소드와 라디안을 각도로 변환하는 메소드는 각각 무엇인가요?*

  • Math.toRadians(), Math.toDegrees()

5의 4 제곱 값을 구하려고 하면 어떤 메소드를 사용해야 하나요?

  • Math.pow(밑, 지수)

[참고]

https://www.baeldung.com/java-string-constant-pool-heap-stack

https://sematext.com/blog/java-garbage-collection-tuning/#why-is-garbage-collection-tuning-important

https://d2.naver.com/helloworld/1329

https://stackoverflow.com/questions/22779145/java-primitive-data-type-on-stack-or-heap

https://www.scaler.com/topics/which-package-is-imported-by-default-in-java/

0개의 댓글