본문 바로가기

분류 전체보기90

[OS] 메모리 관리(2) - 페이징 연속 메모리 할당 외부 단편화 문제 프로세스는 메모리의 연속된 공간에 존재해야한다. 그런데 이런 연속 메모리 할당(Contiguous Memory Allocation)은 외부 단편화(external fragmentation) 문제를 낳는다. 외부 단편화란, 메모리의 빈 공간이 불연속적으로 흩어져있어서 빈 공간을 합한 크기가 하나의 프로세스를 할당하기 충분한 크기임에도 프로세스를 할당하지 못하는 것이다. 그림으로 살펴보면 다음과 같다. 메모리에 프로세스 A, B, C가 올라와있다. 아무것도 할당되지 않은 빈 공간을 hole이라고 한다. B가 모든 작업을 마치고 메모리에서 내려간다. 메모리에는 총 1000의 빈 공간이 있지만 그림처럼 500, 500으로 나뉘어있다. 그래서 새로운 프로세스 D는 600의 공간.. 2021. 8. 8.
[OS] 메모리 관리(1) - 동적 로딩,연결,스와핑 CPU 스케줄링과 더불어 OS의 중요한 업무 하나가 바로 메모리 관리(Memory Management)이다. 기술의 발전과 더불어 메모리의 용량이 빠르게 증가했지만 그 발전 속도만큼 메모리 사용량도 빠르게 증가했기 때문에 메모리를 얼마나 효율적으로 사용하는가는 컴퓨터 발전 역사에 있어서 항상 중요한 문제였다. 메모리를 효과적으로 사용하기 위한 방법에 대해 OS는 두 가지 측면에서 접근한다. 메모리 낭비 없애기 가상 메모리(Virtual Memory) 메모리 낭비 없애기 OS가 낭비되는 메모리를 줄이기 위해 어떤 방법을 이용하는지 알아보기 전에 우선 프로그램이 메모리에 적재되는 과정을 살펴보자. 프로그램이 메모리에 올라가는 과정 우선 메모리는 다음과 같이 주소(address)와 데이터(data)로 구성된다.. 2021. 8. 8.
[Java] equals()와 hashcode()는 언제 재정의해야 하나 [이펙티브 자바]의 아이템 10, 아이템 11에서 equals()와 hashcode() 재정의에 대한 내용을 자세하게 다루고 있다. 추후에 해당 내용에 대한 포스팅을 할 예정이고 여기서는 간단하게 요약해 알아보고자 한다. equals() equals()는 두 객체가 논리적으로 같은가를 확인해야하는데 상위 클래스의 equals가 논리적 동치성을 비교하도록 재정의되지 않았을 때 재정의한다. 예를들어, 레스토랑의 주문 관리 애플리케이션을 만들고 있고, 식당의 메뉴를 나타내는 Menu 클래스를 정의하고 있다고 해보자. public class Menu { private String name; private int price; ... } Menu 객체의 두 인스턴스가 이름과 가격이 같다면 이 둘은 “논리적으로 같은.. 2021. 8. 8.
[Java] StringBuffer vs StringBuilder 차이 (무엇을 써야할까?) String in Java 자바에서 String을 다룰 때 알아두어야 할 것이 있습니다. String은 참조 자료형이다. 근데 자바에서 좀 특별하게 취급된다. 불변(Immutable)이다. String pool 자바에서 String은 일반 객체와 달리 heap 영역의 String pool에서 관리됩니다. 문자열은 다음과 같이 두 가지 방법으로 생성할 수 있습니다. public static void main(String[] args) { String a = "Hello"; String b = new String("Hello"); } a, b 두 개의 문자열은 JVM 내에서 생성되는 영역이 다릅니다. 출처: https://www.journaldev.com/797/what-is-java-string-pool .. 2021. 8. 2.
[SpringMVC] 스프링 MVC의 구조를 이해해보자 (3/3) V4: 사용하기 쉬운 컨트롤러 지난 포스팅에서 만든 V3는 분명 좋은 설계이지만 컨트롤러 인터페이스를 개발하는 개발자 입장에서 매번 ModelAndView를 생성하고 반환하는 것이 번거로울 수 있다. 그래서 이번에는 개발자가 사용하기 편한 컨트롤러를 만들어본다. 기본적인 구조는 V3와 같다. 하지만 프론트 컨트롤러가 컨트롤러를 호출할 때, paramMap 뿐만 아니라 객체를 담을 model을 추가적으로 전달한다는 것, 그리고 컨트롤러가 ModelAndView를 반환하는 것이 아니라 viewName만 반환한다는 차이가 있다. 프로세스 또한 V3와 크게 다르지 않다. 다만 Controller가 더이상 ModelAndView를 반환하지 않고 String을 반환한다. model 객체는 프론트 컨트롤러에서 파라미.. 2021. 7. 30.
[Java] 메서드 시그니처 vs 메서드 타입 더블 디스패치에 대해 공부하려고 토비님의 유튜브 영상을 보다가 메서드 시그니처(method signature)와 메서드 타입(method type)에 대해 정리해주시는 것을 보고 정리해둘 필요가 있을 것 같아 포스팅해봅니다. 메서드 시그니처(Method Signature) 시그니처, 말 그대로 서로다른 메서드를 구분하는 근거가 되는 요소입니다. 메서드 오버라이딩을 할 때 중요합니다. 메서드 시그니처의 구성 요소 메서드 이름 파라미터 리스트 이 두 가지가 같으면 메서드를 오버라이딩할 수 있으며, 이 두 가지가 같은 메서드가 한 클래스 내에 두 개 이상 정의되어 있으면 메서드 중복으로 컴파일 에러가 발생합니다. 여기서 파라미터 리스트라는 것은 파라미터의 타입, 개수, 순서를 말합니다. 예를 들어 파라미터의 .. 2021. 7. 29.