Language | Basic/Java 7

Java의 스레드(Thread) 알아보기

개요 여러 가지 일을 병행하는 멀티태스킹은 프로세스 기반, 스레드 기반으로 구현할 수 있습니다. 프로세스 기반 여러 프로그램이 병행으로 실행되는 것 프로세스가 생성될 때마다 새로운 메모리 영역을 할당받음 프로세스 실행에 필요한 새로운 시스템 자원을 할당받음 스레드 기반 프로그램 내부에서 여러 작업이 병행으로 실행되는 것 프로그램의 프로세스에서 사용하는 자원과 메모리를 공유 스레드를 실행하기 위한 자원만 필요 스레드 == 경량 프로세스 멀티 스레드 환경에서는 모든 스레드가 종료되어야 프로그램이 종료됨 스레드의 목적 멀티 스레드를 구현해야 하는 상황 여러 사용자의 동시 요청 처리 외부 데이터 IO 작업 스레드 활용 스레드 생성 java.lang.Thread 클래스를 상속 Runnable 인터페이스를 구현해서..

Java의 Garbage Collection

개요 자바의 메모리 관리 방법입니다. 자바의 객체는 Runtime Data Areas의 Heap에 할당됩니다. JVM의 Heap Area 자바는 개발자가 메모리를 관리하지 않습니다. Garbage Collector가 객체의 메모리를 해제합니다. GC가 수행될 때, GC를 위한 스레드를 제외하고 모든 스레드의 작업이 중지됩니다(Stop the World). GC 튜닝은 Stop the World의 시간을 줄이는 것입니다. 가설 : Weak Generational Hypothesis 대부분의 객체는 금방 접근 불가능 상태(unreachable)가 됩니다. 오래된 객체에서 젊은 객체로의 참조는 아주 적게 존재합니다. GC 대부분의 객체는 Young 영역에서 GC(Minor GC)됩니다. Young 영역의 GC..

JVM의 Heap Area

개요 JVM의 Runtime Data Areas에서 Heap은 객체를 저장합니다. 객체에 대한 참조 변수는 Stack에 있습니다. Oracle의 Hotspot VM의 Heap 구조 Young Generation Eden 객체가 최초로 할당되는 장소 Eden이 포화상태이면 참조중인 모든 객체를 Survior로 옮깁니다. Survivor로 참조중인 객체가 모두 옮겨지면 Garbage Collection(Minor GC) 수행합니다. Survivor Survivor 1, Survivor 2로 이뤄져 있습니다. 참조중인 객체들은 하나의 Survivor 영역만 사용합니다. Old Generation Survivor 에서 오랫동안 참조되고 있는 객체는 Tenured로 이동합니다. Tenured에 온 객체는 앞으로도..

JVM(Java Virtual Machine)이란

개요 자바 프로그램이 실행되는 가상 환경 자바 개발자는 바이트 코드 파일을 배포하는 과정까지만 합니다. 사용자가 자바 프로그램을 실행하려면 JVM이 필요합니다. JVM은 바이트 코드가 각 OS에서 실행될 수 있도록 기계어로 변환하고 프로그램을 실행합니다. JVM을 통해서 플랫폼 독립적인 개발이 가능해집니다. JVM 구조 자바 프로그램은 각 OS에 최적화된 JVM 위에서 실행됩니다. Class Loader Loading : 클래스를 적재 Linking : 래퍼런스를 연결 Initialization : static 값 초기화 & 변수 할당 Memory Stack 스레드마다 런타임 스택 생성 메소드 호출을 스택 프레임으로 쌓음 스레드가 종료되면 런타임 스택도 사라짐 PC Registers 스레드마다 현재 실행..

Lambda와 함수형 인터페이스

개념 익명 함수를 의미합니다. 람다식으로 구현하는 방식을 함수형 프로그래밍이라고 합니다. 함수형 프로그래밍에서 개발자는 핵심 내용만 구현하고, 나머지는 Java에서 자동으로 처리합니다. 함수형 스타일은 서술형 스타일에 객체의 개념과 명령문을 추가하여 처리하는 스타일입니다. 인터페이스를 람다식으로 구현 람다식으로 구현하려는 인터페이스는 반드시 1개의 메서드만 선언되어야 합니다. 1개의 메서드만 구현된 인터페이스를 함수형 인터페이스라고 합니다. 기본 문법 명령문이 1개일 때 : () -> 명령문; 명령문이 여러 개일 때 : () -> {명령문1; 명령문2; ... 명령문n;} @FunctionalInterface 함수형 인터페이스를 구현할 때, 2개 이상의 추상 메서드 선언되는 오류를 방지하기 위해서 @Fu..

Stream API

개념 스트림 데이터는 처리 과정에서 임시로 존재합니다. 스트림은 필요한 작업을 수행한 후 자동으로 소멸합니다. 데이터 소스 원본을 변경하지 않고도 데이터를 처리할 수 있습니다. 구성 스트림 생성 중개 연산 스트림을 받아서 스트림을 반환합니다. 여러개의 중개 연산을 수행할 수 있습니다. 중개 연산은 일반적으로 지연 연산입니다. 최종 연산 스트림의 결과를 산출합니다. 이때 지연 연산으로 미뤄진 중개 연산을 수행합니다. 최종 연산 이후 스트림은 소멸합니다. 특징 스트림은 각 요소의 처리 방법에 관심을 두고 있습니다. 개발자가 반복문을 구현해서 요소에 접근 --> 외부 반복 스트림은 내부적으로 각 요소마다 접근 --> 내부 반복 파이프-필터 패턴 스트림은 데이터에 대해서 각종 중개 연산(필터) 후 최종 연산으로..

java.lang.String의 Static Methods

Intro 자바는 문자열을 위한 String 클래스를 제공하고 있습니다. String 클래스에는 문자열을 처리하기 위한 메소드가 내장되어 있는데, 이글에서는 String의 자주 쓰이는 정적 메소드들을 복습 겸, 정리해보겠습니다. Static Methods copyValueOf​ char 배열을 String으로 리턴합니다. public class CopyValueOf { public static void main(String[] args) { String hello = "hello, World!"; char[] data = hello.toCharArray(); // copyValueOf​(char[] data) String newString = String.copyValueOf(data); // copyV..