JVM 4

Java 메모리 구조 및 GC 알고리즘 정리

자바 메모리 구조는 1.8 이후로 일부분 바뀌었다. 이 부분에 대한 정리를 다시 하고 싶었고 GC 알고리즘에 대한 종류와 상세 내용을 정리하고 싶었다. 그럼 이 두 가지 사항에 대해 가볍게 정리해보자. Java 메모리 구조 Method Area 프로그램이 실행되는 도중에 아직 사용되지 않은 클래스들의 코드는 new를 통해 클래스의 인스턴스가 생성되면 JVM Method Area에 인스턴스 변수, 메스드 코드, 클래스 변수등을 저장한다. 해당영역은 모든 쓰레드 사이에서 공유되고 static 키워드로 생성된 변수 또한 저장을 Runtime Constant Pool 영역에 저장한다. 실 데이터를 저장하는 것이 아니라 레퍼런스만 저장하며 실제 데이터는 Heap 영역에 저장한다. JVM Language stack..

JAVA/고급 자바 2019.09.23

엘라스틱 서치 (elasticsearch) fielddata

엘라스틱 서치에서 aggregations를 사용하여 text 필드를 그룹화 하려고 했다. 하지만 이런 오류와 함께 사용이 되질 않았다.12Fielddata is disabled on text fields by default. Set fielddata=true on [your_field_name] in order to load fielddata in memory by uninverting the inverted index. Note that this can however use significant memory.cs 그래서 엘라스틱 서치 문서를 살펴보던 중 text 필드에 fielddata에 대해 알게 되었다. 대 부분의 필드 들은 기본적으로 자신의 필드가 검색가능하도록 인덱스 처리가 된다. 그러기 위해서..

규칙 55 - 신중하게 최적화하라

모든 프로그래머가 알아둬야 하는 최적화에 관련된 격언이 있다. 1. 맹목적인 어리석음을 비롯한 다른 어떤 이유보다도, 효율성이라는 이름으로 저질러지는 죄악이 더 많다. 2. 97%는 효율성을 잊어버려라. 섣부른 최적화는 모든 악의 근원이다. 그리고 프로그램을 작성하면서 기준을 삼아야 할 내용에 대해 소개한다. [기준] 빠른 프로그램을 만들려고 처음부터 노력하지말고, 좋은 프로그램을 만들려 노력하라. -> 좋은 구조를 가진 프로그램은 빠른게 변경하는데 어렵지 않다. -> 정보은닉의 원칙을 지키는 것이 좋은 구조를 갖는것에 첫 번째 항목이다. 설계를 할 떄는 성능을 제약할 가능성이 있는 결정들을 피하라. -> 특히 통신 API, 프로토콜 정의서는 변경하기 어렵기 때문에, 신중하게 코딩해야한다. API를 설계..

JAVA/Effective Java 2018.05.29

java 메모리 누수 주된 원인

자바 메모리 누수 측정 방법자바 프로그램의 실제 메로리 사용량은 시스템의 작업관리자에서 나오는 메모리 사용량으로는 측정 할 수없기에 디버그 출력으로 totalMemory() - freeMemory()를 출력하거나, 개발 도구를 사용하여 측정하는 것이좋다. GC 알고리즘메모리가 GC로 부터 해소가 되지 않는 루트 참조 객체(직간접적으로 참조가 되는 모드 객체)는 크게 3가지경우이다.Static 변수에 의한 객체 참조모든 현재 자바 스레드 스택내의 지역 변수, 매개 변수에 의한 객체 참조JNI 프로그램에 의해 동적으로 만들어지고 제거되는 JNI global 객체 참조이러한 경우에 사용할 수 있는 객체로 분류되어 GC에서 가져가지 않아 메모리가 누수될 수 있다. 자바 메모리영역은 3가지로 구성되어 있다.Hea..

JAVA/JAVA 관련 2018.05.28