전체 글 317

Array VS List

Array(배열) - 다수의 데이터를 묶어 효율적인 관리가 가능한 자료형 - 데이터에 접근하기 위한 인덱스 존재하고 이를 통해서 데이터를 가져오기 때문에 조회속도 빠름 - 연속적이므로 메모리 관리가 편하다. - 데이터의 위치가 인덱스와 맵핑되어 고정되므로 추후 데이터가 삭제되는 경우 배열의 빈 부분의 메모리 낭비 - 정의와 동시에 길이를 지정하며 길이를 바꿀 수 없는 정적 자료형 ( 삽입, 삭제 시 리스트보다 느림) List - 순서가 있는 데이터의 집합 - 동적이므로 크기 할당이 가능하다. - 포인터를 통해 접근하므로 추가, 삭제가 빠르다. - 검색 성능이 배열보다 좋지 않다. - 포인터를 통해 다음 데이터를 가르키므로 추가적인 메모리 공간 발생 데이터의 갯수가 확실하게 정해져 있고, 자주 사용된다면 ..

String VS StringBuffer VS StringBuilder

String - String 객체는 한번 생성되면 할당된 메모리 공간이 변하지 않는다. - concat, + 와 같은 연산시 메모리의 내용이 변하는 것이 아니라, 새로운 String 객체를 만든 후 새 String 객체에 연결된 문자열을 저장하고 그 객체를 참조하게 된다. - 기존 객체를 참조하는 변수가 없다면 가비지컬렉터의 대상이되어 수거된다. - 연산이 많아지게되면 카비지컬랙터가 수거하기 전에 heap영역에 계속 쌓이게 되어 메모리가 부족해 속도가 느려진다. StringBuffer StringBuilder - String과 다르게 클래스는 한 번만 만들고 메모리의 값을 변경시켜서 문자열을 변경. 그러므로 문자열연산이 자주 있을 때 사용하면 좋음 StringBuffer - 속도가 느리나 멀티 스레드 환..

런타임 VS 컴파일

런타임이란? - 컴파일 과정을 마친 응용 프로그램이 사용자에 의해서 실행되어 지는 때를 의미 런타임 에러란? - 이미 컴파일이 완료되어 프로그램이 실행중임에도 불구하고, 의도치 않은 예외상황으로 인하여 프로그램 실행중에 발생하는 오류 형태를 의미 컴파일 타임이란? - 개발자에 의해 C, JAVA 등과 같은 개발 언어로 소스코드가 작성되며, 컴파일 과정을 통해 컴퓨터가 인식할 수 있는 기계어 코드로 변환되어 실행 가능한 프로그램이 되는 과정을 의미 컴파일타임에러란? - 소스코드가 컴파일 되는 과정 중에 발생하는 Syntax error, 파일 참조 오류 등과 같은 문제들로 인해 컴파일이 방해되어 발생하는 오류들을 의미

메모리 구조

코드영역 - 실행할 프로그램의 코드가 저장되는 영역으로 텍스트 영역이라고도 부름 - 사용자가 프로그램 실행 명령을 내리면 OS가 HDD에서 실행 코드를 메모리로 올리게 되고, CPU는 코드 영역에 저장된 명령어를 하나씩 처리하게 된다. * HDD(Hard disk Drive) - 컴퓨터의 기억장치 중 한가지인 보조 기억장치 데이터 영역 - 프로그램의 전역변수와 정적변수가 저장되는 영역 - 데이터 영역은 프로그램의 시작과 함께 할당되며, 프로그램이 종료되면 소멸 힙영역 - 프로그래머가 직접 관리할 수 있는 메모리 영역으로 이 공간에 메모리를 할당하는 것을 동적 할당이라고 부른다. - JAVA에서는 가비지 컬렉터가 자동으로 해제해준다. - 힙 영역은 스택 영역과 달리 낮은주소에서 높은 주소로 메모리가 할당 ..

데드락이란?

데드락(DeadLock = 교착상태 )이란? - 한정된 자원을 여러 프로세스가 사용하고자 할 때 발생하는 상황으로, 프로세스가 자원을 얻기 위해 영구적으로 기다리는 상태 예시 - 자원 A를 가진 프로세스 P1과 자원 B를 가진 프로세스 P2가 있을 때, P1은 B를 필요로 하고 P2는 A를 필요로 한다면 두 프로세스 P1, P2는 서로 자원을 얻기위해 무한정 기다리게 된다. DeadLock 의 발생조건 1. 상호배제 - 한번에 오로지 하나의 프로세스만이 자원 선점이 가능 (제가 사용하고 있으니 제가 다쓸때까지 기다리세요!) 2. 점유 대기 - 공유 자원에 대한 접근 권한을 가지고 있는 프로세스가, 다른 자원에 대한 접근을 요구할 수 있음 (제가 지금 이걸 사용하고 있지만 다른것도 필요해요!) 3. 비선점..

멀티 프로세스 VS 멀티 쓰레드

멀티 프로세스 - 하나의 프로그램을 여러개의 프로세스로 구성하여 각 프로세스가 1개의 작업을 처리하도록 하는 것 - 한개의 프로세스가 죽어도 자식 프로세스 이외의 다른 프로세스들은 계속 진행된다. - Context Switching을 위한 오버헤드(캐시 초기화, 인터럽트 등)가 발생한다. - 프로세스는 각각 독립적인 메모리를 할당받았기 때문에 통신하는 것이 어렵다. 멀티쓰레드 - 하나의 프로그램을 여러개의 쓰레드로 구성하여 각 쓰레드가 1개의 작업을 처리하도록 하는 것 - 프로세스를 위해 자원을 할당하는 시스템콜이나 Context Switching의 오버헤드를 줄일 수 있다. - 쓰레드는 메모리를 공유하기 때문에, 통신이 쉽고 자원을 효율적으로 사용 가능하다. - 하나의 쓰레드에 문제가 생기면 전체 프로..

컨텍스트 스위칭이란?

컨텍스트 스위칭(Context Switching) 이란? - 인터럽트를 발생시켜 CPU에서 실행중인 프로세스를 중단하고, 다른 프로세스를 처리하기 위한 과정 - Context Switching은 현재 실행중인 프로세스의 상태를 먼저 저장하고 다음 프로세스를 동작시켜 작업을 처리한 후에 이전에 저장된 프로세스의 상태를 다시 복구 * 인터럽트 - CPU가 프로세스를 실행하고 있을 때, 입출력 하드웨어 등의 장치나 예외상황이 발생하여 처리가 필요함을 CPU에게 알리는 것