Java는 썬 마이크로 시스템즈가 개발한 객체지향 언어이며, 현재 썬 마이크로 시스템즈 오라클에 인수되어져 있다.
Java의 장점은 Source 코드를 중간코드(Java Bytecode)로 변환하여 JVM(Java Virtual Machine)에서 실행할수 있어 높은 호환성을 가지고 있다.
물론 다른 언어처럼 완전 Compiler 기능을 가지고 있지만 이를 이용시 JVM은 이용을 못한다.
- Java의 Platform 분류
- Java SE(Standard Edition)
- Java EE(Enterprise Edition)
- Java ME(Micro Edition)
- 이외
나의 관심은 Java SE으로만으로도 충분한 것 같어 더 자세한 내용은 JDK 에서 찾자.
아래의 Wiki에서 구글과 오라클 소송에 관한 이야기도 흥미로운것 같다.
https://namu.wiki/w/Java
https://ko.wikipedia.org/wiki/%EC%9E%90%EB%B0%94_(%ED%94%84%EB%A1%9C%EA%B7%B8%EB%9E%98%EB%B0%8D_%EC%96%B8%EC%96%B4)
1.1 Java Development Kit 의 구성
JDK를 설치하면 아래의 사항들이 전부 설치가 되며, 각 구성의 용어를 알아보자.
- JDK(Java Development Kit) : 자바의 개발 도구 이며, JRE 와 JVM을 포함하고 있다.
- JRE(Java Runtime Environment) : 자바의 실행환경이며, JVM과 관련 Library를 포함하고 있다고 한다.
- JVM(Java Virtual Machine) : Java Bytecode (*.class, *.jar)를 실행시간에 동작하는 interpreter 기능
아래의 정보에서 잘 설명해주고 있다.
- JDK = JRE + Development/debugging tools
- JRE = JVM + Java Packages Classes(like util, math, lang, awt,swing etc)+runtime libraries.
- JVM = Class loader system + runtime data area + Execution Engine.
출처
https://www.quora.com/What-is-JDK
- JDK SE 5.0 JDK 구조
- JAVA SE JDK 구조
출처
http://javacodedepot.com/java/java-jre-vs-jdk
http://www.cs.mun.ca/java-api-1.5/
https://stackoverflow.com/questions/1906445/what-is-the-difference-between-jdk-and-jre
상위의 Tools 정보를 보면 아래와 같이 볼수 있다.
- Java의 개발 Tools
- appletviewer: Run and debug applets without a web browser.
- extcheck: Utility to detect Jar conflicts.
- jar: Create and manage Java Archive (JAR) files.
- java: The launcher for Java applications.
- javac: The compiler for the Java programming language.
- javadoc: API documentation generator.
- javah: C header and stub generator. Used to write native methods.
- javap: Class file disassembler
- jdb: The Java Debugger.
JDK 1.7.0의 구조
https://programmingmitra.blogspot.com/2016/05/jdk-and-jre-file-structure.html
http://www.tech-faq.com/jdk.html
- 일반적인 JAVA 사용법
- 개발툴 java : *.java -> *.class (Java byte code)
- 개발툴 jar : *.class -> *.jar (생성)
- JVM에서 *.class/*.jar 실행
Bytecode
https://en.wikipedia.org/wiki/Bytecode
JAR(Java ARchive)
https://en.wikipedia.org/wiki/JAR_(file_format)
- Oracle JDK vs Open JDK
Oracle JDK
https://www.oracle.com/technetwork/java/javase/downloads/index.html
Open JDK
https://openjdk.java.net/projects/jdk/11/
https://openjdk.java.net/projects/jdk7/
http://openjdk.java.net/projects/jdk6/
1.2 Ubuntu 에서 JDK 의 Version 별 관리
Ubuntu에서 아래와 같이 여러 Version JDK를 설치 후 각 Tool을 Version별로 설정하여 사용이 가능하다.
$ sudo apt-get install openjdk-6-jdk $ sudo apt-get install openjdk-7-jdk $ sudo update-alternatives --list java // 설치확인 $ sudo update-alternatives --config java // Android Version에 따라 변경 대체 항목 java에 대해 (/usr/bin/java 제공) 2개 선택이 있습니다. 선택 경로 우선순ꡬ태 ------------------------------------------------------------ * 0 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 자동 모드 1 /usr/lib/jvm/java-6-openjdk-amd64/jre/bin/java 1061 수동 모드 2 /usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java 1071 수동 모드 $ sudo update-alternatives --config javac // Android Version에 따라 변경 대체 항목 javac에 대해 (/usr/bin/javac 제공) 2개 선택이 있습니다. 선택 경로 우선순ꡬ태 ------------------------------------------------------------ * 0 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 1071 자동 모드 1 /usr/lib/jvm/java-6-openjdk-amd64/bin/javac 1061 수동 모드 2 /usr/lib/jvm/java-7-openjdk-amd64/bin/javac 1071 수동 모드 $ sudo update-alternatives --config jar // Android Version에 따라 변경 대체 항목 jar에 대해 (/usr/bin/jar 제공) 3개 선택이 있습니다. 선택 경로 우선순ꡬ태 ------------------------------------------------------------ * 0 /usr/lib/jvm/java-7-openjdk-amd64/bin/jar 1071 자동 모드 1 /usr/bin/fastjar 100 수동 모드 2 /usr/lib/jvm/java-6-openjdk-amd64/bin/jar 1061 수동 모드 3 /usr/lib/jvm/java-7-openjdk-amd64/bin/jar 1071 수동 모드 $ sudo update-alternatives --config javah // Android Version에 따라 변경 대체 항목 javah에 대해 (/usr/bin/javah 제공) 2개 선택이 있습니다. 선택 경로 우선순ꡬ태 ------------------------------------------------------------ 0 /usr/lib/jvm/java-7-openjdk-amd64/bin/javah 1071 자동 모드 * 1 /usr/lib/jvm/java-6-openjdk-amd64/bin/javah 1061 수동 모드 2 /usr/lib/jvm/java-7-openjdk-amd64/bin/javah 1071 수동 모드
2. Android의 Java 와 VM(Virtual Machine)
Google에서는 라이센스 문제로 JVM을 사용하지 못하고 대신에 DVM(Dalvik Virtual Machine)을 사용한다. 흔히 Dalvik이라고 말한다.
하지만 Android의 Virtual Machine 인 Dalvik은 Android 5.0 "Lollipop" 부터 DVM 대신 ART(Android_Runtime)만 사용하고 있다고 한다.
ART(Android_Runtime)는 Dalvik 이후로 나온 Android의 Virtual Machine이며, 실행시간에 dex file을 실행할수있으나, Dalvik 에서 동작하는 일부 기술은 ART에서 동작이 되지 않는 다고 한다.
- DEX(Dalvik Executable)
- .dex ( Dalvik EXecutable )
- .odex ( Optimized Dalvik EXecutable )
Dalvik 관련자료
https://en.wikipedia.org/wiki/Dalvik_(software)
https://ko.wikipedia.org/wiki/%EB%8B%AC%EB%B9%85_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)
ART(Android_Runtime)
https://en.wikipedia.org/wiki/Android_Runtime
https://ko.wikipedia.org/wiki/%EB%8B%AC%EB%B9%85_(%EC%86%8C%ED%94%84%ED%8A%B8%EC%9B%A8%EC%96%B4)
ART(Android_Runtime)
https://en.wikipedia.org/wiki/Android_Runtime
ART and Dalvik
- Android JAVA 사용법
- 개발툴 java : *.java -> *.class (Java byte code)
- 개발툴 jar : *.class -> *.jar (생성)
- dx : *.jar/*.class -> *.dex
- VM : *.class/*.jar 실행
1.1 File CLASS 와 File DEX
안드로이드에서 dx를 통하여 File format *.class를 *.dex로 변경된 후 간단히 비교해보자. 참고로 File format Class와 OOP의 Class를 혼동하지 말자.
세부내역은 아래의 사이트에서 확인
CLASS 와 DEX 구조
https://xsolve.software/blog/differences-between-class-and-dex-files-in-java-android/
https://en.wikipedia.org/wiki/Java_class_file
DEX FORMAT
https://source.android.com/devices/tech/dalvik/dex-format
1.2 File APK의 구성
Android의 Package 구성이며, 이를 기존의 Java Archive인 JAR와 비교를 해보자.
- JAR의 구성 vs APK의 구성
1개의 Dex 크기에 제한 64K로 제한이 되어있어 만약 사이즈가 문제가 된다면 MultiDex를 지원한다고 한다.
출처
https://stackoverflow.com/questions/8210173/what-is-the-difference-between-class-and-dex-files
MultiDex지원 (64K 이상의 Dex file)
https://developer.android.com/studio/build/multidex?hl=ko
JIT
https://source.android.com/devices/tech/dalvik/jit-compiler