💡 가비지 컬렉션이란?- 메모리 관리 기술로 JVM의 Heap 영역에서 동적으로 할당했던 메모리를 주기적으로 제거하여 메모리를 관리 (자바기준)- 메모리 제거 대상은 어떤 곳에서도 참조되고 있지 않는 Unreachable 객체이다. (장점)1. 개발자가 메모리 관리를 신경 쓰지 않고 로직에만 집중 할수 있다. (단점)1. 메모리가 언제 제거되는지 알기 힘들어 제어 할수 없다. 2. 가비지 컬렉터가 동작하는 동안은 다른 동작을 멈추기 때문에, 성능상 문제가 있다. (Stop the world) 💡 가비지 컬렉션의 동작 방식- 어떤 방식으로 Unreachable 객체를 솎아 낼까?Mark And Sweep 알고리즘 1. 식별 과정(Mark) : 그래프 순회를 통해 어떤 객체들이 참조되고 있는지 식별한다..
💡 동시성과 병렬성- 둘다 멀티 태스킹을 처리하는 방식이지만, 다르다. (동시성)- 동시성은 여러 작업이 시간을 나누어 마치 동시에 실행되는 것 처럼 보이는 기술- 멀티태스킹을 예시로 들수 있음 (하나의 코어로 여러개의 작업을 쪼개 실행하는 기술)- SW 관점 (병렬성)- 병렬성은 실제 물리적으로 여러 작업을 동시에 실행하는 것- 여러 코어가 실제로 작업을 동시에 실행 - HW 관점 💡 가시성 문제와 원자성 문제- 둘다 병렬 프로그래밍에서 발생하는 문제로, 동시성 이슈의 주범이다. (가시성 문제 - Visibility)- 멀티스레드 환경에서 한 스레드에서 변경된 데이터가 다른 스레드에서 즉시 보이지 않는 문제이다.- 발생 이유는 각 스레드는 독립적인 CPU 캐시에 변경된 데이터를 저장하고, 나중에 ..
💡 JCF란?- JCF(Java Collection FrameWork) : 자료 구조 종류의 형태들을 자바 클래스로 구현한 모음집- JCF의 계층 구조➜ List, Queue, Set과 달리 Map은 두개의 데이터를 묶어 한쌍으로 다루기 때문에 Collection 클래스와는 분리되어 있다.➜ Vector, Stack, HashTable과 같은 클래스들은 레거시 임으로 사용 하지 않는다 💡 List 인터페이스 (ArrayList., LinkedList, Vector)- 순서가 있는 데이터 집합- 같은 요소의 중복 저장 허용- 배열과 마찬가지로 index로 접근- List vs 배열 : 리스트는 자료형 크기가 고정이 아니라 데이터 양에 따라 동적으로 늘어났다 주는것에 반해 배열은 고정되어 있다.- 내부적..
💡 String literal과 new String(””) 차이- String 리터럴은 String constant pool 이라는 영역에 저장 (자바는 문자 리터럴을 특별히 관리)- String constant pool 은 동일한 문자열에 대해서는 하나의 참조를 재사용- new String(””) 은 매번 새로운 String 객체를 Heap 영역에 저장String str1 = new String("Hello"); String str2 = "Hello"; String str3 = "Hello";System.out.println(str1.equals(str2)); // (1) true System.out.println(str1 == str2); // (2) false System.out.println(s..
💡 Java의 특징1. 객체지향 언어이다.2. 모든 객체를 new 하여 사용하고, 이 생성된 객체를 가비지 컬렉터가 별도의 로직을 거쳐 쓰지 않는 객체를 수거해간다.3. Call By Value로 동작한다. ➔ 포인터 개념이 없음4. 멀티스레드를 지원한다. ➔ 파이썬 같은 경우는 GIL 때문에 멀티스레드를 이용하도록 코드를 작성해도 실제로는 싱글스레드로 동작한다.5. JVM(Java Virtual Machine) 위에서 실행되기 때문에 다양한 운영 체제에서 동일한 코드로 작동할 수 있음 💡 Java의 단점1. 느리다.(이유)모든 객체를 new 하고, 이를 GC가 관리하는데 GC가 사용될 때 Stop the world가 발동한다* Stop the world란? GC가 동작할때 GC를 제외한 모든 스레..