JAVA 8

GC 로그 찍어서 분석해보기

GPT의 도움을 받아 공부하였다. 먼저 GC 로그를 찍기 위해 vm 옵션에 아래의 값을 추가하자// 초기메모리, 최대 메모리 , 로그 옵션-Xms512m -Xmx512m -Xlog:gc*:file=gc.log Mixed GC를 경험해보자 import java.util.ArrayList;import java.util.List;public class MemoryLeakTest { private static final List LEAK = new ArrayList(); public static void main(String[] args) throws Exception { System.out.println("Start Leak Test"); long l = System...

JAVA 2025.11.24

G1 GC

G1 의 출시 배경기존 Parallel / CMS 한계로 인해 만들어짐핵심은 긴 STW 시간CMS의 메모리 단편화, 이로인한 pause 시간 예측 불가 한마디로 (긴 STW, 단편화)를 해결하기 위해 출시된 GC이다.목표는 Pause time을 예측 가능하게 하는 것이다. G1 GC의 핵심 아이디어기존 Young/Old 세대 구조를 고정하지 않음 Heap 전체를 균일한 Region으로 분리크기 : 1~32MB정도 finxed-size regionYoung / Survivor / Old / Humongous 등을 region 단위로 동적으로 구성 Garbage-First(G1) 전략Garbage가 가장 많은 Region부터 회수 Concurrent marking(병렬 마킹) + Copying compac..

JAVA 2025.11.24

GC (Garbage Collection)

GC란?힙 영역의 자바 객체중 사용하지 않거나 참조하지 않은 객체를 처리(쓰레기 수집)하는 프로세스이다. Stop-the-world(STW)란?GC가 안전하게 메모리를 조작하기 위해 모든 애플리케이션 스레드를 일시 정지 시키는 것즉, GC에 집중하는 것이다. mark-sweep-compact란?GC 대상 객체를 식별(mask), sweep(제거), compact(압축)compact를 하는 이유는 메모리 단편화를 없애기 위해서이다. GC가 Root Space로부터 그래프 순회를 통해 연결된 객체들을 찾아 마킹하고 그외를 sweep한다음 compact한다.GC의 종류Serial GCYoung GC : stop-the-world 후 single Thread로 mark-copy(Survivor or Old 영..

JAVA 2025.11.21

정규표현식

보통 String.matches, replaceAll 에 많이 사용하므로 거기에 맞춰서 정리1. 기본적인 정규 표현식 요소1.1 문자 클래스(Character Classes).임의의 한 문자 (개행 제외)[abc]a, b, c 중 하나[^abc]a, b, c를 제외한 어떤 문자[a-z]소문자 알파벳 한 글자 (a~z)[A-Z]대문자 알파벳 한 글자 (A~Z)[0-9]숫자 (0~9)[a-zA-Z0-9]영문 대소문자 + 숫자\d숫자 (0-9) (== [0-9])\D숫자가 아닌 문자 (== [^0-9])\w알파벳 또는 숫자 또는 _ ([a-zA-Z0-9_])\W\w가 아닌 문자 (공백, 특수 문자 등)\s공백 문자 (스페이스, 탭, 개행 등)\S공백이 아닌 문자1.2 앵커(Anchors)정규식설명^문자열의 시..

JAVA 2025.03.06

ENUM - 열거형

자바 공부가 너무 처참해서 다시 공부하기로 했다.이번에는 내가 제일 모르는 ENUM에 대해서 많이 찾아보고 직접 쳐보고 배운 것을 정리하겠다.   ENUM이란?열거, 목록 등으로 상수들의 집합이다.  보통 상태를 표현할 때 많이 쓰는 것 같다. (대부분 배송 상태, 날짜 등으로 예제를 갖는다.) ENUM이 있기 전에는 private static final 자료형 상수명  이런 식으로 많이 사용했지만 ENUM이 있으니 ENUM을 사용하면 된다.  왜 사용하는가 ?type-safety(타입 안정성) 보장단순성, 가독성 upENUM은 싱글톤 객체변경 범위 최소화컴파일 에러 (체크 에러)switch 문 사용 가능 사용 방법enum Season { SPRING, SUMMER, AUTUMN, ..

JAVA 2025.02.10

배열의 복사 : clone() 메서드 자바

✔️ 1차원 배열 깊은 복사얕은 복사는 그냥 대입하면 되므로 깊은 복사를 중점으로 정리 1차원 배열 깊은 복사는 배열의 메서드인 clone() 을 사용하면 된다.  int[] arr = {1,2};int[] arr2 = arr.clone();   Testpublic class Main { public static void main(String[] args) throws IOException { int[] arr = {1, 2}; int[] arr2 = arr.clone(); arr[0] = 55555; for (int i : arr) { System.out.print(i + " "); } System.ou..

JAVA 2024.09.03

Lambda & Stream

✔️ lambda(람다)람다식은 메서드로 전달할 수 있는 익명 함수를 단순화한 코드 블록() -> {}() : 파라미터-> : 화살표{} : 실행문람다식은 함수 자체를 전달 인자로 보내거나 변수에 저장하는 것이 가능람다식에서 타입이 예측가능하다면 생략 가능특정 람다식을 사용하여 변수에 담는데 그 변수의 타입은 함수형 인터페이스 타입이다.함수형 인터페이스 : 하나의 추상 메서드를 갖는 인터페이스함수 디스크립터 : 함수형 인터페이스의 추상 메서드 시그니처메소드 시그니쳐 : 메소드의 이름 + 메소드의 파라미터 + 파라미터의 수  함수형 인터페이스함수 디스크립터 기본형 특화 PredicateT -> booleanIntPredicate, LongPredicate, DoublePredicateConsumerT ->..

JAVA 2024.08.17

Optional<T>

✔️ Optional이란 ?Optional은 NullPointException 발생 방지를 위해 사용 Java8Optional는 null 이 올 수 있는 값을 감싸는 Wrapper 클래스  ✔️ null 체크기존에는 if문을 사용해서 null 체크List list = store.get("itemName");if ( list == null) { log.info("없는 상품"); // 처리 }public final class Optional { /** * 빈 optional을 공통객체로서 가지고 있다. */ private static final Optional EMPTY = new Optional(null); /** * null이 아닐 경우 값이 담기고, nul..

JAVA 2024.08.17