fragile and resilient

Java 5

자바 성능 튜닝 끄적끄적

CPU 사용률CPU 사용률은 전형적으로 사용자 시간과 시스템 시간으로 나뉜다. 사용자 시간: CPU가 애플리케이션 코드를 실행하는 시간의 백분율 애플리케이션 I/O 작업으로 디스크의 파일을 읽거나 네트워크로 데이터를 쓰는 등 시스템 시간: CPU가 커널 코드를 실행시키는 시간의 백분율 기반 시스템 자원 사용 시 vmstat 1 - 매초마다 프로세스, 메모리, 페이징, swap, I/O 블럭, CPU 활동 사항들의 정보 출력코드를 최적화하는 데 있어 목표는 짧은 시간동안 CPU 사용률을 낮추는 것이 아니라 높이는 것이다. 디스크 사용률애플리케이션이 디스크 I/O를 많이 일으키면 I/O는 병목되기 쉽다.iostat -xm 5 - 5초마다 디스크 사용률 정보를 표시할 수 있다. - -x옵션을 사용하면 확장된 ..

Java 2024.02.17

[Java] Thread Pool

Thread Pool은 매번 요청이 올 때마다 스레드를 생성하고 수거하는 것이 아닌, 설정한 스레드 수만큼 미리 생성하여 사용하는 것을 말합니다.Thread Pool이 필요한 이유새로운 스레드를 생성할 때마다 스레드를 위한 메모리 영역(스택)을 확보하고, 스레드가 더 이상 필요 없으면 해당 메모리 영역을 회수하는데, 이는 오버헤드가 큰 작업입니다.Executors 클래스의 정적 메서드를 통해 ExecutorService의 구현 객체를 제공받아 스레드 풀을 생성할 수 있습니다.먼저 ThreadPoolExecutor를 설명하기 위해, Thread Pool 종류 중 하나인 newFixedThreadPool() 메서드를 살펴보겠습니다.내부에서 ThreadPoolExecutor 클래스 생성자를 호출하고 있는데요...

Java 2022.09.12

[Java] 스레드 동기화 - Synchronized

얼마 전 팀 프로젝트에서 모집 인원이 초과하였는데도 스터디 참여가 가능한 일이 발생했다.상황에 대한 설명을 덧붙이면 모집 인원이 3명이고, 현재 2명이 참여한 상태에서 동시에 추가로 2명이 참여 버튼을 누를 경우 가입이 성공하여 총 4명이 되는 문제였다.'스터디 참여자 수’라는 공유 자원이 존재하여 동시성 문제라고 생각하여 스터디 참여를 처리하는 메서드에 synchronized 키워드를 붙여주니까 발생하지 않았다. 해당 문제를 팀원들과 인지한 후 동시성 문제에 대한 이야기를 많이 했는데, 현재 방법이 비효율적인 방식일 수도 있으니 해당 방법 이외의 더 좋은 방식으로 풀 수는 없는지 고민하기로 했다. 자바는 스레드 동기화를 지원하는 방법들을 제공하는데, 그중 위에서 언급한 synchronized에 4가지 ..

Java 2022.09.11

[Effective java] equals를 재정의하면 hashCode도 재정의해야 한다.

equals를 재정의한 클래스에서는 hashCode도 재정의해야 합니다.그렇지 않으면 HashMap과 HashSet 같은 컬렉션의 원소로 사용할 때 문제가 발생합니다.hashCode 규약1) equals 비교에 사용되는 정보가 변경되지 않았다면,애플리케이션이 샐행되는 동안에는 특정 객체의 hashCode를 몇 번을 호출하든 항상 같은 값을 반환해야 한다.2) equals가 두 객체를 같다고 판단했다면, 두 객체의 hashCode는 같은 값을 반환해야 한다.3) equals가 두 객체를 다르다고 판단했더라도 두 객체의 hashCode가 서로 다른 값을 반환할 필요는 없다.hashCode를 잘못 정의했을 때, 문제가 되는 조항은 두번째입니다. equals는 논리적으로 다른 두 객체를 같다고 할 수 있는데, ..

Java 2022.02.18

[Effective java] equals 일반 규약

1편과 2편은 이어지는 하나의 내용입니다.equals()의 재정의가 필요한 상황은 언제일까요?두 객체가 물리적으로 같은지가 아니라 논리적인 동치성을 확인해야 하는데, 상위 클래스의 equals가 논리적 동치성을 비교할 수 있도록 재정의되지 않았을 때입니다. (동치란 “같다"는 개념을 추상화한 것입니다. : https://namu.wiki/w/동치관계 ) 만약 equals()를 사용하려는 개발자가 있다면, 사용 의도는 객체의 주소가 같은 지를 알고 싶은 것이 아니라, 값이 같은 지를 알고 싶은 것일겁니다.String name1 = new String("woowacourse"); String name2 = new String("woowacourse"); System.out.println(name1 == na..

Java 2022.02.17