221124 TIL

이지섭·2022년 11월 24일

1. 오늘 한 것

  • 팀 프로젝트
    • lucid.app을 활용한 다이어그램 작성
  • Github Pull Request 연습
    • 뭔가 잘 안된다… 공부가 필요함
  • https://deveric.tistory.com/92
    Java는 call by reference가 없다
    기본적으로 모든 전달 방식이 Call by value이다.
     class A {
     	public int value;
     
     	A(int i) {
     		this.value = i;
     	}
     }
     
     void run(A arg1, A arg2) {
     	arg1.value = 111;
     	arg2 = arg1;
     }
     
     A a1 = new A(1);
     A a2 = new A(2);
     run(a1, a2);
     
     /***** 결과 *****
     a1.value = 111
     a2.value = 2
     arg1.value = 111
     arg2.value = 111 // arg1을 참조한다.
     *****************/
     // ->는 있지만, *가 없는 느낌?
  • 메모리 단편화
    • 내부 단편화
      • 필요 이상의 큰 메모리가 할당되어서 낭비되는 상황
    • 외부 단편화
      • 사용하지 않는 메모리 조각들 때문에 큰 메모리를 할당 할 수 없는 상황
    • 해결 방법
      • 페이징
        • 가상메모리 사용
        • 내부 단편화 해결 X
        • 외부 단편화 해결 O
        • 페이지 : 가상 메모리를 같은 크기의 블록들로 나눈 것
        • 프레임 : RAM을 페이지와 같은 크기들로 나눈 것
        • 페이징 : 사용하지 않는 프레임을 페이지에 옮기고. 필요한 메모리를 페이지 단위로 프레임에 옮긴다.
          • 페이지-프레임 간 page mapping을 위해 paging table을 만든다.
        • 연속적이지 않은 공간도 활용할 수 있다. → 외부 단편화 해결
        • 페이지를 꽉 채워 쓰지 못한다. → 내부 단편화 해결 불가
          • 페이지 단위를 작게 만들면 내부 단편화도 해결 가능하지만 mapping 과정이 너무 비효율적
      • 세그멘테이션
        • 가상메모리 사용
        • 내부 단편화 해결 O
        • 외부 단편화 해결 X
        • 페이징과 비슷하지만, 서로 크기가 다른 논리적 단위인 세그먼트로 분할
          • 각 세그먼트는 연속적인 공간에 저장되어 있다.
          • 세그먼트들의 크기가 각각 다르기 때문에, 미리 분할해두는것은 불가능
            • 메모리에 적재될 때 빈 공간을 찾아 할당한다.
          • 프로세스를 code영역, data영역, stack영역 등으로 나누는 것 또한 세그멘테이션이라고 할 수 있다.
        • page table처럼 segment table이 필요
        • 필요한 만큼의 메모리를 할당 → 내부 단편화 해결
        • 프로세스가 메모리를 해제하면 여전히 구멍이 생김 → 외부 단편화 해결 불가
          • 페이징 기법을 더 많이 사용하는 이유
      • 메모리 풀
        • 필요한 메모리의 크기, 개수를 사용자가 직접 지정하여 할당받아놓고, 필요할 때 마다 사용하고 반납
          • 메모리 풀 없이 동적할당과 해제를 반복하면 외부 단편화가 생김
          • 메모리 풀은 미리 공간을 할당받아두기 때문에 외부 단편화 예방
          • 필요한 만큼 할당받아두므로 내부 단편화 예방
        • 메모리 단편화로 인한 낭비보다 메모리 풀에 의한 낭비가 더 커지면 사용하지 않는게 이득
          • 사용하지 않는 순간에도 항상 할당해놓기 때문 → 메모리 누수
        • 할당 해제가 잦은 경우에 효과적
        • 방법
          • 큰 페이지를 힙에 할당
          • 페이지를 각 객체 크기의 블록으로 나누고 블록들을 링크로 연결
          • 할당에 필요한 블록을 포인터로 가리켜 사용

2. 취침 전 목표

null

3. 내일 할 것

  • 메모해둔 것 공부
  • 팀 프로젝트 (호텔 프로그램)

4. 느낀점

  • 메모만 많이 해두고 쌓이는건 최대한 줄이자
    • 바로바로 알아보고 노션에 바로바로 정리
  • 팀원들과 stack과 heap, array와 linked list 등 메모리 관련 지식공유를 하였는데, 그 과정에서 나 역시도 메모리 관련 지식을 다시한번 머릿속으로 체계적으로 정리하게 되어 좋았다.
    • 교학상장

5. 메모

null

profile
Stop thinking. Just do it.

0개의 댓글