멀티스레드에서 힙과 스레드 공간

Coding-Luizy·2023년 7월 17일
0

통상적으로 알고 있는 스택과 힙 공간

이 그림은 단일 스레드 프로세스일때만 해당한다.

자바만 생각해도 아무 설정을 안해도 gc같은것들이 데몬 쓰레드로 동작한다.

논리적인 멀티스레드 프로그램의 메모리 영역이다.

직렬적인 메모리 구조에 저렇게 병렬적으로 생길 일 없다.

그나마 직렬적으로 표현된 여러 스레드에 각각 할당된 스택공간이다.

스택 공간은 컴파일시 결정된다? NO 상황에 따라 여러 스레드가 각각의 스택을 생성해 가변적으로 변한다.

하지만, 힙 공간은 컴파일시 결정된다? YES(?)

자바같은 경우는 jvm 위에서 동작하기 때문에(뇌피셜) 동적으로 런타임에 힙의 최대 공간을 늘려줄 수 있다.

// 현재 힙의 최대 크기 확인
long maxHeapSize = Runtime.getRuntime().maxMemory();
System.out.println("Max Heap Size: " + maxHeapSize);

// 힙 크기 동적으로 변경
long newMaxHeapSize = ...; // 새로운 최대 힙 크기 설정
try {
    // 새로운 최대 힙 크기로 변경
    Runtime.getRuntime().exec("java -Xmx" + newMaxHeapSize + " YourProgram");
} catch (IOException e) {
    // 변경 실패 시 처리
    e.printStackTrace();
}

하지만, C나 JavaScript 는 그러한 기능을 제공하지 않는다.

사진 출처 : 황기태 교수님 운영체제 강의안 일부

profile
Better Tomorrow

2개의 댓글

comment-user-thumbnail
2023년 7월 18일

많은 도움이 되었습니다, 감사합니다.

답글 달기
comment-user-thumbnail
2023년 7월 18일

정말 좋은 글 감사합니다!

답글 달기