일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 이분탐색이란
- JVM
- 알고리즘
- 백준장학금
- 완전이진트리
- MSA
- AVL트리
- 강화학습
- JPA
- 힙트리
- python
- 최소힙
- 최대 힙
- 엔티티 그래프
- spring
- 점근적 표기법
- 운영체제
- 프로세스
- heapq
- 연결리스트 종류
- 스케줄링
- 멀티프로세서
- SpringSecurity
- 연결리스트
- HTTP
- 백준 장학금
- Kruskal
- posix
- jpa n+1 문제
- 자료구조
- Today
- Total
목록JAVA (7)
KKanging

java 의 enum 이란상수가 필요해!public class EnumClient { private static final int ONE = 1; public static void main(String[] args) { System.out.println(ONE); }}우리는 프로그래밍 하는 도중에 상수가 필요하다면 위에 처럼private static final 키워드를 사용해서 상수 선언을 한다.추상화 된 상수가 필요해!public class EnumClient { private static final int ONE = 1; private static final int TWO = 2; private static final int THREE = 3; public static void main(String..

리플랙션을 알기위한 사전 준비자바 프로그램은 어떻게 실행 될까?제일 처음 우리가 작성한 자바 소스 코드는 javac (jdk 포함되어 있음)에 의해 컴파일 된다.그럼 이제 JVM이 이해 할 수 있는 JAVA Byte Code (.class) 로 변환된다.그리고 이제 main 함수부터 클래스 로딩되어 Method Area 라는 메모리 영역에 올라간다.클래스 내부에 다른 클래스를 의존하면 해당 클래스는 처음에는 심볼릭 링크의 형태로 클래스를 참조한다.해당 심볼릭 링크 부분이 실행될 때 물리 주소로 변환된다.다음 클래스를 호출하면 해당 클래스가 런타임(실행 중)에 로딩되는 구조이다.우리가 작성한 코드가 변경된다고?위에는 우리가 작성한 소스코드가 실행될 때 과정을 아주 요약하였다.그런데 요약된 내용을 보면 작성..

GC이란C/C++ 같은 OS 의존도 높은 Native 언어와 Java 언어의 차이C/C++ 같이 프로그램 한 언어가 직접 OS가 실행하는 언어들은 Memory Leak 문제를 많이 겪는다. Memory Leak 란? “동적으로 할당한 메모리가 free(할당 해제)될 수 없는 상태가 된 것.” 이다. 즉, C/C++ 같은 Native 언어들은 heap을 할당하고 해제하는 해동을 오로지 개발자들의 코드로 이루어진다. 따라서 이러한 heap 메모리 관리를 잘못하여 동적으로 할당한 메모리가 더이상 free 할 수 없어서 사용하지도 않는 데이터가 메모리를 차지하여 성능 저하 및 심하면 프로그램 강제 종료가 되는 상황을 말한다. Java 언어에서는 메모리 해제한 적 없는데? 위 문제를 보고 이런 생각이 들 것이다...

JVM의 클래스 로딩 과정JVM 의 바이트 코드 실행 전체 구조자바 소스 파일을 컴파일 하여 자바 바이트 코드로 변환하면 제일 먼저 메인 메서드의 클래스가 클래스 로더에 의해 로드 된다.클래스 로더에 의해 클래스의 정보 멤버 변수, 전역 변수, 상수, 메서드,, 등등이 Method Area에 점유하게 된다.실행 엔진에 의해서 실행을 한다이때 실행을 진행하다가 클래스가 참조 되어 있는 부분을 발견하면 클래스 로더로 로드 된 클래스인지 확인한다 (로드 된 클래스라면 그냥 Method Area에 가져다 쓸 것)만약 로드 되지 않았다면 클래스 로더가 해당 클래스를 로드하고 초기화 한다.다음 모든 경우에 클래스를 로드하고 초기화 한다.생성자 호출(클래스 생성)클래스의 메서드 호출(당연)클래스의 전역 메서드 호출클..

JVM Run Time Data AreaJVM 전체 구조JVM 은 다음 구조를 따른다Javac 가 컴파일한 자바 바이트 코드(.class) 를 Class Loader가 Load 한다.→ Load 할때Run Time Data Area 에 올린다.Load 된 데이터를 기반으로 Execution Engine (실행 엔진) 은 프로그램을 실행한다.실행할때 RunTimeDataArea를 실행시에 메모리로 사용하는데 이를 RunTimeDataArea 를 사용한다.이때 GC 가 힙 메모리에 불필요한 메모리를 삭제하고 메모리 주소 관리를 하는 등에 작업을 한다. RunTime Data AreaJVM의 메모리 구조이다.JVM이 실행되면 OS로 부터 메모리를 할당 받고 JVM은 메모리를 위 구조로 나누어 용도에 맞게 사용..

JDK, JRE, JVM 의 구분JVMJVM은 Java Virtual Machine 의 약자이다. 단순하게는 컴파일러라고 생각할 수 있음 하지만 C/C++ 같은 한번 컴파일로 번역하는 것이 아닌 .class 파일로 컴파일 한 후 JVM 이 한줄한줄 읽는 인터프리터 역할을 하면서 컴파일러가 많이 사용하는 코드는 미리 번역해놓는인터프리터 + 컴파일러 역할을 한다.추가로 JVM 은 메모리 관리 ( GC ) 그리고 최근에는 User 레밸 스케줄링의 역할도 관여한다. JAVA 의 모토는 "Write Once, Run Anywhere"(한 번 작성하면 어디서나 실행 가능) 현대의 언어는 웬만해서는 OS의 종속적이지 않지만 당시 java 의 위 슬로건은 혁명이었다.java 의 슬로건을 현실화 해준 것이 JVM이다.J..

ThreadLocal이란?Thread-safe 하다와 하지 않다의 차이class Data{ int a= 1; }만약 Data 클래스가 Bean 혹은 싱글톤으로 관리되어서 멀티 쓰레드 환경에서 공유되는 객체라면 위와 같은 멤버 변수는 멀티 쓰레드 환경에서 경쟁조건이 발생하는 영역이다. 여기서 thread-safe란 멀티 스레드 환경에서 즉 여러 곳에서 동시에 함수나 변수 등에 접근 가능할 때 서로 다른 스레드들이 동시에 같은 것에 접근해서 이용해도 문제가 생기지 않는다는 것을 의미한다. = 서로 다른 곳에서 동시에 접근해 작업을 수행해도 결과에는 문제가 없다는 것을 의미한다. 위 Data 클래스의 변수 a 는 thread-safe 하지 않다.ThreadLocal 이란?위와 같이 thread-safe..