java

    코드 캐시(Code Cache) 사이즈 조정을 통한 JVM 최적화

    코드 캐시 사이즈와 C2 컴파일러 앞선 글 에서 JVM은 성능 최적화를 위해 자주 사용되는 코드에 대해 C2 Compiler 을 사용하여 바이트 코드를 변환한 기계어를 캐시해놓고, 다음에 같은 코드가 실행되면 캐시에서 가져오는 방식으로 실행 시킨다고 하였다. *이러한 방식으로 컴파일을 수행하는 컴파일러가 바로 JIT 컴파일러이며, 캐시 해놓은 코드를 가져오는 것은 마치 미리 컴파일 해놓은 코드를 가져오는 방식과 비슷하게 되어 실행 속도가 비약적으로 빨라진다. JVM의 JIT(Just In Time Compilation) 컴파일이란? C1, C2 컴파일러를 이용한 최적화 JVM에서 코드를 실행하는 방법 JVM은 바이트 코드(Byte Code)라 불리는 기계어 코드를 실행하는 가상 머신이다. 우리가 Java..

    [List 자료구조] 2. ArrayList

    목표 ArrayList의 특징을 이해한다. 접근, 검색, 추가, 삭제를 위한 시간 복잡도가 어떻게 도출되는지 이해한다. ArrayList ArrayList는 내부가 배열(Array)형태로 된 List이다. ArrayList는 List인데 연속된 메모리 공간을 차지하는 Array의 형태를 가지고 있다. 따라서 특정원소에 Index를 이용해 접근이 가능하다. ArrayList는 List의 성질인 가변성을 위해서 ArrayList는 과 같이 처음부터 일정량의 메모리 공간을 잡고 들어간다. 만약 같이 List에 인스턴스가 더해져 메모리 공간이 모두 찬다면 다시 해당 메모리 공간보다 더 큰 메모리 공간을 잡아 기존 객체를 복사한 다음 연산을 이어간다. 예를 들면 하나의 메모리 공간만 필요한데 향후 값이 추가될 것..

    [Kotlin Duration Class] 시간의 구간을 표현하는 클래스

    목표 Duration Class는 시간의 구간을 표현한다는 것을 이해한다. 개요 Duration Class는 두 시간 객체 사이의 지속시간(duration)을 만드는 클래스이다. 지속시간이므로, 날짜만으로는 구성이 불가능하다. 즉, Time요소가 들어간 데이터로만 Duration Class의 생성이 가능하다. 즉, 위의 초록색 상자에 들어간 클래스를 이용해서만 Duration Class를 만들 수 있다. Duration 생성 Duration은 Duration Class 내의 다양한 정적 메서드를 이용해 만들 수 있다. between 메서드 between 메서드는 두 시간 객체 사이의 차이를 이용해 duration을 만든다. val localTime1 = LocalTime.of(19, 30, 0); val..

    Kotlin, Java의 최상위 선언 차이점

    목표 Java와 Kotlin의 최상위 선언의 차이에 대해 이해한다. 최상위 선언 최상위 선언이란 파일 최상위에 선언되는 클래스, 메서드, 변수를 뜻한다. Java의 최상위 선언 Java에서는 모든 코드가 클래스 기반으로 작성된다. 이 때문에 자바의 모든 파일은 클래스에 연결되어 있는데, 이로 인해 아래와 같이 최상위 선언에는 클래스만이 들어올 수 있는 구조가 만들어진다. package apackage; public class GalaxyTab { .. } 따라서 자바에서의 최상위 선언에는 class만이 들어갈 수 있으며, 파일명과 같은 클래스만이 정의가 가능하다. 메서드를 정의하기 위해서는 class 내부에 정의를 해야 한다. 이러한 구조에서는 메서드를 정의하기 위해 클래스를 만들고 내부에 메서드를 만들..

    Kotlin의 타입 시스템과 Java의 타입 시스템의 차이 알아보기 : null을 중심으로 차이를 알아보자 : Kotlin null safety

    목표 Java의 타입 시스템에 대해 이해한다. Kotlin의 타입 시스템에 대해 이해한다. Java의 타입 시스템 Java에서는 데이터의 타입이 원시 타입과 Object Class를 상속하는 타입 두가지로 나뉜다. 원시 타입(Primitive Type) 값 그 자체가 Stack 메모리에 저장되어 접근속도가 빠르다. null을 담을 수 없다. Object Class를 상속하는 타입 Stack에는 참조값을 저장하고 실제 데이터는 Heap 메모리에 저장된다. Primitive type은 Object Class를 상속하지 않으며, 별도 타입으로 분류된다. 물론 Primitive Type의 박싱된 타입인 Boolean, Integer 등은 Object Class를 상속받는다. Primitive type 외의 모든..