개요 Garbage Collector(GC)는 Heap 메모리에서 참조되지 않는 객체를 식별하여 메모리에서 삭제하는 기능이다. JVM은 GC를 수행하기 아래의 과정을 거친다. GC Steps Marking 메모리 중 어떤 부분이 사용되지 않고 있는지 체크하는 단계이다. 아래 그림 1을 참고하자. 모든 메모리를 체크해야한다면 GC에게 큰 부담이 될 수 있다. JVM은 이를 해결하기 위해 세대별로 메모리를 구분하여 GC를 따로 적용하는 아이디어를 채택하였다. 이는 뒤에서 설명하겠다. Normal Deletion 이 단계는 Marking으로 찾아낸 비참조 객체를 삭제하는 단계이다. 객체 삭제 후 메모리는 아래 그림 2와 같다. 삭제 후에 생기는 빈 공간은 Memory Allocator가 참조하고 있어서, 메모..
JVM 관련해서 까먹고 자주 찾는 것 같아 기록을 해둔다. JVM 구조에 대해 자세히 알기 위해선 위 그림 1의 구조를 알고 있어야 한다. 1. Class LoaderJava의 컴파일러가 자바의 소스코드(.java 파일)를 빌드하면 바이트코드 파일(.class 파일)이 생성된다. 각 운영체제의 JVM의 Class Loader가 이 바이트코드 파일을 Runtime Data Areas에 로딩하여 프로그램을 구동한다.Class Loader의 로딩은 런타임에 일어나는데, 클래스에 처음 접근될 때 일어난다. 이를 이용해 Lazy Loading Singleton 같은 것들을 구현하기도 한다. 참고로 Class Loading 시간엔 thread-safe하다. 2. Execution EngineClass Loader가..
프로그램에서 Log를 남기는 여러가지 방법이 있다. 가장 쉽고 많이 사용하는 방법이 콘솔에 남기는 것인데, 보기가 까다롭다. 로그를 위한 여러 라이브러리가 많지만 라이브러리를 사용하지 않아도 자바에서 제공해주는 로그 클래스가 있다. Logger 클래스는 JDK 1.7부터 제공한다. 별다른 설정없이 사용한다면, 에러나 경고가 생겼을 때 콘솔에 남는 모양새로 똑같이 로그가 콘솔에 남게 된다. 이를 제대로 사용하기 위해선 Logger에 추가로 설정을 해줘야 한다. 1. Logger 기본 기능 Logger는 계층구조로 되어있다. default로 있는 Logger는 global로 모든 다른 Logger의 부모이다. 우선, 기본으로 있는 global Logger를 사용해보자. 아래처럼 Logger.getLogger..
JDK 8부터 stream을 이용하여 데이터를 쉽게 변환, 수집할 수 있다. 반복문을 돌려서 필요한 데이터를 가져오는 것보다 훨씬 직관적이고 코드도 짧다. 람다식을 사용하여 함수지향적이고, C#의 linq와 유사한 부분이 많다. ArrayList, HashMap 같은 컬렉션 클래스들은 모두 stream() 메서드를 이용해 스트림을 생성할 수 있다. 그 외에 배열같은 경우 java.util.Stream의 Stream.of() 함수를 이용해 스트림을 생성할 수 있다. 이런 stream을 이용해 아래와 같이 필요한 데이터를 아주 간단하게 뽑아낼 수 있다. public class DTO { private int type; private String data; public int getType() { return..
웹서버와 같은 멀티스레드 환경에서 singleton을 사용하려면 항상 thread-safe 한지 고려해야 한다. 찾던 중 initialization on demand holder idiom 이라는 기법이 있어서 이곳에 적어놓는다. public class InitializationOnDemandHolderIdiom { private InitializationOnDemandHolderIdiom () {} private static class Singleton { private static final InitializationOnDemandHolderIdiom instance = new InitializationOnDemandHolderIdiom(); } public static InitializationOn..
- Total
- Today
- Yesterday
- Tasklet
- spring
- Bean
- thymeleaf cannot resolve
- spring batch
- Express
- 클로저
- chunk
- @Component
- thymeleaf 변수 인식
- @Bean
- npm
- nodejs
- Barycentric coordinates
- MySQL
- @Autowired
- Bin
- Linux
- mybatis
- Closure
- unity
- @Qualifier
- JavaScript
- Check point within polygon
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |