본문 바로가기

분류 전체보기116

사용자 모드로 구현되는 기능(시스템 콜) 시스템 콜 프로세스는 프로세스의 생성이나 하드웨어의 조작 등 커널의 도움이 필요한 경우 시스템 콜을 통해 커널에 처리를 요청한다. 시스템 콜의 종류는 다음과 같다. 프로세스 생성, 삭제 메모리 확보, 해제 프로세스 간 통신(IPC) 네트워크 파일시스템 다루기 파일 다루기(디바이스 접근) CPU의 모드 변경 시스템 콜은 CPU의 특수한 명령을 실행해야만 호출된다. 프로세스는 보통 사용자 모드로 실행되고 있지만 커널에 처리를 요청하기 위해 시스템 콜을 호출하면 CPU에서는 인터럽트(interrupt) 이벤트가 발생해 CPU는 사용자 모드에서 커널 모드로 변경되어 커널은 요청한 내용을 처리한다. 요청한 내용 처리가 끝나면 커널 내의 시스템 콜 처리가 종료되어 다시 사용자 모드로 전환되어 프로세스의 동작을 계속.. 2023. 8. 3.
표준과 구현 표준과 구현이 우리가 개발하는 환경에서 어디서 어떻게 쓰이는지 살펴보자. JCP, JSR, TCK, JDK JCP, JSR, TCK란 무엇인가 The Java Community Process(SM) Program Welcome to jcp.org, home of the Java Community ProcessSM (JCPSM) Program. The JCP is the mechanism for developing standard technical specifications for Java technology. Anyone can register for the site and participate in reviewing and providing feedback fo www.jcp.org Java를 개발한 .. 2023. 7. 31.
JMH로 warm up 후 테스트하기 Java에서 warm up을 하는 이유에 대해서 살펴보기 위해서는 JVM의 특성에 대해서 알아볼 필요가 있다. JVM 작성된 Java 코드에 대해 1차적으로 중간언어로 컴파일을 해야한다. 주로 Byte Code는 jar이나 war 파일로 아카이브하여 활용하게 될텐데 빌드된 파일을 실행하게 되면 JVM에서는 바이트 코드를 번역하여 기계어로 만들고 이 기계어를 CPU에서 처리하는 절차는 갖는다. 이렇게 빌드된 바이트 코드는 별도의 추가 빌드없이 자바가 실행 가능한 CPU 아키텍처, 즉 여러 OS에서 실행할 수 있는 장점이 있다. 이렇게 자바는 compile과 interpret라는 두 가지 동작에 의해 실행되는 하이브리드 언어이다. 그러다보니 컴파일 과정에서 바로 기계어를 만드는 C/C++, Rust, Gol.. 2023. 7. 31.
Object 클래스의 clone() 메서드 clone() 메서드 clone() 메서드는 특정 클래스의 인스턴스를 복제하여 새로운 인스턴스를 생성하려고 할 때 사용한다. clone()을 사용하면 이전의 값은 보존되고, 작업에 실패해서 원래의 상태로 되돌리거나 변경하지 전의 값을 참고하는데 도움이 된다. clone은 Object 클래스에 정의되어 있는데 단순히 인스턴스의 값을 복사하기 때문에 참조 타입의 필드가 있는 클래스는 완전한 복제가 이루어지지 않는다. Cloneable 인터페이스의 clone 메서드 살펴보기 API 문서의 clone 메서드에 대한 내용을 살펴보면 다음과 같다. Object 클래스에 대한 clone 메서드는 특정 복제 작업을 수행한다. 먼저, 클래스가 Cloneable 인터페이스를 구현하지 않는 경우에는 CloneNotSuppo.. 2023. 7. 30.
JMX(Java Management eXtensions)와 VisualVM로 Heap Dump 들여다보기 JMX JMX(Java Management eXtentions)는 Java 응용프로그램의 모니터링과 관리기능을 제공한다. 웹사이트를 통해 원격의 Web Server, WAS, DB 등의 상태 모니터링, Start, Stop 등의 기능, 디바이스 상태, 각종 서비스제어 등의 기능을 제공할 수 있다. JMX 기술을 사용하여 리소스를 관리하려면 Java 프로그래밍 언어로 리소스를 관리해야 하는데, 리소스 관리 주체인 MBeans로 알려진 Java 객체를 사용하여 리소스를 관리한다. JMX MBean JMX의 MBean은 JMX Agent를 통해 관리되는 응용프로그램 또는 시스템 리소스이다. 표준 MBean은 XXXMBean이라는 Java 인터페이스와 해당 인터페이스를 구현하는 XXX라는 Java 클래스를 작성.. 2023. 7. 24.
ConcurrentHashMap vs synchronized HashMap, ConcurrentHashMap 구현해보기 ConcurrentHashMap HashMap은 싱글스레드 환경에서 사용하는 것이 좋고, 멀티스레드 환경에서는 동기화 처리를 하지 않기 때문에 thread-safe하지 않다. 이 문제를 해결하기 위해서 Collections.synchronizedMap 메서드로 원본 Map을 변환하거나 HashTable 자료구조를 사용할 수 있지만 단일 잠금 객체를 사용하기 때문에 이러한 배타적 접근방식은 성능저하를 일으킬 수 있다. 즉, 높은 동시성 하에 수많은 처리량으로 thread-safe를 원한다면, 이러한 구현은 해결책이 되지 못한다. 이러한 동기화 문제를 보완하기 위해서 Java 1.5에서 ConcurrentMap이 도입되었다. 동기화 처리를 할 때, 어떤 Entry를 조작하는 경우에 해당 Entry에 대해서만.. 2023. 7. 24.
스레드 동기화를 위한 volatile, Atomic volatile 하나의 변수를 여러 스레드에서 사용할 때 사용하는 키워드로 변수를 CPU 캐시가 아닌 Main Memory에서 변수의 값을 읽거나 저장하겠다라는 것을 명시하는 것이다. 즉, volatile은 CPU Cache에 저장된 값을 읽는 것 보다는 성능이 안좋지만 컴파일러에게 해당 데이터(변수, 메서드)에 대해 멀티스레드로 접근하고 있음을 알려주어 읽기, 쓰기에 대해서 동기화를 보장하여 예측불허하게 바뀌는 것을 막을 수 있다. synchronized와의 차이는 다음과 같다. synchronized: 행위(메서드 및 블럭)에 대한 동기화 volatile: 행위의 타겟(변수)에 대한 동기화 volatile을 사용하는 이유는 Main Memory의 값을 읽고 저장해 가시성을 보장하기 위한 것이라고 할 .. 2023. 7. 22.
Thread 클래스(with synchronized) Thread 우리가 JVM을 실행시키면 자바 프로세스(Java Process)가 시작한다. 이 프로세스에는 여러 개의 스레드가 수행되는데 반대로 여러 프로세스가 공유하는 하나의 스레드가 수행되는 일은 절대 없다. 어떤 프로세스든 간에 스레드가 하나 이상 수행된다. 프로세스(Process): 운영체제로부터 시스템 자원을 할당받아 메모리에 올라와 실행되고 있는 프로그램의 인스턴스(독립적인 개체) 스레드(Thread): 프로세스가 할당받은 자원을 이용하는 실행의 단위 이 때, Java Thread는 일반 스레드와 거의 차이가 없으며, JVM이 운영체제의 역할을 한다. 즉, Java Thread는 JVM에 의해 스케되는 실행 단위 코드 블록이라고 할 수 있고, 스레드 스케줄링 및 스레드와 관련된 많은 정보들을 .. 2023. 7. 22.
Scale up vs Scale out Scale up vs Scale out Scale up Scale up은 서버 그 자체를 증강시켜 처리 능력을 향상시키는 것을 말한다. 다른 말로 수직 스케일이라고도 한다. 장점 구축, 설계가 쉽다. 컨트롤러나 네트워크 인프라 비용은 별도로 발생하지 않는다. 단점 스토리지 컨트롤러 확장성 한계 용량, 성능 확장 제한 비싸다. 트래픽 부하로 인한 장애 영향도 up 대표적 예로 cpu i3 -> i5 가는 경우 6만원 차이로 성능 향상 1.5배 정도 향상한다. 하지만 i5 -> i7 가는 경우에는 20만원 차이임에도 1.2 ~ 1.3배 정도가 향상한다고 한다. 주요 기술 고성능 CPU Memory 확장 SSD Scale up이 쓰이면 좋은 경우 정합성 유지가 어려운 경우 OLTP(온라인 트랜잭션 처리) - .. 2023. 7. 18.