Java

개발/Java

GC (Garbage Collection)

오늘은 GC에 대해 공부를 진행해보겠습니다. Stop The World stop-the-world는 GC를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 스레드를 제외한 나머지 스레드는 모두 작업을 멈춘다. GC 작업을 완료하 이후에야 중단했던 작업을 다시 시작한다. 어떤 GC 알고리즘을 사용하더라도 stop-the-world는 발생한다. 대개의 GC 튜닝은 stop-the-world 시간을 줄이는 것이다. GC 자바에서는 개발자가 프로그램 코드로 메모리를 명시적으로 해제하지 않기 때문에 Garbage Collector가 더 이상 필요 없는 객체를 찾아 지우는 작업을 한다. 필요 없는 객체란 유효한 참조가 없어진 객체다. 즉 JNI 스택에..

개발/Java

자바 메모리 누수

c언어는 free() 함수를 사용해 메모리를 해제한다. 자바는 GC가 더 이상 사용하지 않는 힙 영역의 인스턴스 메모리를 알아서 해제해준다. 그렇다면 GC가 메모리를 해제해주므로 자바에서 메모리 누수는 아예 발생하지 않을까?? 결론부터 말하면 자바에서도 메모리 누수는 발생할 수 있다. 객체가 실제로 사용되지 않으면서 의도치 않게 참조를 가지고 있다면, 이는 메모리 누수의 원인이 된다. 자바에서 메모리 누수는 프로그래머의 실수로 발생하는 것이다. 자바 메모리 누수와 관련해서 자주 발생하는 패턴을 살펴보기 전에 먼저 GC 대상에 대한 기초를 잡자. GC 대상 GC는 힙 내의 객체 중에서 가비지를 찾아내고, 찾아낸 가비지를 처리해서 힙의 메모리를 회수한다. 그럼 어떤 객체가 가비지일까?? Java GC는 객체..

개발/Spring Core

Executor와 TaskExecutor 이모저모

Java Executor Executor public interface Executor { void execute(Runnable command); } 제출된 Runnable 작업을 실행하는 객체이다. 태스크 제출과 각 태스크가 어떻게 실행될 것인지의 메커니즘을 분리하는 방법을 제공하며, 이는 스레드 사용, 스케줄링 등의 세부 사항을 포함한다. Executor는 일반적으로 명시적으로 스레드를 생성하는 대신 사용된다. 보통 스레드 풀을 사용하는 구현체가 많다. Executor 인터페이스는 실행이 반드시 비동기라는 것을 요구하지 않는다. Executor는 제출된 태스크를 즉시 호출자 스레드에서 실행할 수도 있다. Execuotr에서는 보통 태스크는 호출자의 스레드가 아닌 다른 스레드에서 실행된다. 많은 Ex..

개발/Java

자바는 Call By Reference가 없다?

오늘은 스터디를 진행하면서 커뮤니티에서 본 자바의 Call By Reference에 대해 정리하려고 한다. 먼저 기본적인 Call by value와 Call by reference에 대해 짚고 넘어가자. Call by value 함수를 호출 할 때 단순히 값을 전달하는 형태의 함수 호출을 의미한다. Call by reference 메모리의 접근에 사용되는 주소 값을 전달하는 함수 호출을 의미한다. 자바는 Call By Reference가 없다? Java에서 primitive type 변수는 실제 값을 저장하는 반면 다른 모든 타입 변수는 참조하는 객체의 주소를 가리키는 참조 변수를 저장한다. 객체의 주소를 가리키는 참조 변수가 스택 메모리에 저장된다. 참조하는 객체는 힙 메모리에 저장된다. 총 2번의 과..

Debin
'Java' 태그의 글 목록 (2 Page)