반응형
JVM은 운영체제 위에서 실행될 때 각각의 운영체제로부터 메모리를 할당 받고그 메모리를 용도에 따라 여러 영역으로 나누어 관리한다.여기서 메모리 공간은 크게 Method 영역, Heap 영역, Stack 영역으로 구분되고 데이터 타입에 따라 각 영역에 나눠서 할당 된다.이번 포스팅에서는 이 영역에 대해 파헤쳐볼 예정이다. 참고로 JVM 메모리 구조를 파헤치기전에 JVM이 뭔지 알면 더 좋다.JVM에 대한 내용은 아래 포스팅을 참고하자. [Java] JVM이란? 구조와 특징에 대해 알아보자.컴퓨터가 어떤 프로그램을 실행하려면, 그 프로그램이 컴퓨터의 언어 (기계어)로 작성되어야 한다. 하지만 우리는 복잡하고 해석하기 어려운 기계어를 직접 작성하기보다는 코드를 작성한다.hstory0208.tistory.co..
컴퓨터가 어떤 프로그램을 실행하려면, 그 프로그램이 컴퓨터의 언어 (기계어)로 작성되어야 한다. 하지만 우리는 복잡하고 해석하기 어려운 기계어를 직접 작성하기보다는 코드를 작성한다. 바로 우리가 작성한 코드(여기서는 Java)를 컴퓨터가 이해할 수 있는 기계어로 변환해주는 역할과 어떤 운영체제에서도 Java코드가 실행 될 수 있도록 해주는 것이 바로 JVM이다. JVM 작동 원리 JVM대해 파헤쳐보기 전에 우선 작동원리를 파악해보자. 1. 코드 작성 Java로 코드를 작성한다. 작성한 Java 코드는 .java 파일로 저장된다. 2. 컴파일 .java파일이 자바 컴파일러(javac)에 의해 .class 파일로 변환된다. 이 .class 파일은 자바 코드가 바이트코드로 변환되어 있다. 바이트 코드란 JVM..
참고로 필자는 "엘레강스 오브젝트"라는 책을 읽어본적은 없다. 하지만 코드 리뷰를 받으면서 "생성자에 코드를 넣지 마세요" 내용을 참고해보라는 피드백을 받았던 적이 있어 알아봤었다. 이 주제를 간단히 정리하면 생성자의 역할은 오직 멤버 변수의 초기화에만 집중해야 한다는 것이 핵심이다. 우선 생성자의 역할은 뭘까 ? 생성자의 기본적인 역할은 객체를 생성하고, 객체의 초기 상태를 설정하는 것이다. 그렇다면 이 책에서는 왜 생성자에 코드를 넣지 마라고 하는 걸까? 생성자에 코드를 넣었을 때 문제점 생성자에 코드를 넣지말라는 것은 그 어떤 코드도 들어가선 안된다는 의미는 아니다. public Cars(final List cars) { validate(cars); this.cars = List.copyOf(car..
운영체제 별로 개행 문자가 다 다르다고 한다. Window \r\n Unix \n Mac \r 오래전 Mac OS의 경우에는 "\r" 개행 문자를 사용했지만 현대의 Mac OS는 Unix기반으로 "\n" 개행 문자를 사용한다고 한다. 운영체제별로 다른 개행 문자가 뭐가 문제야? Git 통해 협업 시 하나의 프로젝트를 여러 사람들이 작업할 때 다양한 운영 체제에서 개발된 코드가 저장소에 저장될 것이다. 하지만 운영체제에 종속적인 개행문자가 저장소에 올라간다면 개행문자 하나 때문에 불필요한 변경사항이 발생할 수 있고 코드를 비교해 병합하는 과정을 어렵게 만들 수도 있다. 호환성 문제 위 처럼 협업하는 상황에서 병합이 정상적으로 이뤄진 소스코드를 들고와서 추가작업을 한다고 가정했을 때 이 병합된 소스코드가 W..
final 키워드가 뭔지는 알아 근데 왜 꼭 파라미터 앞에 선언을 해야하는거야? 우아한테크코스 미션을 진행하면서 코치님과 일부 크루들의 코드에서 파라미터에 final 키워드를 항상 붙여주는 것을 보았다. final 키워드는 "값의 재할당을 막는다"는 것은 안다. 하지만 왜 꼭 파라미터 앞에 final 키워드를 붙이는 것 일까? 메서드(Method)란? 메서드는 "객체에 속한 함수"이다. 그리고 함수는 "두 변수 x, y에 대해 x의 값이 변함에 따라 y의 값이 하나씩만 정해질 때, y를 x의 함수"라고 한다. 즉, y = f(x)로 표현할 수 있다. 만약 y = 1000x 라는 함수가 있다고 해보자. 입력 (x) 결과 (y) 2 2000 4 4000 x에 입력한 값에 따라 y값이 정해지게 된다. 그런데 ..
중복되는 코드 중에서 중복을 제거하기 어려운 로직을 제거하기 위해 알아보던 중 AOP 처럼 공통적인 기능을 한 곳에서 관리하고, 핵심 기능만을 분리할 수 없을까에 대해 고민해보다가 함수형 인터페이스에 대해 알게 되어 대표적인 함수형 인터페이스와 사용 방법에 대해 정리해보자 한다. 함수형 인터페이스란? 자바 8부터 도입된 개념으로, 이름 그대로 "함수"를 위한 인터페이스다. 즉, 이 인터페이스를 구현한 클래스는 하나의 함수 처럼 동작하게 된다. 이 함수처럼 동작한다는 것은 입력을 받아서 출력을 내보는데 예를 들어, Function 이라는 함수형 인터페이스는 T라는 타입을 입력 받아 R이라는 타입의 출력한다. 그렇다면 함수형 인터페이스를 구현한 클래스는 T라는 타입의 입력을 받아 R이라는 타입을 반환하게 되..