본문 바로가기
반응형

JAVA9

The Java, 코드를 조작하는 다양한 방법 클래스 로더 .class 에서 바이트코드를 읽고 메모리에 저장 로딩 : 클래스를 읽어오기 링크 : 레퍼런스를 연결하는 과정 초기화 : static 값들 초기화 및 변수에 할당 메모리 메소드 영역 : 클래스 수준의 정보 (클래스 이름, 부모 클래스 이름, 메소드, 변수) 저장. 공유자원 힙 영역 : 객체를 저장. 공유자원 스택영역 : 쓰레드 마다 런타임 스택을 만들고, 그 안에 메소드 호출을 스택 프레임이라 부르는 블럭으로 쌓는다. (Exception에서 나오는 함수 스택) PC : 쓰레드 마다 쓰레드 내 현재 실행할 instruction의 위치를 가리키는 포인터 네이티브 메소드 스택 (JNI 사용시) 실행엔진 인터프리터 : 바이트 코드 한줄 씩 실행 JIT 컴파일러 : 인터프리터 효율을 높히기 위해, 반.. 2021. 9. 1.
JVM STW 시간 : minor GC < full GC 기본적인 GC 방법으로 Minor GC에서 Copy & Scavenge 알고리즘을 사용하고, Full GC에서 Mark & Compact 알고리즘을 사용하는 방법입니다. Copy & Scavenge Minor GC가 발생하면 Eden과 Survivor1의 활성 객체를 Survivor2로 복사하고, Eden과 Survivor1 영역을 비웁니다. 다음 Minor GC가 발생하면 Eden과 Survivor2의 활성 객체를 Survivor1로 복사하고, Eden과 Survivor2 영역을 비웁니다. 다음과 같은 작업을 반복적으로 수행해 오래된 객체는 Old 영역으로 옮겨지게 됩니다. Hit(GC에서 살아남은 횟수)가 Tenuring Threshold 만큼 수행된.. 2021. 6. 28.
String / StringBuffer / StringBuilder String은 Serializable, CharSequence, Comparable 인터페이스가 상속되어 있고 public final class로 되어 있다. serialize가 가능하며 문자열이고 비교가능한 값이라는 것을 알 수 있다. 또한 final class이기 때문에 String class를 상속받을 수는 없다. private final cahr value[] 이기 때문에, 불변하고 외부에서 접근할 수 없기 때문에 새로운 값을 할당할 때마다 새로 생성 -> 클래스 생성, 메모리 남용 따라서, memory에 값을 append하는 StringBuilder와 StringBuffer를 사용 큰 차이점은 StringBuilder는 변경가능한 문자열이지만 synchronization이 적용되지 않았다. St.. 2021. 6. 28.
SOLID SRP 단일 책임 원칙 같은 이유로 변하는 애들을 모아라. 다른 이유로 변하는 애들은 분리해라. 객체 지향에 대입해보면, 클래스에는 단 한 가지의 책임을 할당해야하고, 클래스를 변경하는 이유는 단 한 개여야 한다는 말이다. B를 변경하는 경우 X만 변경되고, C를 변경하는 경우 Y만 변경된다면 A의 X책임과 Y책임을 분리하자! OCP 개방 폐쇄 원칙 말은 제일 쉽다. 확장에는 열려있어야 하고, 변경에는 닫혀있어야 한다. 어떠한 기능을 변경하거나 확장하면서, 그 기능을 사용하는 기존 코드의 수정을 최소화한다는 것이다. 개방 폐쇄 원칙의 핵심은 변경이 예상되는 곳을 추상화하고 다형성을 이용하는 것이다 다운캐스팅(instance of), 비슷한 if-else 구문이 생성된다면 이 원칙이 지켜졌는지 확인해보자 .. 2021. 6. 28.
728x90
반응형