본문 바로가기

Java & Kolin5

M1 사용기 - JVM환경에서 ARM / Rosetta 번역 알아내기 개발을 하다보면 JVM만이 아닌 다른 환경에 종속적인 코드를 작성할 때가 있습니다. (ex. TestContainers - docker 컨테이너를 실행) 이때, JVM은 정상적으로 로제타로 번역이 되어서 잘 실행되지만, 이런 코드로 실행되는 것들은 M1에 맞지 않는 경우가 있습니다. 이런 경우를 대비하여 코드단에서 ARM / M1인지 알아보는 방법을 작성해보겠습니다. * 해당 내용은 Kotlin으로 작성되었습니다. 1. System.getProperty 먼저 해볼 수 있는 것은 아키텍쳐 이름을 가져오는 것입니다. 이 정보는 시스템 클래스에 os.arch로 저장되어있습니다. 아래와 같은 코드로 확인이 가능합니다. if (System.getProperty("os.arch").toLowerCase().cont.. 2021. 10. 10.
Garbage Collection 이 글은 Oracle의 Java Garbage Collection Basic, 그리고 JAVA SE 16의 HotSpot Virtual Machine Garbage Collection Tuning Guide 을 읽고 정리한 글입니다. Garbage Collection이란? Garbage Collection은 힙 메모리를 체크하여 사용되지 않는 객체를 확인하고, 삭제하는 프로세스입니다. C나 C++같은 언어가 수동으로 malloc이나 free로 메모리를 관리해주어야 하는 것에 달리 GC가 있는 언어는 각 언어의 Virtual Machine에서 관리해줍니다. 이러한 메모리 관리는 Reference Counting, Mark-and-Sweep 등등 많은 방법으로 이루어지지만, 오늘은 Oracle Hotspot.. 2021. 4. 4.
JVM은 무엇이며 자바 코드는 어떻게 실행하는 것인가. 1. JVM JAVA와 OS사이에 중재자 역할을 해주면서 재사용성을 증가시킴 스택기반의 가상머신, 메모리관리 및 GC를 수행함 실행시 JVM은 OS에서 필요한 메모리를 할당받는다. javac(Java Compiler)가 .java파일을 .class파일(Byte Code)로 변화시킨다 Class Loader가 런타임 시점에 Class파일을 JVM으로 로딩한다 로딩된 Class파일은 Execution Engine을 통해 해석된다 해석된 코드는 Runtime Data Area로 이동하여 실행된다. 실행 간에 지속적으로 메모리 관리가 이루어진다. 2. JVM의 요소 Class Loader class 파일 / ByteCode를 메모리에 로드한다. 객체가 생성되는 과정이라고 볼 수 있다? 상속이 된다. load 요.. 2021. 3. 30.
Kotlin의 Generic - 기본문법 제네릭은 클래스 내부에서 사용할 자료형을 나중에 생성할 때 결정하도록 도와줍니다. 제네릭을 사용함으로서 자료형의 안정성이 높아지고, 형 변환의 번거로움이 줄어듭니다. 또한, 이후 컬랙션의 사용에도 큰 도움이 됩니다. 자바와 비슷하게 코틀린에서도 제네릭을 사용합니다. 사이에 매개변수를 넣는 방식으로 동일하게 사용합니다. 간단한 예시로 한번 살펴보겠습니다. class Box(arg:T){ var name = arg } fun main() { val box1:Box = Box(1) val box2:Box = Box("box") println("${box1.name} ${box2.name}") } /* Output 1 box */ 위와 같이 타입을 T로 지정해주고, 이후에 T에 원하는 자료형을 붙여서 사용할 수.. 2021. 3. 3.