목록개발/Java (5)
free from
IntroBytecode를 담고 있는 .Class파일은 JVM(Java Virtual Machine)의 ClassLoader에 의해 해석되어 실행됩니다.어떤 과정을 거쳐서 우리가 작성한 클래스들이 해석되어 메모리에 로딩되는지 알아보겠습니다. ClassLoaderJVM의 ClassLoader는 Boostrap ClassLoader, Extension ClassLoader, Application ClassLoader로 구성된 3계층 구조로 이뤄져있습니다. (~JDK8) 이 3계층 구조에서 각 클래스 로더가 특정 역할에 맞는 클래스를 로딩하도록 설계되어 있습니다. BootStrap ClassLoader는 JVM의 네이티브 코드로 구현된 클래스로더입니다. BootStrap ClassLoader외 ClassLoa..
IntroFork/Join 프레임워크는 병렬 프로그래밍을 위한 도구로 JDK 7에 java.util.concurrent 패키지에 등장했습니다. 이름과 같이 분할할 수 있는 작업을 더 작은 작업으로 나누고(Fork) 처리하여 각각의 결과를 합쳐서(Join) 반환하는 프레임워크입니다. 분할된 작업들을 처리하기 위해서 내부적으로 스레드 풀을 구성하여 작업을 병렬로 처리합니다. 이를 통해 멀티코어 프로세서를 최대한 활용하여 성능을 향상시킬 수 있습니다. Executors, java.util.concurrent 패키지를 통해서 스레드를 어떻게 생성하고 관리할지에 대한 부분이 정리가 되었다면 Fork/Join 프레임워크를 통해서 스레드를 활용하여 어떻게 작업을 병렬로 처리할지에 대해서 다룹니다.Fork/Join프레..
Intro과거에는 무어의 법칙에 따라 CPU에 들어가는 트랜지스터의 수가 증가하여 CPU 속도가 향상되었습니다. 그러나 최근에는 컴퓨터에 들어가는 CPU의 코어의 개수를 늘여서 속도를 향상시키고 있습니다. 그러므로 애플리케이션도 CPU의 코어들을 활용해야 속도를 향상시킬 수 있습니다. 그럼 어떻게 Java에서는 CPU의 코어를 잘 활용할 수 있을까요? 정답은 Thread입니다. Thread를 이용하면 한 프로세스 내에서 두 가지 또는 그 이상의 일을 동시에 할 수 있습니다.JVM에서 Thread마다 PC-register, Java Stack과 Native Stack을 가지므로 Main-Thread와 별도로 실행 Context를 갖고 동작할 수 있습니다.Java에서 Thread를 생성하는 방법은 다음과 같..
IntroClassFile-1 에 이어서 클래스파일의 속성에 대해서 정리합니다.ClassFile Attribute클래스파일은 메타 정보와 속성으로 구성됩니다. 속성은 final, Exceptions, SourceFile, Generics, Code 과 같은 정보를 나타내며 클래스를 풍부하게 하는 역할입니다. 이러한 속성은 클래스를 대상으로 작성하면 class_file에 존재하며 필드 변수를 대상으로 작성하면 field_info에 존재합니다. 그리고 메서드를 대상으로 작성하면 method_info에 존재합니다.attribute_info { u2 attribute_name_index; u4 attribute_length; u1 info[attribute_length];} 모든 속성들의 기본적..
IntroJava Compiler가 .java파일을 컴파일하면 ByteCode를 담은 .class 파일이 생성됩니다..class파일은 Class Loader에 의해 해석되며 JVM 메모리에 로드되어 실행됩니다.이러한 ByteCode 덕분에 Java는 WORA(Write Once, Run Anywhere)라는 강력한 특징을 갖게되었습니다. ByteCode에는 또 다른 장점이 있습니다.JVM(자바 가상 머신)은 초기 설계부터 가상 머신에 다른 언어를 실행할 가능성을 염두에 두었습니다.그래서 자바 외 다른 언어에서 ByteCode로 변환해주는 컴파일러만 있으면 JVM에서 실행될 수 있습니다.오늘날에는 Java말고도 Scala, Kotlin, Groovy, Clojure 등 다양한 언어가 JVM에서 실행됩니다...