본문 바로가기

java45

가비지 컬렉터와 메모리 할당 전략 - 1. 죽은 객체 판단 1. 그걸 왜 알아야 하는데?프로그램을 운영하다 보면, 메모리 오버플로와 누수 문제를 해결해야 하는 상황이나 더 높은 동시성 달성을 위해 GC가 방해되는 상황이 옵니다. 저는 아직 그런 경험을 직접 해본 적은 없지만, 네이버나 배민 등 많은 기술블로그에서 해당 이슈를 확인할 수 있었습니다. https://d2.naver.com/helloworld/1326256https://techblog.woowahan.com/2628/ 도움이 될수도 있는 JVM memory leak 이야기 | 우아한형제들 기술블로그도움이 될지도 모르는 JVM memory leak 얘기인데 제목을 뭐라고 하지? 안녕하세요. 배민 플랫폼실 주문중계 시스템팀 오민철입니다. 이 글은 몇 줄의 코드와 어디서 걸렸는지 모를 dependency .. 2024. 12. 22.
JVM에서 객체 들여다보기 Java는 많이 사용하지만 Java 힙에서 객체 생성부터 전 과정에 대해서는 알지 못했습니다. 그래서 전 과정에 대해 구체적으로 알아보고자 합니다. 책 JVM 밑바닥까지 파헤치기의 내용을 참고했지만, 더 쉬운 이해를 위해 제가 각색하고 내용을 추가해봤습니다. 1. 객체 생성언어 수준에서는 단순히 new 키워드를 사용하면 됩니다.가상 머신 수준에서는 어떤 과정을 거쳐 객체가 생성될까요? JVM이 new 명령에 해당하는 바이트 코드를 만난다면, 이 명령의 매개변수가 상수 풀 안의 클래스를 가리키는 심벌 참조(Symbolic Reference)인지 확인합니다. 이 과정을 구체적으로 설명해보겠습니다. 먼저 아래와 같은 코드가 있다고 가정해보겠습니다.public class Example { public st.. 2024. 12. 17.
[Java] 쓰레드_start()와 run() run()을 호출 : 클래스에 선언된 메서드를 호출하는 것 start()을 호출 : 새로운 쓰레드가 작업을 실행하는데 필요한 호출스택을 생성한 다음에 run()을 호출해서, 생성된 호출스택 에 run()이 첫번째로 올라가게 한다. 스케줄러 : 실행대기중인 쓰레드들의 우선순위를 고려하여 실행순서와 실행시간을 결정하고, 각 쓰레드들은 작성된 스케줄에 따라 자신의 순서가 되면 지정된 시간동안 작업을 수행. - 작업을 마친 쓰레드, 즉 run()의 수행이 종료된 쓰레드는 호출스택이 모두 비워지면서 이 쓰레드가 사용하던 호출스택이 사라짐. main쓰레드 - main메서드의 작업을 수행하는 것도 쓰레드이며, 이를 main쓰레드라고 한다. 실행 중인 사용자 쓰레드가 하나도 없을 때 프로그램은 종료된다. 2022. 8. 2.
[Java] 쓰레드_쓰레드의 구현과 실행 1. Thread클래스를 상속 class MYThread extends Thread { public void run() { /* 작업 내용 */ } // Thread클래스의 run()을 오버라이딩 } 2. Runnable인터페이스를 구현 (객체지향적인 방법) class MyThread implements Runnable { public void run() { /* 작업내용 */ } // Runnable인터페이스의 run()을 구현 } Runnable인터페이스는 오로지 run()만 정의되어 있는 간단한 인터페이스이다. Runnable인터페이스 구현하기 위해서 할 일은 추상메서드인 run()의 몸통{}을 만들어 주는 것 뿐. public interface Runnable { public abstract vo.. 2022. 8. 2.