Java 7부터 도입된 스레드 풀 ForkJoinPool은 Java 5의 전통적인 ThreadPoolExecutor와는 구조와 동작 방식이 특이하다. 직접 ForkJoinPool을 사용한 적은 없더라도 병렬 스트림, CompletableFuture, 가상 스레드 풀 등 다양한 자바 기능들이 내부적으로 ForkJoinPool를 의존하여 나도 모르게 사용하고 있었을 가능성이 크다. ForkJoinPool은 멀티 코어 CPU를 최대한 효율적으로 활용하는 것을 목표한다.코어 수와 유사한 개수의 스레드를 만들고 이것들의 가동률을 100%로 유지한다.병렬도와 무관하게 경합을 고려해야 하는 로직을 최소화한다.ForkJoinPool구현의 주요한 아이디어들을 살펴보자.1. ForkJoinPool내의 경합을 최소화환 ..
JVM이 Lambda를 어떤 방식으로 다루는지 궁금해서 찾아보던 중 Oracle 블로그에서 Red Hat의 시니어 엔지니어인 Ben Evans가 쓴 글을 찾을 수 있었다. 이를 이해하며 Lambda가 JVM에서 어떻게 다뤄지는지 살펴보려 한다. https://blogs.oracle.com/javamagazine/post/behind-the-scenes-how-do-lambda-expressions-really-work-in-java https://blogs.oracle.com/javamagazine/post/behind-the-scenes-how-do-lambda-expressions-really-work-in-java blogs.oracle.com javac, javap 모두 19.0.1을 사용하였다...
Stack을 쓰지 말라 프로그래밍에 조금만 익숙하다면 Stack과 Queue라는 자료구조를 알 것이다. 각각 LIFO(Last In First Out), FIFO(First In First Out)가 필요한 상황에 흔히 사용된다. java.util의 Stack은 Vector를 상속받아 구현되었는데 Vector는 대표적인 자바의 레거시 클래스로 Stack 또한 이 단점을 그대로 가지고 있다. A more complete and consistent set of LIFO stack operations is provided by the Deque interface and its implementations, which should be used in preference to this class. For exam..
try-finally의 단점 InputStream, OutputStream과 java.sql.Connection과 같은 자원은 close 메서드를 사용자가 직접 호출해 닫아주어야 한다.이런 자원을 직접 닫아주지 않아도 gc가 알아서 처리해주긴 하지만 그 시점을 정확히 알 수 없기 때문에 직접 닫아주는 것이 가장 안전하다. Java7 이전에는 자원의 닫힘을 처리하기 위해 try-finally가 사용되었다.BufferedReader를 사용해 한 줄의 콘솔 입력을 받는 메서드는 아래와 같다. String readLine() throws IOException { BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); try ..
동일성과 동등성 '동일하다'와 '동등하다'는 거의 같은 단어처럼 들리겠지만 프로그래밍에서는 큰 차이를 가지고 있다. int나 double 같은 기본 타입의 경우 우리는 '==' 연산자를 통해 같음을 확인한다. 그러나 객체의 경우 우리가 같다고 취급하고 싶어도 equals 메서드 혹은 '==' 연산자로 동일함이 확인되지 않는다. System.out.println(1 == 1); // true // 리터럴로 생성된 string은 string pool에 담겨 같은 객체가 재사용된다. String string1 = "string"; String string2 = "string"; System.out.println(string1 == string2); // true System.out.println(string1..
가변 인수(Varargs) 사용하기 Java 5 이전에는 메서드에 다른 개수의 인수들을 넣기 위해서는 메서드를 여럿 정의하거나 배열의 형태로 인수를 넘겨주어 처리해야 했다. Java 5의 가변 인수(Varargs)의 등장으로 Object... 와 같이 메서드의 인수를 0개 이상 받을 수 있게 선언이 가능해지며 이러한 불편함이 사라지게 되었다. public void method(String... strings) { for (String string : strings) { System.out.println(string); } } // method("a", "b", "c") 와 같이 사용 이렇게 가변 인수를 통해 입력을 배열처럼 편하게 처리할 수 있는 지금과 달리 public void method(String..
- Total
- Today
- Yesterday
- stubbing
- logback-spring.xml
- Payload 암호화
- JPA
- MySQL
- java switch case
- springboottest
- 람다식
- Java
- GitHub Discussion Template
- Spring
- 생성자 주입
- comparing
- Spring Boot Monitoring
- GitHub Discussion
- 함수형 인터페이스
- JPA JSON
- Spring 테스트
- Jenkins 예약 배포
- Fromtail
- RandomPort
- invokedynamic
- multiplebagsfetchexception
- MySQL 이벤트 스케줄
- 스프링
- thenComparing
- 가변 인수
- 자바
- 의존성 주입
- GitHub Discussion 템플릿
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | 7 |
| 8 | 9 | 10 | 11 | 12 | 13 | 14 |
| 15 | 16 | 17 | 18 | 19 | 20 | 21 |
| 22 | 23 | 24 | 25 | 26 | 27 | 28 |
