일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- 백준
- list
- Stream
- 쿠버네티스
- Real MySQL
- 스트림
- SpringBoot
- redis
- OS
- 자바
- Collection
- thread
- Kotlin
- MSA
- GC
- 이스티오
- jvm
- IntellJ
- K8s
- 자바 ORM 표준 JPA 프로그래밍
- gradle
- Stack
- JPA
- spring
- Java
- 토비의 스프링
- 토비의 스프링 정리
- 보조스트림
- 스프링
- mysql
- Today
- Total
목록GC (5)
인생을 코딩하다.
상수 풀(String Pool)은 GC가 될까요? JVM 내부구조를 다시 보던 중에, 문득 "상수 풀은 GC가 될까?" 라는 생각이 떠올랐습니다. 자바에서 보통 static은 GC가 되지 않는데, 상수풀도 GC가 안되려나? 자바에서 보통 string 객체의 사용량이 가장 큰데 상수풀이 GC가 되지 않는다면 메모리에 큰 이슈가 발생하지 않을까? 큰 이슈가 발생할 수도 있으니, JVM에서 상수풀이 GC가 되도록 최적화하는 옵션을 설정해두지 않았을까? 하는 생각들을 했었습니다. https://www.baeldung.com/java-string-pool에서 답을 얻을 수 있었습니다. Before Java 7, the JVM placed the Java String Pool in the PermGen space,..
JVM 역할이 뭘까?? 자바 애플리케이션 클래스 로더를 통해 읽어 들여 자바 API와 함께 실행 JAVA와 OS사이에서 중개자 역할을 수행하여 JAVA가 OS에 구애받지 않고 재사용을 가능하게 해줌 메모리관리, Garbage collection을 수행한다. 스택 기반으로 동작한다. 즉, 운영체제 위에서 동작하는 프로세스로 자바 코드를 컴파일해서 바이트 코드를 해당 운영체제가 이해할 수 있는 기계어로 바꿔 실행시켜주는 역할을 한다. // 바이트코드) 자바 가상머신이 이해할 수 있는 언어로 변환된 자바 소스 코드 왜 JVM을 알아야 하는가? 메모리 효율성을 위해 메모리 구조를 알아야 하기 때문이다. 동일한 기능의 프로그램이더라고 메모리 관리에 따라 성능이 좌우된다. 우리는 한정된 메모리를 효율적으로 사용하여..
public class ReferencePass { public static void main(String[] args) { ReferencePass reference = new ReferencePass(); reference.callPassByValue(); } public void callPassByValue() { int a = 10; String b = "hyungil"; System.out.println("before passByValue"); System.out.println("a=" + a); System.out.println("b=" + b); passByValue(a, b); System.out.println("after passByValue"); System.out.println("a=..
객체를 가비지컬렉션의 대상으로 만드는 법 1. 메소드 내부에서 생성된 객체 메소드가 호출된 후 내부에 일부 객체가 만들어지고 메소드가 종료됬을 때, 메소드 내부의 객체들은 익명이 되어 가비지 컬렉션의 대상이 됩니다. 2. 참조 변수 재 지정 한 객체의 참조가 다른 객체를 참조할 경우. 이전 객체는 더 이상 참조를 갖지 못해 가비지 컬렉션의 대상이 됩니다. 2. 참조변수 무효화 객체의 참조 변수가 null로 변경된 경우 2. 이름이 없는 객체 이름이 없는 객체의 참조, 어느곳에도 저장되지 않기 떄문에.
GC에 관해 공부한 걸...기록하기! 자바에서는 JVM이 구성되어진 JRE가 제공되며 JVM에 구성되어 있는 가비지컬렉션이 자동으로 사용하지 않는 객체를 파괴시켜 준다. 보통 파괴하는 과정은 힙(heap)내의 객체 중 Garbage를 찾아낸 후 Garbage 객체를 반환하여 메모리를 회수한다. 또 다르게 말하자면, 마킹작업 (사용중인 메모리와 사용 하지 않는 메모리를 식별) 일반 삭제 (참조되지 않는 객체를 제거하고 빈 공간에 대한 포인터를 남겨둠 ) + 압축삭제 (삭제 된 객체와 객체 외 나머지 객체를 메모리 공간으로 효율적으로 사용하며 삭제) 그리고 JVM에 가비지 컬렉션은 객체를을 세대로 나누어 처리한다. 젊은 세대 - 새로운 객체들을 할당, 가득차면 가비지 컬렉션을 매우 빠른속도로 진행, 가벼운 ..