Java
-
option 설명 etc -Xms 초기 Heap 메모리 size Heap -Xm 최대 사용 가능한 Heap 메모리 size Heap -XX:MetaspaceSize 초기/최소 metaspace size metaspace -XX:MaxMetaspaceSize 최대 metaspace size metaspace defaul = -1 ( unlimited ) -java.net.preferipv4stack=true IPv4, IPv6 중에 IPv4를 더 우선으로 사용 defaul = false
[Java] JVM 옵션 정리option 설명 etc -Xms 초기 Heap 메모리 size Heap -Xm 최대 사용 가능한 Heap 메모리 size Heap -XX:MetaspaceSize 초기/최소 metaspace size metaspace -XX:MaxMetaspaceSize 최대 metaspace size metaspace defaul = -1 ( unlimited ) -java.net.preferipv4stack=true IPv4, IPv6 중에 IPv4를 더 우선으로 사용 defaul = false
2024.04.21 -
코드 내부에서 java의 다형성 특징을 이용해서 abstract, interface를 이용해 기능을 작성하는 경우가 있다. 이러한 경우에 하나의 application 내에서만 호출되는 관계가 아니고, 다른 application에 메시지로 전달되거나 redis와 같은 storage에 저장되는 경우 object를 string이나 byte로 변환하는 과정이 필요하게 된다. 해당 과정에서 abstract, interface를 사용하게 되면 실제로 deserialize 되는 시점에 해당 정보가 어떠한 concrete class에 매핑되는지에 대한 정보가 필요하게 된다. 이러한 구체적인 정보가 없이는 serialize 된 정보가 다시 객체로 변환되기는 불가능하다. @JsonTypeInfo를 사용하면 이러한 문제를 ..
[Java] 다형성 serialize (jackson, JsonTypeInfo)코드 내부에서 java의 다형성 특징을 이용해서 abstract, interface를 이용해 기능을 작성하는 경우가 있다. 이러한 경우에 하나의 application 내에서만 호출되는 관계가 아니고, 다른 application에 메시지로 전달되거나 redis와 같은 storage에 저장되는 경우 object를 string이나 byte로 변환하는 과정이 필요하게 된다. 해당 과정에서 abstract, interface를 사용하게 되면 실제로 deserialize 되는 시점에 해당 정보가 어떠한 concrete class에 매핑되는지에 대한 정보가 필요하게 된다. 이러한 구체적인 정보가 없이는 serialize 된 정보가 다시 객체로 변환되기는 불가능하다. @JsonTypeInfo를 사용하면 이러한 문제를 ..
2024.04.13 -
기존에 잘 동작하던 서비스의 java version을 upgrade시키고 난 이후에 에러가 발생하게 되었다. java 8 -> java 11 에러 내역 버전 업 이후에 thread 개수가 너무 많이 증가하여 out of memory 발생 Caused by: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached at java.base/java.lang.Thread.start0(Native Method) at java.base/java.lang.Thread.start(Unknown Source) at java.base/java.util.concurren..
[Java] ForkJoinPool 에러 발생 in Java11기존에 잘 동작하던 서비스의 java version을 upgrade시키고 난 이후에 에러가 발생하게 되었다. java 8 -> java 11 에러 내역 버전 업 이후에 thread 개수가 너무 많이 증가하여 out of memory 발생 Caused by: java.lang.OutOfMemoryError: unable to create native thread: possibly out of memory or process/resource limits reached at java.base/java.lang.Thread.start0(Native Method) at java.base/java.lang.Thread.start(Unknown Source) at java.base/java.util.concurren..
2024.03.11 -
ForkJoinPool java 7부터 사용가능한 Java Concurrency Framework 분할 정복(Divide and Conquer) 알고리즘과 유사한 구조 동일한 작업을 여러 개의 Sub Task로 분리(Fork)하여 각각 처리하고, 이를 최종적으로 합쳐서(Join) 결과를 만들어내는 방식 -> 대규모 작업을 빠르게 처리하는 데 도움 스레드풀의 큐(inbound queue)에 작업이 할당되면 pool 내의 스레드들이 해당 작업을 가져가서 수행한다. 각 스레드들은 다시 본인의 작업 큐(work queue)를 가진다. 각 스레드들의 작업 큐는 deque 자료구조를 가진다 (작업 스레드는 한쪽에서 꺼내 쓰고, 다른 스레드가 작업을 stealing 할 때 다른 한쪽을 사용) 작업 스틸링(Work ..
[Java] ForkJoinPool이란 (ParellelStream)ForkJoinPool java 7부터 사용가능한 Java Concurrency Framework 분할 정복(Divide and Conquer) 알고리즘과 유사한 구조 동일한 작업을 여러 개의 Sub Task로 분리(Fork)하여 각각 처리하고, 이를 최종적으로 합쳐서(Join) 결과를 만들어내는 방식 -> 대규모 작업을 빠르게 처리하는 데 도움 스레드풀의 큐(inbound queue)에 작업이 할당되면 pool 내의 스레드들이 해당 작업을 가져가서 수행한다. 각 스레드들은 다시 본인의 작업 큐(work queue)를 가진다. 각 스레드들의 작업 큐는 deque 자료구조를 가진다 (작업 스레드는 한쪽에서 꺼내 쓰고, 다른 스레드가 작업을 stealing 할 때 다른 한쪽을 사용) 작업 스틸링(Work ..
2023.12.21 -
Java8에서의 변경된 내역들을 정리해 보도록 하겠습니다 PermGen 영역의 제거 ( to meta space ) Lambda Expression Stream API Interface ( default, static method ) Optional java.time 패키지 나즈혼( javascript engine ) PermGen 영역의 제거 Permanent Generation - Class의 Meta정보나 Method의 Meta정보, Static변수와 상수 정보들이 저장되는 공간, 흔히 메타데이터 저장 영역 위와 같은 Exception은 Heap의 구성 중, Permanent Generation의 memory가 부족한 현상입니다 PermGen 영역은 GC가 되지 않으며 클래스 메타 데이터를 저장하는..
[JAVA] Java8 변경 사항 ( java7 to java8)Java8에서의 변경된 내역들을 정리해 보도록 하겠습니다 PermGen 영역의 제거 ( to meta space ) Lambda Expression Stream API Interface ( default, static method ) Optional java.time 패키지 나즈혼( javascript engine ) PermGen 영역의 제거 Permanent Generation - Class의 Meta정보나 Method의 Meta정보, Static변수와 상수 정보들이 저장되는 공간, 흔히 메타데이터 저장 영역 위와 같은 Exception은 Heap의 구성 중, Permanent Generation의 memory가 부족한 현상입니다 PermGen 영역은 GC가 되지 않으며 클래스 메타 데이터를 저장하는..
2023.11.25 -
java의 time 관련 표현 방법 정리 java.time package : https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html 비교 대상 LocalDateTime, OffsetDateTime, ZonedDateTime LocalDateTime ISO-8601 캘린더 시스템의 타임존 개념이 없는, 날짜-시간 시스템. ex : 2023-08-19T09:33:26.590 해당 컴퓨터의 타임존에 맞춘 시간을 의미 서울에서 new LocalDateTime()을 하면 서울의 현재 시각이 나온다 ISO-8601는 날짜와 시간과 관련된 국제표준이다. ISO-8601의 핵심은 - : T W Z 같은 정해진 문자만 써서 작성한다는 것 Zone..
[Java] java8 Time 관련 정리java의 time 관련 표현 방법 정리 java.time package : https://docs.oracle.com/javase/8/docs/api/java/time/package-summary.html 비교 대상 LocalDateTime, OffsetDateTime, ZonedDateTime LocalDateTime ISO-8601 캘린더 시스템의 타임존 개념이 없는, 날짜-시간 시스템. ex : 2023-08-19T09:33:26.590 해당 컴퓨터의 타임존에 맞춘 시간을 의미 서울에서 new LocalDateTime()을 하면 서울의 현재 시각이 나온다 ISO-8601는 날짜와 시간과 관련된 국제표준이다. ISO-8601의 핵심은 - : T W Z 같은 정해진 문자만 써서 작성한다는 것 Zone..
2023.08.20 -
Thread 종류 non-daemon, daemon tread non-daemon thread java의 main을 실행했을 때 실행되는 thread daemon thread 위의 non-daemon이 아닌 thread의 작업을 돕는 보조적인 역할을 하는 thread non-daemon thread가 모두 죽으면, daemon thread도 강제적으로 종료된다 garbage collection와 같은 백그라운드 태스크를 실행하며 low priority를 가지고 있습니다. Thread 상태 스레드의 상태는 java.lang.Thread 클래스 내부에 State라는 이름을 가진 Enumerated Types(열거형)으로 선언되어 있습니다. NEW 스레드가 생성되었지만 아직 실행되지 않은 상태 RUNNABLE..
[JAVA] Thread 종류 및 상태Thread 종류 non-daemon, daemon tread non-daemon thread java의 main을 실행했을 때 실행되는 thread daemon thread 위의 non-daemon이 아닌 thread의 작업을 돕는 보조적인 역할을 하는 thread non-daemon thread가 모두 죽으면, daemon thread도 강제적으로 종료된다 garbage collection와 같은 백그라운드 태스크를 실행하며 low priority를 가지고 있습니다. Thread 상태 스레드의 상태는 java.lang.Thread 클래스 내부에 State라는 이름을 가진 Enumerated Types(열거형)으로 선언되어 있습니다. NEW 스레드가 생성되었지만 아직 실행되지 않은 상태 RUNNABLE..
2023.07.08 -
서버에 설정을 살펴보던 중에 "java.security.egd" 옵션을 발견하게 되었고, 해당 설정이 어떠한 역할을 하는지 궁금하여 찾아본 내역을 정리해 보자. 정의 jvm 설정 중에 하나로 Java에 "SecureRandom" 클래스를 초기화 하는 방식에 영향을 미치는 옵션이다. 대부분의 설정값은 default값이 존재한다. 해당 default값을 사용하지 않고 따로 설정을 해주었다는 것은 기존에 default값을 사용할 때 어떠한 문제가 발생해서 따로 설정을 해주었을 것이다. default값을 사용하면 어떠한 문제가 발생하는지 찾아보자. java 8 이전에 버전에서는 "/dev/random" 값이 default 값이었다고 한다. 해당 값으로 설정이 되어있으면 Tomcat이 구동 되는데 blocking..
[Java] java.security.egd option서버에 설정을 살펴보던 중에 "java.security.egd" 옵션을 발견하게 되었고, 해당 설정이 어떠한 역할을 하는지 궁금하여 찾아본 내역을 정리해 보자. 정의 jvm 설정 중에 하나로 Java에 "SecureRandom" 클래스를 초기화 하는 방식에 영향을 미치는 옵션이다. 대부분의 설정값은 default값이 존재한다. 해당 default값을 사용하지 않고 따로 설정을 해주었다는 것은 기존에 default값을 사용할 때 어떠한 문제가 발생해서 따로 설정을 해주었을 것이다. default값을 사용하면 어떠한 문제가 발생하는지 찾아보자. java 8 이전에 버전에서는 "/dev/random" 값이 default 값이었다고 한다. 해당 값으로 설정이 되어있으면 Tomcat이 구동 되는데 blocking..
2023.06.28