본문 바로가기

Java17

public static void main(String[] args) 의 의미 String[] args: String 객체로 정의된 args 라는 이름의 배열로 파라미터를 받겠습니다. 라는 의미 public class Main { public static void main (String args[]) { ... } } // String[] args, String args[], String... args 셋 다 사용 가능함 자바파일을 컴파일 한 뒤 실행할 때의 과정 1. javac Main.java 2. java Main : Main.class 를 실행하면서 파라미터를 전달하면 문자열 배열로 받음 엔트리포인트로서의 main() 런타임 라이브러리가 프로그램을 초기화하고 진입하는 진입점. CPU의 제어가 OS에서 프로그램으로 넘어가는 부분이다. main() - C나 Java를 비롯한 프.. 2022. 4. 26.
String constant pool를 이해하면 왜 String이 불변으로 설계됬는지 이해할 수 있다 일단 method area(또는 클래스영역)의 runtime constant pool과는 별개의 영역이다. 구분해서 이해해야 함 runtime constant pool: 클래스 내의 final 제어자가 붙어있는 모든 상수들에 대한 symbol table을 관리(레퍼런스를 저장). 클래스 영역에 저장됨 String constant pool: 리터럴로 초기화된 String 변수값을 저장함. 힙 영역 내에 있는 String constant pool에 저장됨 자바에서는 String을 어떻게 생성하느냐에 따라 리터럴값의 저장위치 차이가 생긴다. new로 생성하면 Heap 영역에 저장된다. String pool에 존재하든 다른 같은 값의 객체가 있던 별개의 주소를 가진 객체 String 리터럴로 생성하면 해당 값은.. 2022. 4. 13.
java, javac, javap, jar 명령어 간략 정리 스프링 프레임워크에서 지원하는 최소한의 자바버전은 8버전이다. 일부 메이븐 플러그인이 컴파일 버전을 고려하지 않고 만들었다. 9이상 버전을 사용한 플러그인이 있음. 그래서 문제가 생길 수 있다. → java.lang.UnsupportedClassVersionError가 발생함. 이 경우에 8 버전으로 컴파일을 해야한다. cross-compiliation 옵션들을 이용할 수 있다 # 1.8 이전 버전으로 크로스 컴파일하는 경우 javac -bootclasspath "C:\Apps\Java\jdk1.8.0_31\jre\lib\rt.jar" \ -source 1.8 -target 1.8 com/Ellery/MajorMinorApp.java # 1.9 이후부터 javac --release 8 com/Ellery.. 2022. 4. 7.
JVM 아키텍쳐 구성요소 JVM에 대한 정의는 해당 포스트를 참고해주세요. JVM이 동작하는 순서는 다음과 같다. (구성요소 - class loader, runtime data area, execute engine, JNI...) 자바 프로그램을 실행하면 JVM은 OS로부터 메모리를 할당한다. 자바 컴파일러(javac)가 자바 소스코드(.java)를 자바 바이트코드(.class)로 컴파일한다. Class Loader를 통해 JVM Runtime Data Area로 로딩한다. Runtime Data Area에 로딩 된 .class들은 Execution Engine의 인터프리터와 JIT 컴파일러를 통해 해석합니다. 해석된 바이트 코드는 Runtime Data Area의 각 영역에 배치되어 수행하며 이 과정에서 Execution En.. 2022. 4. 7.