목록Java (22)
To Dare Is To Do!

자바에서 데이터 타입은 크게 원시 타입과 참조 타입으로 나뉜다. 참조 타입 : 객체의 주소를 참조하는 타입, 메모리 주소 값을 통해 객체를 참조원시 타입 (Primitive Type)- 정적 메모리 영인 stack에 정수, 실수 , 문자, 논리 리터럴 등의 실제 데이터 값을 저장- 비객체 타입으로서 null 값을 가질 수 없음종류데이터형크기(byte / bit)표현 범위논리형boolean1 / 8true 또는 false문자형char2 / 16'\u0000' ~ 'uFFFF' (16비트 유니코드 문자 데이터)정수형byte1 / 8-128 ~ 127정수형short2 / 16-32768 ~ 32767정수형int4 / 32-2147483648 ~ 2147483647( -21억 ~ + 21억)정수형long8 / ..

주제인 Checked Exception과 Unchecked Exception에 대해 알아보기 전에 Error과 Exception에 대해 간단히 확인해보려고 한다. Error- 프로그램 실행 중 발생하는 예기치 않은 문제로, 주로 시스템 수준에서 발생한다.- 발생 시점에 따라 3가지로 분류된다.컴파일 에러 - 컴파일 단계에서 오류가 발견되면 컴파일러가 에러 메시지를 출력한다.- 컴파일 에러의 대표적인 원인으로 syntax error가 있다.- 심각한 수준의 에러는 아님런타임 에러- 컴파일 과정에는 문제가 없었으나 프로그램 실행중 에러가 발생하여 잘못된 결과를 얻었거나 외부적 요인으로 인한 기계 결함으로 프로그램이 비정상적으로 종료된다.- 개발 과정에서 논리적이지 못한 설계로 인한 발생이 주요 원인- 런타..

이번 글에서는 지난 가시성의 문제와 volatile에 이어서 멀티 스레드 환경에서 발생할 수 있는 원자성의 문제에 대해 알아보려 한다. 원자성의 문제원자성이란?한 번에 하나의 단위 작업으로 간주되어야 하는 작업의 개념으로 여러 스레드가 동시에 공유자원에 접근할 때 더욱 고려되어야 하는 요소이다. 예를 들어 2개의 스레드가 동시에 count++ 연산을 100회 수행한다고 하자.우리는 count의 값으로 200을 기대하지만 원자성이 보장되지 않는 상황에서는 결과가 우리의 예상과는 다르게 나온다.원인을 찾아보면 count++ 연산은 READ - MODIFY - WRITE 3개의 instruction으로 구성된다.만약 1번 스레드가 값을 읽어 count + 1을 하기 전에 2번 스레드가 count를 읽어 cou..

여러 스레드를 활용하면 시스템의 자원 사용, 응답 시간, 문맥 교환 횟수를 줄이는 등의 장점을 얻을 수 있지만 데이터의 충돌 문제 즉 동시성을 보장할 수 없는 문제를 초래할 수 있다. CPU가 작업을 수행하기 위한 데이터를 읽을 때 RAM의 일부분을 CPU Cache Memory로 읽어들이고CPU가 작업에 대한 결과를 RAM에 저장할 때는 다시 CPU Cache Memory보내고 이들은 적절한 시점에 RAM으로 쓰기 작업을 수행한다.이러한 읽고 쓰는 과정에서 CPU Cache Memory들은 CPU가 읽거나 쓰는 작업을 수행했지만 효율성 및 일관성의 이유로 RAM에 해당 작업들을 바로 수행하진 않는다. 동시성 프로그래밍에서는 CPU와 RAM의 중간에 위치하는 CPU Cache Memory와 병렬성이라는 ..

자바의 메모리 구조는 크게 method(static) 영역, stack 영역, heap 영역으로 구성되어 있다.https://whitehartlane.tistory.com/24 자바 메모리 구조 (feat 자바 변수)이전에 자바의 컴파일 과정에 대해 정리해본 글을 살펴보면JVM의 클래스 로더는 자바 컴파일러가 컴파일한 클래스 파일(바이트 코드)를 동적 로딩의 과정을 통해여 JVM의 메모리(Runtime Data Area)에whitehartlane.tistory.com이 중 static영역과 heap 영역은 자바의 멀티 스레드 환경에서 스레드들끼리 공유되기 때문에 공유자원에 대한 동기화 문제를 고려해야 한다. 스레드 동기화위에서 말했 듯 멀티스레드 환경에서는 다른 스레드에 의해 공유자원의 값이 쉽게 변경될..