Language36 [JVM] CPU 캐시와 메인 메모리 사이, @Volatile 어노테이션에 대해 알아보자! 들어가며멀티코어 프로세서가 당연해진 현대의 애플리케이션 개발에서, 동시성 제어는 필수적인 고려사항이 되었습니다.그 중에서도 @Volatile 키워드는 자바의 동시성 제어에서 가장 기본적인 영역입니다.그럼에도 저는 사실 부트캠프를 통해 속성으로 프로덕션 코드를 생산하는 방법 위주로 학습했었기에, 잘 몰랐던 부분입니다.그래서 이번 글을 통해 @Volatile의 동작 원리를 CPU 캐시와 메인 메모리의 관계부터 차근차근 살펴보고, 실제 발생할 수 있는 문제 상황과 해결 방법을 자세히 알아보겠습니다.1. CPU 캐시와 메모리 가시성 문제1.1 CPU 캐시는 왜 필요한가?현대의 CPU는 메인 메모리에 비해 훨씬 빠른 속도로 동작합니다.만약 CPU가 모든 데이터를 메인 메모리에서 직접 읽고 써야 한다면, CPU는 .. 2024. 12. 15. InvocationTargetException (리플렉션을 통해 함수를 동적으로 실행할 시 예외 처리에 관한 글) 오늘은 Java와 Kotlin에서 리플렉션을 사용할 때 자주 마주치는 InvocationTargetException에 대해 이야기해보겠습니다. 이 예외를 효과적으로 처리하는 방법도 함께 알아볼게요.InvocationTargetException이란?InvocationTargetException은 Java의 리플렉션 API를 사용해 메서드를 동적으로 호출할 때 발생할 수 있는 예외입니다. 호출된 메서드 내부에서 발생한 예외를 감싸서 전달하는 역할을 하죠.주요 특징:원인 예외를 감싸서 전달: 발생한 예외를 그대로 감싸서 전달합니다.원본 예외 접근 가능: getCause()나 getTargetException() 메서드를 사용해 원본 예외에 접근할 수 있습니다.주로 발생하는 메서드: Method.invoke().. 2024. 6. 26. Java Virtual Machine(JVM) 메모리 옵션 분석 Java 애플리케이션의 성능 최적화를 위해 자주 사용되는 JVM 옵션들인 XX:InitialRAMPercentage, XX:MaxRAMPercentage, XX:MinRAMPercentage, XX:MaxHeapFreeRatio, XX:MinHeapFreeRatio 에 대해 상세히 알아보겠습니다. 이러한 옵션들은 JVM의 힙 메모리 관리 및 성능 튜닝에 중요한 역할을 합니다.1. XX:InitialRAMPercentageXX:InitialRAMPercentage 옵션은 JVM이 시작할 때 할당받는 초기 힙 메모리의 크기를 호스트 머신의 전체 RAM 대비 비율로 설정합니다. 이 값은 퍼센티지로 표현되며, 예를 들어 시스템의 전체 메모리가 16GB이고 XX:InitialRAMPercentage를 10%로 설.. 2024. 4. 26. Sealed Class란 무엇인가? Kotlin에서 sealed class는 한정된 클래스 상속을 제공하여 표현력 있는 도메인 모델을 구성할 수 있는 방법을 제공합니다. 즉, sealed class는 자신을 상속할 수 있는 클래스의 종류를 제한함으로써, 특정 상태와 행동을 더 명확하게 표현할 수 있습니다. Sealed Class의 주요 특징 제한된 상속: Sealed 클래스의 모든 하위 클래스는 동일한 파일 내에 정의되어야 하므로 컴파일러가 가능한 모든 하위 타입을 알 수 있습니다. 상태 표현: Sealed 클래스는 앱의 명시적인 상태를 나타내는 데 사용될 수 있습니다. 각각의 하위 클래스는 앱의 상태의 일부 또는 전이를 나타냅니다. Exhaustive 체크: when 표현식에서 sealed 클래스를 사용하면, 모든 경우가 처리되었는지 컴.. 2023. 10. 13. 이전 1 2 3 4 ··· 9 다음 more 728x90