본문 바로가기

Jave & Kotlin27

Heap Dump 분석 - Jmap & Eclipse Memory Analyzer(MAT) Java Application을 개발하고 운영하다 보면 메모리 누수 즉, OutOfMemoryError를 겪는 경우가 있다. 그 중에서도 힙 메모리 공간이 부족해서 생기는 에러인 java.lang.OutOfMemoryError: Java heap space이 발생했을 때 HeapDump 분석을 하는 방법에 대해서 정리한다. Heap Dump 분석 - Jmap & Eclipse Memory Analyzer(MAT) java.lang.OutOfMemoryError: Java heap space java.lang.OutOfMemoryError 예외는 메모리 누수 상황이 발생했을 때 발생하며 그 중에서도 Java heap space 예외는 JVM 내 힙 공간이 부족하여 생기는 예외이다. 힙은 서버를 구동할 때 .. 2023. 3. 17.
자바 -Xms -Xmx 힙 메모리 설정 Jar 파일을 실행할 때 여러 옵션들을 줄수가 있는데 그 중에서도 힙메모리 관련 설정인 -Xms와 -Xmx 옵션에 대해서 정리한다. 자바 -Xms -Xmx 힙 메모리 설정 -Xms와 -Xmx -Xms와 -Xmx 옵션은 Jar 파일을 실행할 때 초기 할당 메모리와 최대 할당 메모리를 지정하는 옵션이다. 간혹 -Xms 옵션을 초기 할당 메모리가 아닌 최소 할당 메모리로 잘못 알고 있는 경우가 있는데 최소가 아닌 초기 할당 이다. 만약 다음과 같이 설정을 했다고 가정해보자. -Xms2048m -Xmx4096m 다음과 같이 옵션을 주고 jar 파일을 실행하게 되면 초기 힙 메모리 사이즈가 2048MB로 설정되고 최대는 4096MB로 설정이 된다. 테스트를 위해서 인텔리제이에서 자바 애플리케이션을 실행할 때 옵션.. 2023. 3. 14.
Kotlin - indexOf()를 통한 Data Class와 Class 특성 알아보기 개발을 하던 도중 indexOf()를 활용하여 전달 된 파라미터 값과 일치하는 리스트 값의 인덱스 번호를 반환해줘야 하는 경우가 생겼다. List안에는 일치하는 값이 있음에도 불구하고 indexOf() 함수를 활용하여 값을 찾으려고 하는데 반환 된 값이 -1로 떨어지는 것이었다. 해당 케이스에 대한 원인과 해결 방안에 대해서 정리한다. Kotlin - indexOf()를 통한 Data Class와 Class 특성 알아보기 원인 다음과 같이 List 컬렉션에서는 indexOf() 함수를 제공한다. indexOf()는 해당 값이 존재하지 않으면 -1을 반환하고 존재한다면 해당 index 값을 리턴한다. 찾으려고 한 값은 dto 객체 내의 특정 필드의 값을 찾는 것이 었고 예시를 들면 다음과 같다. val t.. 2023. 1. 24.
코틀린 - 코드 실행 시간 측정 measureTimedValue 코드 실행 시간을 측정하기 위해서 다양한 방법이 있지만 코틀린에서 제공하는 measureTimedValue에 대해서 알아본다. 코틀린 - 코드 실행 시간 측정 measureTimedValue 코드 실행 시간을 측정하기 위해서는 아래와 같이 코드를 짜도 무방하지만 코틀린에서는 좀 더 간편하게 시간을 측정할 수 있도록 함수를 제공한다. val startTime = getCurrentTime() // do something val endTime = getCurrentTime() println("elapsedTime : ${endTime - startTime}") measureTimedValue() 함수를 이용하면 간편하게 코드 시간 측정이 가능하다. 먼저 아래 두가지를 import 해준다. import kot.. 2022. 11. 8.
Java - JAR 파일이란? WAR EAR 자바로 개발을 하게 되면 JAR와 WAR 파일을 봤을 것이다. 각각의 정의를 알아보고 추가적으로 EAR의 정의도 정리한다. Java - JAR 파일이란? WAR EAR Jar 파일이란? Jar 파일이란 Java Archive Files 의 약자로 일종의 자바 프로젝트 압출 파일을 의미한다. Jar 파일 안에는 여러개의 자바 클래스 파일들과 해당 클래스들이 이용하는 관련 리소스 등의 메타데이터를 하나의 파일로 모아서 배포하기 위한 소프트웨어 패키지 파일 모맷이다. 이렇게 하나의 파일로 압축되어 있으면 여러 파일들을 따로 받는 것이 아니기에 편리하고 시간도 절약된다. 실행을 하기위해서는 JDK에 포함되어 있는 jar 명령어를 이용해서 실행이 가능하다. 추가적으로 zip 파일 압축 알고리즘을 기반으로 만들어져.. 2022. 10. 28.
Kotlin - 코틀린에서의 Primitive Type (원시타입) 들어가며 원시타입의 정의와 코틀린의 원시타입은 자바에서의 원시타입과 어떤 차이가 있는지 알아본다. 원시 타입 먼저 원시 타입이란 정수, 실수, 문자 논리 리터럴등의 실제 데이터 값을 저장하는 타입을 말한다. 자바에서는 원시 타입과 참조 타입으로 나뉘며 참조 타입은 객체의 번지 즉 주소를 저장하여 참조하는 타입으로 메모리 주소 값을 통해 객체를 참조하는 타입이다. 코틀린에서의 원시 타입 코틀린에서는 원시 타입과 래퍼 타입을 따로 구분하지 않는다. 자바에서는 Integer와 Int를 구분해서 사용하는데 코틀린에서는 Int 하나만 존재한다. 그렇다고 코틀린에서 래퍼 타입이 존재하지 않는 것이 아니다. 코틀린의 타입은 컴파일 시 자바의 원시타입 또는 래퍼타입으로 자동으로 변환된다. 예를 들어 Int 타입은 자바.. 2022. 8. 27.