Java Memory Model(JMM)과 동시성 규칙
·
Java
Java Memory ModelJava Memory Model(JMM)은 JVM 내에서 메모리에 데이터를 읽고(read) 쓸 때(write)의 규칙을 말한다.JMM는 메모리를 두 가지의 공간 개념으로 다룬다.하나는 스레드 간 공유되는 메모리로,다른 하나는 스레드 내에서만 사용되는 메모리로 다룬다.JVM에서 스레드 간 공유되는 영역은 Heap(Method Area도 포함)이다.스레드 내에서만 사용되는 영역은 JVM Stack이다. (JVM Stack 내의 Stack Frame들을 아우르는 스택 영역이라 생각하자.) 메모리 모델의 이해를 위해 쉬운 예시를 들어보자 가정Heap에는 `Object 1` 객체와 `Object 2` 객체가 들어있다.메서드 내용은 primitive 타입인 int 변수를 생성하고, `..
JVM 아키텍처 정리
·
Java
JVM(Java Virtual Machine), JMM(Java Memory Model) 관련 글들을 읽다가 "논리적인 개념"과 그 개념을 구현한 "구현체"를 헷갈려했다. 이 글을 통해 JVM 아키텍처에 대해 제대로 정리해 보자.JVM 명세To implement the Java Virtual Machine correctly, you need only be able to read the class file format and correctly perform the operations specified therein. Implementation details that are not part of the Java Virtual Machine's specification would unnecessarily co..
[Java] opencsv 로 CSV 읽고 저장하기
·
Java
개요이 글에서는 Java와 OpenCSV 라이브러리를 사용하여 간단한 웹 크롤러를 구현하고, 수집한 데이터를 CSV 파일로 저장하거나 CSV 파일에서 읽어오는 방법을 다룹니다.OpenCSV 의존성 추가먼저, 프로젝트에 OpenCSV 라이브러리를 추가합니다. build.gradle 파일에 다음 의존성을 추가하세요.implementation 'com.opencsv:opencsv:5.9'Java POJO 구현다음은 CSV 파일의 데이터를 매핑할 Java POJO 클래스입니다.import com.opencsv.bean.CsvBindByName; import java.time.LocalDateTime; import java.time.LocalTime; import java.time.format.DateTim..
[Java] Optional에서 map과 flatMap의 차이점 쉽고 빠르게 이해하기
·
Java
map과 flatMap의 차이점Optional의 map과 flatMap의 주요 차이점은 함수의 반환 타입이 다르다는 것이다.map : Optional로 감싸진 타입(T)이 비어있지 않으면 .map()을 적용하고, 결과를 Optinal로 감싸서 반환한다. 만약 처음부터 Optional이 비어있었다면 빈 Optional을 반환한다.flatMap : map과 비슷하다. 하지만 .flatMap()을 적용한 결과를 Optional로 감싸지 않고 반환한다는 점만 다르다. 즉, 중첩된 Optional을 평면화 해주는 역할을 한다.예제 코드public class Car { // Car의 필드에 name은 차 이름이 있을수도 없을수도 있기에 Optional 로 감싸져 있다. private Optional na..