TIL(Today I Learned)
12월 22일(목)
공부한 내용을 제 언어로 빠르게 정리한 내용이라서 잘못된 내용이 있을 수 있습니다.
Class vs Struct
- class는 call by reference (참조값 전달)
- class는 Heap 메모리 영역에 할당
- struct는 call by value (값 복사, Copy-on-Write)
- struct는 Stack 메모리 영역에 할당
- 왜 레퍼런스 타입이 벨류 타입보다 성능상 좋지 않은가?
- Reference Counting Overhead 때문.
ARC vs Java Garbage Collection
- ARC는 Reference Count가 0이 되면 메모리에서 해제하는 방식
- Java Garbage Collection은 크게 Stop-the-World와 Mark-and-Sweep 두단계로 진행
- 즉, 앱을 멈추고 스택의 모든 변수와 객체를 스캔하면서 사용되지 않는 메모리를 해제함
Stack vs Heap
- Stack은 정적 변수를 저장하기 위해 사용. 메모리에 순차적으로 저장하며 지역변수, 매개변수를 저장.
- Heap은 동적으로 메모리를 할당, 단편화(fragmentation) 우려가 있음.
- Stack 메모리에 있는 데이터는 각각의 데이터를 갖고 있는 쓰레드만 접근 가능하지만, Heap 메모리에 있는 데이터는 모든 쓰레드에서 접근이 가능하여 Thread-Safe하지 않음. (객체 같은경우 레퍼런스를 통해 여기 저기서 접근가능하므로 Thread-Safe하지 않다는 의미인듯)
Hash Table
- 해시 충돌 막는 방법
- chaining: 같은 키의 버킷에 데이터를 이어서 넣는것
- open address: 비어있는 키의 버킷에 데이터를 넣는것