You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
#32 에 AtomicCounterTest에서 아래 그림처럼 카운트 횟수를 지정하는 totalCount를 Integer.MAX_VALUE로 하면 Out Of Memory가 뜨는 문제가 발생합니다.
Caused by: java.lang.OutOfMemoryError: Java heap space
at java.base/java.util.concurrent.AbstractExecutorService.newTaskFor(AbstractExecutorService.java:98)
at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:122)
at com.thread.concurrency.AtomicCounterTest.여러_더하기_수행_Executor(AtomicCounterTest.java:37)
at java.base/java.lang.invoke.LambdaForm$DMH/0x000000a000288800.invokeVirtual(LambdaForm$DMH)
at java.base/java.lang.invoke.LambdaForm$MH/0x000000a000190800.invoke(LambdaForm$MH)
at java.base/java.lang.invoke.Invokers$Holder.invokeExact_MT(Invokers$Holder)
To Reproduce
Steps to reproduce the behavior:
Go to src/test/java/com/thread/concurrency/AtomicCounterTest.java
totalCount를 Integer.MAX_VALUE로 변경
테스트 실행
See error
Expected behavior
A clear and concise description of what you expected to happen.
## 개요
- 새롭게 정의한 `ConcurrentBatchCounter` 인터페이스에 대한 구현체
## 변경 사항
- [x] ✨ Feat : `ConcurrentBatchingCounter`
- [x] ✨ Feat : `ConcurrentParameterizedBatchingCounter`
## 추가 정보
- 스레드 별 고유 ID로 분리하여 안정성 확보
#### `ConcurrentParameterizedBatchingCounter`
- 임의의 Integer를 받는 식으로 구현
- 배열의 크기가 커지면 메모리 이슈 발생
- 내부 기준에 따라 `flush`하여 해결
#### `ConcurrentBatchingCounter`
- YAGNI 원칙에 의거하여 최적의 구현체 고안
- LongAdder로 연산 속도 개선
#### 테스트
- Virtual Thread와 OS Thread, 그리고 Sync/Async 각각의 방식으로 시도
- 두 경우 모두 싱글 스레드 동작이 약 4배 빠름 (평균 10초)
- OS Thread는 Thread 수에 비례하여 생성 오버헤드 증가
- Virtual Thread는 수와 관계없이 일정 (평균 40초)
### 관련 이슈
Closes#33
Describe the bug
#32 에 AtomicCounterTest에서 아래 그림처럼 카운트 횟수를 지정하는
totalCount
를 Integer.MAX_VALUE로 하면 Out Of Memory가 뜨는 문제가 발생합니다.To Reproduce
Steps to reproduce the behavior:
src/test/java/com/thread/concurrency/AtomicCounterTest.java
totalCount
를 Integer.MAX_VALUE로 변경Expected behavior
A clear and concise description of what you expected to happen.
Originally posted by @haxr369 in #32 (comment)
The text was updated successfully, but these errors were encountered: