[Java] JVM 알아보기 - (4) JVM GC, Heap
2022. 11. 27. 23:51
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 네 번째 포스팅입니다. 이번 포스팅에서는 JVM 의 GC 와 Heap 에 대해서 알아보겠습니다. JVM GC(Garbage Collection) 개발자는 직접 자바의 메모리 관리를 하지 않아도 된다. 메모리 관리를 JVM 이 알아서 하기 때문인데, JVM 내에서 메모리 관리를 해주는 것을 가비지 컬렉터 라고 부른다. 가비지 컬렉터는 힙에서 사용 가능한 모든 객체를 추적하고 사용하지 않는 객체에 할당 된 메모리를 해제한다. 이 작업을 가비지 컬렉션, GC 라고 한다. GC 의 프로세스를 알아보기 이전에, 먼저 GC 와 관련 된 개념들을 정리해보자. UnReachable Object 유효한 참조가 없는 객체를 UnReachab..
[Java] JVM 알아보기 - (3) JVM Memory Structure
2022. 11. 23. 01:23
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 세 번째 포스팅입니다. 이번 포스팅에서는 JVM 메모리 구조에 대해서 알아보겠습니다. JVM Architecture 지난 포스팅에서 이야기한 것과 같이, ClassLoader 는 ".class" 파일에서 바이너리 데이터를 생성하여 Method Area 에 저장한다. JVM Architecture 그림을 보면 Method Area 는 Runtime Data Areas 의 한 부분이다. JVM 은 OS 로부터 프로그램 실행 중에 사용되는 메모리 영역을 할당받는데, 이를 Runtime Data Areas 라고 한다. 앞으로 설명할 Method Area 나 Heap Area 는 JVM 의 스펙에 정의되어 있는 논리적 개념이다. 모..
[Java] JVM 알아보기 - (2) JVM ClassLoader
2022. 11. 17. 21:59
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 두 번째 포스팅입니다. 이번 글은 JVM 의 구성 요소 중 하나인 ClassLoader 에 대해서 알아보겠습니다. JVM Architecture JVM 의 구성요소는 크게 세 가지다. Class Loader Subsystem Runtime Data Areas Execution Engine 이번 포스팅에서는 먼저 Class Loader 부터 알아보도록 하자. ClassLoader의 동작 과정 Java 클래스는 한 번에 전부 메모리에 로드되지 않고 사용 시점에 로드된다. 이 때 클래스 로더가 JRE 에 의해 호출되고, 동적으로 클래스를 메모리에 로드한다. 클래스 로더는 주로 Loading, Linking, Initializat..
[Java] JVM 알아보기 - (1) JDK, JRE, JVM
2022. 11. 16. 00:08
Java
내가 만든 자바 코드가 어떤 과정으로 실행되는지 알아보기 위한 "JVM 알아보기" 포스팅입니다. 이번 글은 JVM 의 동작 방식을 알아보기 이전에 JDK, JRE, JVM 의 개념을 정리해보겠습니다. JDK(Java Development Kit) Java 프로그램 개발에 사용되는 소프트웨어 개발 환경 키트다. JRE, 인터프리터/로더, 컴파일러(javac), 아카이버(jar) 등 Java 개발에 필요한 기타 도구가 포함된다. JRE(Java Runtime Environment) 개발할 수 없는, 실행만을 위한 환경이다. Java HotSpot 클라이언트 및 서버 가상 머신을 포함한 JVM 과 각종 라이브러리 등으로 구성된다. JVM(Java Virtual Machine) 보통 자바 프로그램이 수행되는 프..
[Spring Boot] AWS S3 이미지파일 업로드하기
2022. 9. 3. 21:22
Spring Boot
Amazon S3 ? Simple Storage Service 의 약자 이미지, 파일 등의 정적 리소스를 REST 인터페이스를 통해 저장/삭제/조회할 수 있다. Object 객체, 저장되는 대상을 의미한다. 실제 파일과 메타 데이터로 구성 Bucket Object 가 저장되는 곳, 최상위 디렉토리 Region Object 가 저장되는 물리적 위치 IAM 정책 생성하기 Identity and Access Management 의 약자 AWS 리소스에 접근하도록 권한이 부여 된 대상을 관리하는 서비스 액세스 유형 액세스 키, Programmatic access 사용자가 AWS API, SDK 등의 개발 도구에 대해 접근이 필요한 경우, 각 사용자에 대한 액세스 키가 생성된다. 암호, AWS Management..
[Java] Generic 과 WildCard
2022. 8. 31. 01:40
Java
제네릭 Generic 클래스와 인터페이스 선언에 타입 매개변수가 쓰이면 이를 제네릭 클래스 혹은 제네릭 인터페이스라고 한다. 우리가 흔히 사용하는 List 인터페이스를 보자. 리스트 인터페이스는 원소의 타입을 나타내는 타입 매개변수 E를 받고 있기 때문에 List 나 List 등으로 사용할 수 있다. 제네릭 클래스와 제네릭 인터페이스를 통틀어 제네릭 타입 이라고 한다. (참고) Raw Type 은 사용하지 말라 제네릭 타입을 정의하면 Raw Type 도 함께 정의된다. List 를 정의했다면 로 타입은 List 다. Raw Type 을 사용한다는 것은 다음과 같다. List strings = new ArrayList(); strings.add("100"); strings.add(Integer.valueO..
[Java] Wrapper class 와 일급 컬렉션
2022. 8. 25. 00:41
Java
Wrapper class 자바의 기본 자료형(Primitive Data Type)을 객체로 취급하기 위해 사용하는 클래스 기본 타입의 데이터를 객체로 포장하기 때문에 Wrapper class 라고 부른다. java.lang 패키지에 정의되어 있다. Use Case 1. 제네릭 클래스는 객체만 처리한다. 제네릭 클래스를 이용하기 위해서는 기본 타입 데이터를 래핑해서 사용해야 한다. 2. java.util 패키지의 클래스는 객체만 처리한다. java.util 패키지에 포함 된 클래스 AbstractCollection, AbstractList, AbstractSequentialList, LinkedList, ArrayList, Vector, Stack, AbstractSet, HashSet, LinkedHas..
[Java] Reflection 이란?
2022. 8. 15. 00:09
Java
Reflection 런타임에 메서드, 클래스 및 인터페이스의 동작을 검사하거나 수정하는 데 사용되는 API 구체적인 클래스 타입을 알지 못해도 클래스의 이름만으로 메소드, 필드에 접근할 수 있다. API 라고 해서 사용 방법을 알아야할까? 라는 생각이 들어서 검색해보았는데 성능 및 디버깅 이슈로 개발자가 직접 Reflection 을 구현하는 경우는 드물다고 한다. (참고) https://kmongcom.wordpress.com/2014/03/15/자바-리플렉션에-대한-오해와-진실/ Why? 그렇다면 왜 Reflection 에 대해서 알아야할까? 답은 스프링 프레임워크에서 이미 우리가 Reflection 을 사용하고 있기 때문이다. Java 는 컴파일 시점에 타입을 결정하는 정적 타입 언어다. 개발자가 변..