Java&Spring/Java
-
[모던 자바 인 액션] part 1 - 1Java&Spring/Java 2023. 11. 3. 16:24
"Stream 을 이용하면 에러를 자주 일으키며 멀티코어 cpu를 이용하는 것보다 비싼 synchorized 를 사용안해도 된다" "synchronized" 키워드는 다음과 같은 비용을 수반할 수 있다. 대기 시간(Wait Time): 한 스레드가 락을 획득하기 위해 다른 스레드가 락을 해제하기를 기다려야 할 때 발생합니다. 이는 특히 공유 자원에 대한 경쟁이 치열할 때 성능 저하를 가져온다. 컨텍스트 스위칭(Context Switching) 비용: 락을 기다리는 스레드들 사이에서 발생하는 컨텍스트 스위칭은 CPU 시간을 소비한다. 메모리 일관성 비용(Memory Consistency Costs): 락을 사용하여 메모리 캐시 사이의 데이터 일관성을 유지하는 데 있어 추가적인 메모리 배리어(memory b..
-
JVM ARCHITECTURE (배경 , 특징 , 컴파일 과정 등)Java&Spring/Java 2023. 9. 15. 18:07
JVM (Java Virtual Machine) 2022 9월 28일 부터 지속적으로 글을 업데이트 중입니다. Java의 특징 : "OS 에 종속 적이지 않고 실행 가능 하다" 배경 Java 로 작성한 코드는 JVM 에 의하여 동작을 하게 됩니다. 이로 인하여 이론상 OS 및 하드웨어의 관계없이 자바 언어로 어플리케이션 개발이 가능합니다. JVM 은 많은 개발자의 C/C++ 로 개발시 복잡한 메모리의 할당 , 해제고민들로 부터 자유로워지게 만들었고 , OS 별로 고민을 해야할 많은 상황에서 자유롭게 만들었습니다. 주관적인 의견으로 개발의 난이도가 낮춰저 많은 인원이 하나의 서비스를 편하게 개발하는 단계가 시작이 되었다라고 생각합니다. * GC 로 인하여 메모리가 할당된 객체,변수를 신경쓰지 않아도 된다하..
-
Genric 이 타입 일반화인 줄 만 알면, 주니어입니다.Java&Spring/Java 2023. 9. 4. 20:32
Generic : 클라스나 메소드에서 사용할 내부 데이터 타입을 외부에서 지정하는 기법 이다. - 하나의 값이 다양한 타입을 지정 받기 위하여 사용 한다. API 의 response class 가 정해져 있지 않은 상황에서 API 의 data body 를 Generic 으로 선언 후 개발을 진행 하고 완료후 타입을 강제 할 수 가 있다. - 컴파일 타임에 타입이 정해짐으로 따로 캐스팅을 해줄 필요가 없다. [자세한 내부 동작은 글 하단에서 다룬다.] 예시의 모든 설명은 다음과 같은 상속 관계를 갖는다. 클라스 Object
-
자료구조 Stack , add vs pushJava&Spring/Java 2023. 9. 4. 18:15
자바의 스택 자료 구조는 다음과 같이 선언 사용이된다. Stack stack = new Stack(); stack.add(1); stack.push(2); stack.add(0,71); stack.add(stack.size(),71); stack.add(stack.size()-1,74); System.out.println(stack.peek()); System.out.println(stack); stack.pop(); stack.add(stack.size() + 1,100); // out of index 보통의 자료구조인 stack 을 사용하는 것은 선입 후출의 개념으로 사용이 되며 , push , pop 의, 연산을 지원하지만. Java 의 Stack 의 경우 정말 독특한점은 add() 도 같이 지원을..
-
Sort : Arrays.sort() vs Collections.sort() & 배열 다중 정렬 및 출력Java&Spring/Java 2023. 9. 4. 17:40
Arrays.sort() vs Collections.sort 두개는 사용하는 정렬이 다르다. .... ? 정답 ) Collections.sort() 는 List 객체를 object 로 변환해서 Arrays.sort() 를 실행한다. Arrays.sort() 는 primitive type 의 경우 DualQuickSort , 아닌 경우 Merge Sort 를 변형시킨 TimSort 를 사용한다. QuickSort() 의 경우는 안정성을 보장하지 않는다 . 1,4,3,3,5,3 일때 , 중복되는 숫자의 순서가 바뀔 수가 있다. - 원시 타입의 값들은 배열의 중복되는 값들의 순서가 중요하지 않는 경우이니 , 평균속도가 빠른 QuickSort 를 이용하고 - 안정성이 보장이 되어야 하는 "객체" , 중복값을 가..
-
GC 기본 개념 , 종류Java&Spring/Java 2023. 9. 4. 17:06
GC 의 동작 → Heap 영역에 존재하는 객체들에 대해 접근 가능한지 확인 한다. → GC Root 에서 부터 시작하여 참조 값을 따라가며 접근 가능한 객체들에 mark 하는 과정을 진행 → Mark 되지 않은 객체 즉 , 접근 할 수 없는 객체는 제거(Sweep) 대상이 되고 , 해당 객체들을 제거 mark sweep comapct algo Stop the world : GC 를 실행하기 위해 JVM이 애플리케이션 실행을 멈추는 것 GC Root 가 가능한 대상 1. JVM 메모리의 stack 영역에 존재한는 참조 변수 2 . Method Area static 데이터 3 . JNI 에 의해 생성되는 객체 Serial GC - Single thread - stw 가장 김 - mark sweep coma..
-
자바를 조심스럽게 열어 보았다 - Switch 문Java&Spring/Java 2023. 5. 4. 21:31
이전 블로그 포스팅에서는 자바의 스위치문이 if-else 문을 이용하는 것 보다 성능적으로 좋을 수 있다라는 이야기를 하였습니다. 이번 글에서는 자바 12 이상의 표현에서 장점 , 동일성과 동등성의 개념을 이야가하며 스위치문의 문자열 매칭 방식의 대하여 알아봅니다. 1. 람다 표현에서 문자열 생성의 장점 자바 버전 12 이상에서 사용하는 람다 표현식을 활용하면 다음과 같이 작성 할 수 있습니다. public class Application { public static void main(String[] args) { int value = 4; switch (value){ case 4 -> System.out.println(value + "this is four"); case 1 -> System.out.p..