Java/자바를 더 깊게
-
JVM Warm-up 이란Java/자바를 더 깊게 2023. 9. 9. 00:01
JVM Warm-up 이란?warm-up은 흔히 워밍업으로 우리가 알고 있으며 몸풀기 준비운동이라는 뜻입니다. 그렇다면 JVM의 준비운동은 어떤것을 의미할까요? 이를 이해하기 위해서는 자바언어의 컴파일 과정을 알아볼 필요가 있습니다. 자바 언어의 컴파일 과정JVM 실행 전1) 소스 코드인 .java 파일을 바이트 코드인 .class 파일로 변환합니다. JVM 실행 후2) 클래스를 사용하는 시점에 클래스 로더가 lazy loading을 수행합니다.3) 로딩된 클래스를 OS가 이해할 수 있는 기계어로 변환합니다. 즉, 클래스가 실제로 사용되는 시점에 기계어로 변환됩니다. 새로운 버전의 애플리케이션을 배포한 직후에는 대부분의 클래스들이 사용되지 않았기 때문에 메모리에 적재되지 않은 상태이며 응답지연이 발생하..
-
자바 Inner static class 로딩 시점Java/자바를 더 깊게 2022. 4. 10. 01:23
싱글톤 패턴을 공부하던 중 Lazy 로딩을 하며 스레드 세이프하게 구현하기 위해서 static inner class를 사용해서 구현했습니다. Lazy Initialization, LazyHolder (static inner class를 사용하여 구현) public class Singleton { private Singleton() {} private static class InnerInstanceClass { // 클래스 로딩 시점에서 생성 private static final Singleton uniqueInstance = new Singleton(); } public static Singleton getInstance() { return InnerInstanceClass.instance; } } In..
-
[Java] Java Multi-Thread Programming의 모든것을 알아보자Java/자바를 더 깊게 2022. 3. 2. 01:53
Multi-Thread란 무엇인가(What)? 우선 Multi-Thread에 대해 알아보기 전에 프로세스에 대해 먼저 알아보겠습니다. 프로세스란? 단순하게 말하자면 실행 중인 프로그램입니다. 프로그램을 실행하면 OS로부터 실행에 필요한 자원(메모리)을 할당받아 프로세스가 됩니다. 우리가 친숙한 바탕화면의 실행 아이콘들이 프로그램입니다. 프로세스는 CPU, 메모리, 디스크, 네트워크 등의 자원을 사용하고 있습니다. 이클립스가 메모리를 1GB사용하고있네요. 프로세스는 프로그램을 수행하는데 필요한 데이터와 메모리 등의 자원 그리고 스레드로 구성되어 있습니다. 프로세스의 자원을 이용해서 실제로 작업을 수행하는 것이 바로 스레드입니다. 따라서 모든 프로세스에는 최소한 하나 이상의 스레드가 존재하며, 둘 이상의 스..
-
[Java] Java Collection Framework의 모든것을 알아보자Java/자바를 더 깊게 2022. 2. 22. 17:29
Java Collection Framework(JCF)란? Collection이란 객체 그룹을 나타내는 객체입니다. Collection 에 기본형 int를 넣지 못하고 객체인 Integer를 넣는 것을 떠올리시면 됩니다. 컬렉션 프레임워크는 컬렉션을 표현하고 조작하기 위한 통합 아키텍처로, 세부 구현 사항과 독립적으로 컬렉션을 조작할 수 있습니다. 데이터를 저장하는 자료 구조와 데이터를 처리하는 알고리즘을 구조화하여 클래스로 구현해 놓은 것으로 생각하시면 됩니다. Framework vs Library 둘 다 개발 생산성을 증가시켜준다는 공통점이 존재하지만 제어를 누가 할 수 있느냐에 따른 차이점이 있습니다. 라이브러리는 개발자가 라이브러리를 제어할 수 있으며, 프레임워크는 프레임워크가 개발자를 제어합니다..
-
[Java] JVM이란? JVM(Java Virtual Machine)의 모든것을 알아보자Java/자바를 더 깊게 2022. 2. 17. 09:06
JVM이란? Java Virtual Machine의 약자로 자바 가상 머신이라고 불립니다. 자바와 운영체제 사이에서 중계자 역할을 합니다. 따라서 자바가 운영체제 종류에 영향받지 않고 돌아갈 수 있도록 합니다. = (Write Once Run AnyWhere) C언어나 C++언어 같은 경우에는 16비트, 32비트, 64비트 플랫폼에 따라 int 형의 크기가 변하지만 JVM은 기본 자료형인 int는 4바이트(2^32)로 고정시켜 타입의 안정성을 꾀하고 플랫폼 독립성을 보장합니다. 어떤것들은 JVM이라고 부를 수 있을까? (JVM Specification) Specification은 '규격' 또는 '사양'이라고 번역됩니다. 특정 기술분야에 대해, 이 기술은 이런 규격을 가졌으니 이 기술을 사용하거나 구현할 ..
-
[Java] String이 불변 객체인 이유는?Java/자바를 더 깊게 2022. 2. 15. 01:19
보통 String / StringBuffer / StringBuilder의 차이점들은 많이 알고 있습니다. String은 불변 객체이며, StringBuffer/ StringBuilder는 가변 객체입니다. 또한 StringBuilder는 thread-safe 하지 않으며 StringBuffer는 thread-safe 합니다. 그런데 String은 왜 불변 객체로 만들었을까요? 1. 성능 자바에서 문자열은 정말 많이 사용됩니다. 따라서 자바는 상수풀 이라는 것을 만들었습니다. public class Test { public static void main(String[] args) { String s1 = "Hello World"; String s2 = "Hello World"; System.out.pri..