JAVA
-
ConcurrentHashMap(Lock Striping)JAVA 2022. 9. 9. 14:30
HashMap과 ConcurrentHashMap의 차이가 막연하게 Thread safe하지 않다 와 Thread safe 하다 라고만 알고 있었는데, 왜 Thread safe한지 Lock Striping 방식이 무엇인지 공부해보면 좋을 것 같습니다. HashTable HashTable 클래스를 일부 발췌한 코드인데, 모든 메서드에 synchronized 키워드가 붙어 Thread-safe하게 구현한 것을 볼 수 있습니다. 같은 HashTable 인스턴스에 여러 쓰레드가 동시에 접근해서 처리해야 하는 상황이라면 lock을 얻어 접근하는 쓰레드를 제외한 나머지 쓰레드는 블럭상태로 대기해야하기 때문에 성능상 좋지 못합니다. HashTable을 대체할 컬렉션이 있기 때문에 공식 문서에서도 사용을 권장하지 않습니..
-
Generic(Type Token, Super Type Token)JAVA 2022. 9. 8. 02:33
Generic이란 제네릭은 데이터 타입을 외부에서 지정해주는 기법입니다. 컴파일 시점에 타입 체크를 해주기 때문에 2가지 장점이 있습니다. 1. 컴파일러가 대신 형 변환을 해주기 때문에 형 변환의 번거로움을 줄일 수 있다. 2. 타입 매개변수에 맞는 값만 들어갈 수 있으므로 타입 안정성을 높일 수 있다. Generic의 필요성 제네릭 타입으로 선언한 클래스와 일반 클래스가 있을 때 제네릭 클래스는 잘못된 타입을 넣었을 때 컴파일 에러로 알려줍니다. 제네릭으로 선언하지 않은 클래스는 Object 타입으로 받고 있기 때문에 모든 타입으로 받을 수 있지만 사용하기 위해서 형 변환을 해줘야 하고, 잘못된 타입을 넣었을 때 런타임에서 에러가 발생하게 됩니다. static class Generic { T value..
-
Heap Dump(jmap, jhat, visualVM, MAT)JAVA 2022. 8. 13. 18:20
자바는 GC가 메모리 관리를 대신 해주지만 어떤 이유로 Heap 영역에서 메모리가 해제되지 않고 쌓여 메모리 누수가 발생할 수 있습니다. 메모리 누수가 지속되면 OOM(Out Of Memory)가 발생할 수도 있기 때문에 Heap 영역을 모니터링하고, Heap Dump를 떠서 분석하는 연습이 필요할 것입니다. 힙 덤프를 분석하는 툴은 많이 있겠지만 jmap과 jhat, visualVM으로 익혀보겠습니다. OOME 원인 java.lang.OutOfMemoryError:Java Heap Space 자바 힙 영역에 새로운 객체를 생성할 수 없을 때 발생합니다. 메모리 누수는 아니지만 힙 영역의 크기가 충분하지 않을 때도 발생합니다. java.lang.OutOfMemoryError:GC Overhead limi..
-
Thread Dump(jps, jstack, visualVM)JAVA 2022. 8. 12. 23:34
웹 애플리케이션 환경에서 많은 스레드가 한 번에 동작하면서 스레드 경합에서 발생하는 예상하지 못하는 일이 발생할 수도 있고, 병목현상이 생길 수도 있습니다. 문제가 발생하지 않도록 코드를 짜는 것도 중요하겠지만 이러한 문제가 발생했을 때 어떻게 분석하고 해결하는가 또한 중요할 것입니다. 그래서 스레드 덤프를 분석하는 방법을 미리 공부하고자 합니다. 스레드 덤프를 분석하는 툴은 여러 가지가 있겠지만 jdk에 내장되어있는 jstack과 visualVM으로 보겠습니다. jstack 먼저 jps 명령어로 자바 어플리케이션의 프로세스 id를 확인합니다. $ jps 42296 ThreadDumpTest jps로 확인한 프로세스 id로 jstack 명령어를 사용해 스레드 덤프를 볼 수 있습니다. $ jstack 42..