본문 바로가기

전체 글

(730)
[페이징 교체 알고리즘] 페이징 교체 알고리즘 구현하기 페이징 교체 알고리즘은 페이징기법으로, 메모리를 관리하는 운영체제에서 페이지의 부재가 발생하여 새로운 페이지를 기존의 어떤 페이지와 교체할 것인가? 를 결정 하기 위해 필요한 알고리즘이다. FIFO 알고리즘 : 페이지가 적재된 시간을 기준으로 교체되는 알고리즘 (First in First out 관련 알고리즘 이다. ) - 가장 오래된 페이지가 교체되나, 중요한 페이지가 오래되었다는 이유로 교체될 수 있기 때문에 불합리 하다. LFU 알고리즘 : 가장 적게 사용된 페이지를 교체하는 알고리즘, 참조될 가능성이 많은데 가장 적게 사용되었다는 이유로 최근에 사용되었지만 교체될 가능성이 있다. 참조된 횟수를 증가 시키기 때문에 오버헤드를 발생시킨다. LRU 알고리즘 : 가장 오랫동안 참조되지 않은 페이지를 교체..
[Java] Java heap_memory 에 대해서 Java 프로그램이 시작되면 Java Virtual Machine이 운영체제에서 일부메모리를 가져온다. JVM은 모든 요구사항에 대해서 이 메모리를 사용하며, 이메모리의 일부는 java 힙 메모리라고 한다. 힙은 동적데이터가 할당되어 저장되는 공간이고, GC 동작 대상이다. 힙 메모리의 구조에 대해서 알아보자 처음 객체가 생성되면, Eden 영역에 위치한다. 정기적인 GC이후에 남은 녀석을 Survivor Space로 이동하고 특정 age가 넘으면 OldGeneration에 이동한다. 여기서는 Major GC가 적용된다. permanent영역이고, 클래스 로더에 의해 로드된 클래스들이 저장되는 공간이다. JDK 8부터는 해당 영역이 MetaSpace영역으로 교체 되었다.
[Java] JVM 동작 과정 JVM C/C++은 컴파일 플랫폼과 타겟 플랫폼이 다를 경우 프로그램이 동작하지 않는다. 크로스 컴파일 : 타겟 플랫폼에 맞춰서 컴파일을 하는 것이다. JVM은 java 소스를 컴파일 하면, 자바 바이트코드로 만들어준다. 자바 바이트코드는 Jvm이 설치된 플랫폼이면 다 정상 작동한다. Java 프로그램 동작과정 1. 프로그램이 실행되면, JVM은 OS로 부터 이 프로그램이 필요한 메모리를 할당 받는다. 2.자바 컴파일러가 자바 소스코드를 읽어, 해당 소스코드를 자바 바이트 코드로 컴파일한다. 3.Class Loader가 동적로딩을 통해 class파일들을 동적 로딩 및 링크하여 런타임 데이터 영역, JVM메모리 영역에 올린다. 4.Execution Engine이 메모리에 올라간 class들을 기계어로 변경..
[JAVA] 스택 & 힙 & Garbage Collector JVM : 메모리 관리 및 가비지 컬렉터 기능을 수행한다. 가비지 컬렉터 : 동적으로 할당된 메모리 영역중 사용하지 않는 영역을 탐지하여 해제하는 기능이다. 동적으로 할당되었다고 하면, Java의 힙을 얘기하는 것이다. Stack : 정적으로 할당된 메모리 영역 원시 타입의 데이터가 값과 함께 할당, Heap 영역에 생성된 Object타입의 데이터 참조값 할당 Heap : 동적으로 할당된 메모리 영역 모든 Object 타입의 데이터가 할당 Heap영역의 Objecet를 가리키는 참조 변수가 Stack에 할당 쉽게 얘기해서, 저 메인 메소드 내의 로직이 처리 될때 Stack : 원시타입은 값 저장, Wrapper클래스는 참조값만 저장한다. Heap : Object 하위 상속 받는 모든 객체들의 값이 담긴다..
[스프링] 스프링의 동작과정 스프링의 동작과정을 살펴보자 1. WAS가 구동되면 web.xml을 로딩한다. 2. 로딩된 web.xml에서 ContextLoaderListener 클래스를 생성한다. 3. 생성된 ContextLoaderListener는 root-context.xml을 로딩한다. 이때 root-context는 Context-param으로 선언 되었기 때문에 WebApp 전역적으로 사용한다 4. 로딩된 root-context에 선언되어있는 service,dao등의 객체가 생성이 된다. DispathcherServlet이 구동된다. 이때 Servlet으로 구동되었기 때문에 해당 부분에서만 사용가능한 Context가 된다. 해당 DispathcherServlet이 구동되면서 servlet context를 불러온다. 등록된 s..
[Java] 제네릭의 이해 제네릭은 일반적인 이라는 이름, 뭐이름은 중요하지 않고 클래스 내부에서 지정하는 것이 아닌 , 외부에서 사용자에 의해 지정되는 것을 의미한다. 한마디로, 특정 타입을 미리 지정해주는 것이 아니라 필요에 의해 지정할수 있도록 하는 일반 제네릭 타입이라는 것이다. 제네릭의 장점 - 제네릭을 사용하면 잘못된 타입이 들어올 수 있는 것을 컴파일 단계에서 방지할수 있다. - 클래스 외부에서 타입을 지정해주기 때문에 타입을 체크하고 변환해줄 필요없이 관리가 편하다. - 비슷한 기능을 지원하는 경우 코드의 재사용성이 높아진다. 제네릭을 실제로 구현하고있는 것을 예시로 한번 생각해보자 우리가 많이 쓰는 ArrayList가 있다. 이걸 만들고있는 라이브러리를 보면, 제네릭으로 구현이 되어있다. 우리는 ArrayList,..
[JPA] 프록시객체에 대한 이해 Member와 Member 하위의 Team이라는 객체가 있다고 가정해보자 그리고, Member와 Team 을 둘다 받는 메소드가 있고, Team은 필요없이 Member만 필요한 경우를 생각해보자 실제로, 저장하고 find할때, Insert, select 가 된다. 만약에 이렇게 , find가아니라, getReference로 불러올때는 사용하지않으면, select 쿼리, 즉 db에서 조회하지 않는다. 어떻게 가능할까? 우선 getReference로 하면, 하이버네이트에서 내부에서 가짜 엔티티(프록시) 가 만들어진다. 이 가짜 엔티티는 실제 클래스를 상속 받아 겉모양은 같지만, 내부의 값들이 텅텅 비었다. 쉽게 말하면, 키를 가지고 디비를 조회할수 있게끔 아이디값만 가지고 있는 가짜 텅빈 엔티티라고 생각하면..
[Spring WebFlux] 프로젝트 시작 및 리액티브 프로그래밍 기초 컴포넌트 탐색, 스프링 애플리케이션이 실행되면, 모든 빈은 애플리케이션 컨텍스트에 등록이 된다. 실제로 이제 코딩을 시작해보자 1.ServerController 해당 컨트롤러에서는 서비스에 대한 주입과, 다량의 특정 객체를 반환하는 메서드, 그리고 그 메서드는 서비스의 getDish를 통해서 반환한다. 그리고 produces에서 텍스트 이벤트 스르팀 벨류라는 미디어 타입이있는데, 해당 은 서버에서 주는 스트림을 쉽게 소비한다. 미디어 타입에 대한건 다른 포스팅에서 다뤄보자 2. kitchenService @Service는 해당 서비스를 스프링 빈에등록하기 위함이다. 아까 컨트롤러에서 사용한 getDishes() 메소드는, randomDish를 통해 랜덤으로 호출된 것을 return 한다. generate..