String Constant Pool, feat. Runtime Constant Pool
·
💻 Dev/Java & OOP
String str = "hello";String str2 = "hello";System.out.println(str == str2); // true위 코드에서 str == str2의 결과는 뭘까?동등성과 동일성을 배웠다면 false로 예상했겠지만 결과는 true다. "어라 자바에서 객체는 ==이 아니라 .equals()로 비교해야 문자열 비교가 되는 거 아니었나?"그 이유는 JVM이 String Pool을 사용하기 때문이다. String Constant Pool이란?우선 Contant Pool이란 클래스 내에 사용되는 상수들을 담아놓은공간이다.클래스 파일(.class)안에 테이블 형태로 들어가 있다. 이 Constant Pool에서 문자열 리터럴만을 별도로 관리하는 공간이 String Pool(Stri..
임계 구역(Critical Section)과 뮤텍스, 세마포어, 모니터
·
👶🏻 CS/Operating System
경쟁 상태여러 프로세스들이 동시에 데이터에 접근하는 상황에서, 어떤 순서로 접근하냐에 따라 결과 값이 달라지는 것을 경쟁 상태(Race Condition)이라고 한다. 이러한 문제를 방지하기 위해 동기화 기법이 사용되며, 이때 공유 자원에 접근하는 코드가 임계 구역(Critical Section)이다.   Critical Section Problem(임계 구역 문제)임계 구역은 하나의 프로세스나 스레드만 들어갈 수 있는 코드 영역이다.예를 들어, 여러 스레드가 같은 메모리 영역에 값을 쓰려고 하면 충돌이 발생할 수 있는데, 이때 각 스레드가 동시에 해당 메모리 영역을 쓰지 않도록 보호해야 한다. 이러한 설계를 위해서는 3가지 요구조건을 만족해야 한다. 1. Mutual Exclusion(상호 배제)하나의..
Sync&Async, Blocking&Non-Blocking
·
👶🏻 CS/Operating System
이 4가지는 IO(입출력)를 처리할 때 접할 수 있는 용어들이다. Blocking&Non-BlockingBlocking&Non-Blocking은 단어 그대로 현재 작업이 block(차단, 대기)되느냐 아니냐의 차이다. Blocking은 자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것이다.(제어권이 넘어간 것)Non-Blocking은 다른 주체의 작업에 관련 없이 자신의 작업을 하는 것이다.(제어권을 돌려받는 것) Sync&Async동기/비동기는 요청한 작업에 대해 순서가 지켜지는지, 결과에 관심이 있는지에 대한 관점에 있다. A프로세스가 본인 작업을 하다가 B프로세스에게 어떤 작업을 요청한다고 가정해 보자. Sync는 본인이 하던 작업을..
BigDecimal이란?
·
💻 Dev/Java & OOP
자바의 신 11장을 학습하다가 대부분 java docs 사용법? 에 대한 내용이라 어떤 걸 정리해야 할지 몰라'직접해 봅시다'파트에 BigDecimal API를 열어보라고 하길래 알아보고자 했다.결제나 큰 숫자 다룰 때 사용한다고 들어서 중요하구나~라고 듣기만 했다. BigDecimal이란?java.math 패키지에 속한 클래스로 정밀한 숫자 연산에 사용된다.주로 금융이나 과학 계산 등에서 부동 소수점 연산의 오차를 방지하고 정확한 결과를 얻고자 할 때 사용된다. 부동 소수점 연산의 오차란?public class Main { public static void main(String[] args) { double a = 0.1; double b = 0.2; doub..
Immutable(불변성), StringBuffer와 StringBuilder
·
💻 Dev/Java & OOP
String str = "Hello";System.out.println("String 객체의 주소 : "+str.hashCode());str = str + " World";System.out.println("String 객체의 주소 : "+str.hashCode()); 리터럴로 선언한 문자열 객체의 주소를 출력하고, 문자열만 더한 다음 객체 주소를 다시 출력해 보는 코드이다. 다시 변수를 만든 것도 아닌데 주소가 같지 않을까?String 객체의 주소 : 3541040String 객체의 주소 : 1758230625하지만 아니다. 왜일까?자바에서 String 객체는 기존 객체를 재사용하지 않는다, 같은 객체에 더한다고 해도 새로운 객체가 생성되고 기존 객체는 GC의 대상이 된다.즉, String 클래스는 I..
자바 코드의 메모리 영역(스택&힙)
·
💻 Dev/Java & OOP
자바 프로그램에서 코드가 컴파일되어 JVM에서 실행되기까지 과정에서 JVM은 필요한 데이터들을 용도에 따라 나누어 관리한다. JVM의 메모리 공간은 크게 Method 영역, Stack 영역, Heap 영역으로 구분되고 데이터 타입(자료형)에 따라 각 영역에 나눠서 할당된다.   메서드 영역(Method Area)메서드 영역은 JVM이 시작될 때 생성되는 곳으로 클래스 변수(Static 변수), 생성자(constructor)와 메서드(method) 등이 저장되는 공간이다.Static 영역이라고도 불리며 어느 곳에서나 접근이 가능하다.모든 스레드에서 공유되어 멀티 스레드 환경에서 동기화에 주의해야 한다.메서드 영역의 데이터는 프로그램이 종료될 때까지 메모리에 남아있다.그래서 프로그램이 종료될 때 까지 어디서..