java8자바8의 새롭게 바뀐 부분이 많지만 그 중 내가 자주 쓰는걸 정리 해보겠다.@FunctionalInterface첫 번째로 @FunctionalInterface 인터페이스다. 람다를 쓰긴 위한 애노테이션이다. 만약 저 애노테이션이 붙은거라면 람다 표현식을 사용 할 수 있다. 하지만 명시적으로 지정 하지 않더라도 abstract 메소드가 한개라면 람바 표현식을 사용 할 수 있다. 만약 저 애노테이션을 사용한다면 abstract 메소드가 2개 이상 있을경우 컴파일 타임에 에러가 난다. 자바 기본 패키지에 있는 Function이라는 인터페이스다.@FunctionalInterface public interface Function { R apply(T t); //... } 한번 커스텀한 interface를..
jvm 메모리jvm에서 메모리 영역인 런타임 데이터 영역의 구조를 그림으로 그리면 다음과 같다.크게 3부분으로 나눠진다. 1. 메소드 영역(클래스 영역)필드나 메서드의 메타데이터 저장static 변수, 메소드 저장바이트 코드 저장상수 풀(Constant Pool)2. 스택 영역Last In First Out(LIFO)메서드 호출 시마다 각각의 프레임 생성메서드 안에서 사용되어지는 값들을 저장호출된 메서드의 매개변수, 지역변수, 리턴 값 및 연산 시 일어나는 값들을 임시로 저장 메서드 수행이 끝나면 프레임별로 삭제3. 힙 영역new 연산자로 생성된 객체와 배열을 저장하는 공간클래스 영역에 로드된 클래스만 생성가능GC를 통해 메모리 반환출처 : http://wonwoo.ml/index.php/post/cat..
가비지 컬렉션(이하 GC)GC 의 과정GC에 대해서 알아보기전 알아야 용어가 있다. 바로 stop-the-world이다. stop-the-world란 GC를 실행하기 위해 JVM이 어플리케이션 실행을 멈추는 것이다. stop-the-world가 발생하면 GC를 실행하는 쓰레드를 제외한 나머지 쓰레드는 모두 작업을 멈춘다. 대게의 경우 GC 튜닝이란 이 stop-the-world 시간을 줄이는 것이다.자바는 프로그램 코드에서 메모리를 명시적으로 해제하지 않는다. 가끔 명시적으로 해제하려고 해당 객체를 null로 지정하거나 System.gc() 메서드를 호출하는 개발자가 있다. null로 지정하는 것은 큰 문제가 안되지만 System.gc() 메서드를 호출하는 것은 시스템의 성능에 큰 영향을 끼치므로 자제 ..