GeeksforGeek 사이트의 Java Memory Management란 글을 번역했습니다. 일부 내용을 의역했기 때문에 어색하거나 틀린 내용이 있으면 댓글에 남겨주시거나 위 링크에 접속해서 확인하세요. 번역 과정에서 일부 제가 강조하고 싶은 단어(몰랐던 단어)는 괄호로 표시 합니다. 번역이 힘들었던 부분은 아래에 원문을 별도로 기재합니다. JVM 메모리 구조: JVM을 프로그램이 실행되는 동안 사용되는 다양한 런타임 데이터 영역을 정의합니다. 몇몇 영역은 JVM에 의해 생성되는 반면 몇몇은 프로그램에서 사용되어지는 쓰레드에 의해 생성됩니다. 그러나 JVM에의해 생성된 메모리영역은 JVM이 종료될 때만 회수됩니다. 쓰레드의 데이터영역은 인스턴트화(instantiation)되는 동안 생성되고 쓰레드가 종..
클래스 내 특정 객체에 고정적으로 객체를 할당하는 것이 아닌 동적으로 필요에 따라 해야 할 때 유용하다. 인스턴스를 생성할 때 생성자에 필요한 자원을 넘겨주는 방식이다. 또한 불변을 보장하여 여러 클라이언트가 의존 객체들을 안심하고 공유할 수 있기도 하다. 의존 객체 주립이 유연성과 테스트 용이성을 개선해주기는 하지만, 의존성이 수 천개나 되는 큰 프로젝트에서는 코드를 어지럽게 만들기도 한다.
정적 메서드나 정적 필드만을 담은 클래스를 만들고 싶을 때 유용한 아이템이다. 대표적으로 java.lang.Math, java.util.Arrays, java.util.Collections, final 클래스와 메서드를 모아놓은 클래스 등이 있다. 인스턴스화를 막으려면 private 생성자를 추가하면 된다. 이 방법은 상속도 막을 수 있다. 하지만 직관성이 다소 낮으므로 적절한 주석을 달아주는 것이 중요하다.
싱글턴(singleton)이란 인ㅅ흐턴스를 오직 하나만 생성할 수 있는 클래스를 말한다. 전형적인 예로 함수(아이템 24)와 같은 무상태(stateless) 객체나 설계상 유일해야 하는 시스템 컴포넌트를 들 수가 있다. 그런데 클래스를 싱글턴으로 만들면 이를 사용하는 클라이언트를 테스트 하기 어려울 수 있다. 싱글턴을 만드는 방식은 보통 둘 중 하나다. 두 방식 모두 생성자는 private으로 감춰두고 유일한 인스턴스에 접근할 수 있는 수단으로 public static 멤버를 하나 마련해둔다. 아래 코드를 보자. public class Elvis { public static final Elvis INSTANCE = new Elvis(); private Elvis() {...}; public void le..
정적 팩토리 메서드와 생성자에 똑같은 제약이 하나 있다. 그것은 바로 매개변수가 많을 때 적절히 대응하기 어렵다는 점이다. 만약에, 식품 포장의 영양정보를 표현하는 클래스를 생각해보자. 영양정보는 1회 내용량, 총 n회 제공량, 1회 제공량당 칼로리 같은 필수 항목 몇 개와 총지방, 탄수화물, 나트륨 등 수많은 선택 항목으로 이뤄진다. 이때 대다수 값이 0 이다. 그래서, 값이 있는 항목에 한해 객체 생성시 넣을 수 있도록 생성자를 생성하려하면 파라미터가 끝도 없이 길어질 수 있고, 또한 파라미터에 넣는 값의 순서가 바뀌어도 오류가 나지 않아 어플리케이션이 비정상 적으로 작동될 수 있다. 더 큰 문제는 비정상 작동은 큰 문제가 된 이후에 발견 될 것이다. 결론적으로 생성자의 매개 변수 조합이 다양하고 매..
Outline 클라이언트(API 사용자)가 클래스의 인스턴스를 얻는 정통적인 수단은 Public 생성자다. 그 밖에도 클래스는 생성자와 별도로 정적 팩터리 메서드(static factory method)를 제공할 수 있다. - Pros and Cons, 장점 & 단점 Pros 1. 이름을 가질수 있다. 매개변수와 생성자 자체만으로는 반환될 객체의 특성을 제대로 설명하지 못한다. 반면 정적 팩터리는 이름만 잘 지으면 반환될 객체의 특성을 쉽게 묘사할 수 있다. ex 1. 생성자 & 정적 팩토리 메서드 비교 // 생성자 BigInteger(int, int, Random); // 정적 팩토리 메서드 // 참고: prime number: n.소수 BigInteger.probablePrime();전자 보다는 후자..
Outline TCP/IP는 L4인 TCP와 L3인 IP를 함께 묶어서 지칭하는 단어이다. 오랜 시간 신뢰성 있는 통신에서 많이 쓰여왔다. 지금부터 TCP/IP가 명확히 어떤 기능을 하고 어떤 원리로 신뢰성있게 데이터를 전달하는지 알아보자. - Job TCP 응용 계층으로부터 요청 받은 데이터를 도착지 주소(IP, PORT)로 온전히 도착하게끔 관리. 외부로 부터 전달 받은 데이터의 도착지 주소(IP, Port)를 확인하여 적절한 프로세스에게 전달. 주요 서비스 포트 번호를 이용해서 데이터 전송 연결 생성 데이터 보증과 재 전송 제어 흐름 제어와 폭주 제어 IP TCP로 부터 요청 받은 데이터를 라우팅을 통해 착지 주소를 보고 전달하는 프로토콜. - TCP Concept TCP Processing Flo..
PCI Intel Corporation이 개발한 PCI(Peripheral Component Interconnect standard)는 거의 모든 데스크탑 컴퓨터에서 찾을 수 있는 업계 표준의 고속 버스다. 컴퓨터 구조에서 고속 버스는 컴퓨터 내부 구성요소(CPU, Memory 등)간 데이터 통신을 가능 하게 해주는 역할을 한다. PCI 슬롯을 통해 다음과 같은 다양한 확장 카드를 쉽게 설치할 수 있다. 그래픽/비디오 카드 사운드 카드 네트워크 카드 SCSI(Small Computer System Interface) 카드 기타 다양한 유형의 카드 더욱이 PCI는 컴퓨터 시스템의 다른 PCI 카드와 정상적으로 작동하도록 카드를 자동으로 구성합니다. PCI 카드는 현재 32비트와 64비트 버전 및 33MHz..
Outline 인프라를 공부하던 중 서버 구성요소로써 PCI, 버스 등의 용어를 알게되었다. 명확한 용어 이해를 위해 다음과 같이 정리한다. - Definition CPU가 처리한 데이터들은 그 목적에 따라 디스크에 영구 기록 되거나, 메모리에 리턴되거나, 모니터에 출력된다. 이러한 행위가 이루어지기 위해서는 CPU가 처리한 데이터를 컴퓨터 내부에 각 구성요소들로 배송되어야 하는데 그 역할을 하는 보조 시스템이 버스다. - 한 마디로, 컴퓨터 내부 구성요소간 데이터 통신 역할을 할 수 있게 해주는 것이다. - Kind 주요 버스 2개만 소개한다. System Bus CPU와 메모리를 연결하는 Subsystem을 System Bus라고 명명한다. I/O Bus 메모리와 다른 입출력 장치와 통신을 하는 Su..
Outline 이번 글에서는 서비스를 외부 클라이언트(사용자) 들에게 노출 시키는 다양한 방법에 대하여 다뤄보도록 하겠다. - Definition 서비스를 외부 클라이언트에게 노출 시키는 방법은 총 세가지 다. 서비스의 타입을 NodePort 로 세팅한다. 서비스의 타입을 Load Balancer로 세팅한다. Ingress Controller란 오브젝트를 생성해 하나의 아이피로 여러 서비스를 노출 시킨다. - 위 세가지 방법을 하나씩 알아보도록 하겠다. - NodePort Service 개별 클러스터 노드의 특정 포트를 열어서 해당 포트를 통해 트래픽을 전달받는 것을 말한다. 노드 포트 타입의 서비스를 생성하면 쿠버네티스는노드 전체에 해당 포트를 예약한다. 예를들어, 노드 포트 서비스가 포트로 30000..
- Total
- Today
- Yesterday
- JMM
- POD
- JVM
- Java
- kubernetes
- Java Memory Structure
- k8s
- Replication Controller
- 자바 메모리 구조
- Delete
- Effective Java
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |