자바는 Call by reference ? Call by value ?
·
JAVA/JAVA (JVM)
자바의 Call by Value / Call by Reference 프로그래밍을 하다보면 반드시 마주치는 것이 바로 call by value / call by reference 개념이다. 함수의 매개변수에서 값을 복사하느냐 주소값을 참조하느냐에 따라 반환 결과가 달라지기 때문에 대부분의 프로그래밍 교육과정에선 중요시 하게 여긴다. (필자도 학부 시절에 C언어 쪽에서 접했던 기억이 있다.) 자바에서도 역시 call by value 와 call by reference 동작 차이가 존재한다. 자바의 데이터형을 알아보면 크게 두가지로 나뉘게 된다. 기본형(primitive type) - Boolean Type(boolean), Numeric Type(short, int, long, float, double, c..
자바 코드의 메모리 영역(스택 & 힙)
·
JAVA/JAVA (JVM)
자바의 메모리 영역 자바 프로그램이 실행되면 JVM(자바 가상 머신)은 OS로부터 메모리를 할당받고, 그 메모리를 용도에 따라서 여러 영역으로 나누어 관리 한다. JVM의 메모리 공간(Runtime Data Area)은 크게 Method(Static) 영역, Stack 영역, Heap 영역으로 구분되고 데이터 타입(자료형)에 따라 각 영역에 나눠서 할당 된다. 컴퓨터의 메모리는 사용할 수 있는 공간이 한정되어 있기 때문에 어떻게 관리하느냐에 따라서 프로그램의 성능(속도 등)이 좌우된다. 그래서 메모리 설계가 잘되어 있는 프로그램에 비해 그렇지 않은 프로그램은 속도 저하 현상이나 튕김 등의 현상이 일어날 확률이 크다. 결과적으로 같은 기능의 프로그램이라 하여도 메모리의 관리에 따라 성능 차이가 나게 되는 ..
[JVM] 자바와 T 메모리 구조 2편
·
JAVA/JAVA (JVM)
[JVM] 자바와 T 메모리 구조 1편에서는 main(), 변수, block, static 변수, 멀티 프로세스, 멀티 쓰레드, 스프링에서의 T 메모리에 대해 살펴보았다. 본 포스팅에서는 추상화, 상속, 다형성 코드에 대해서 T 메모리에 어떻게 저장되는지 살펴보자. 추상화와 T 메모리 [Mouse.java] public class Mouse { public String name; public void sing() { } } [MouseDriver.java] public class MouseDriver { public static void main(String [] args){ Mouse mickey = new Mouse(); mickey.name = "미키"; mickey = null; } } Mouse..
[JVM] 자바와 T 메모리 구조 1편
·
JAVA/JAVA (JVM)
자바의 T메모리 구조 자바의 RunTime Data Area영역은 스태틱, 스택, 힙 3가지 영역으로 분리하여 간략하게 T 메모리 구조라고 지칭한다. 사실은 조금 더 복잡하지만 변수의 저장 방식에 대해서 설명하기 위해 간략하게 표현한 것이다. 스태틱(Static) 영역 (클래스의 놀이터) Method Area, Class Area, Code Area라고도 불리며 JVM이 동작해서 클래스가 로딩될 때 생성된다. 스태틱 영역에는 클래스 멤버 변수의 이름, 데이터 타입, 접근 제어자 정보와 같은 각종 필드 정보들과 메서드 정보, 데이터 Type 정보, Constant Pool, static변수, final class 등 클래스와 인터페이스의 구조가 저장되는 공간이다. 해당 메소드와 변수를 선언된 범위 내에서는..
실수 표현(부동 소수점) 방식
·
JAVA/JAVA (JVM)
실수의 2진수 표현 10진수의 정수를 2진수의 정수로 변환할 수 있듯이, 10진수의 소수를 2진수의 소수로 변환할 수 있다. 예를들어 10진수 11.765625 를 2진수 소수로 변환하는 방법은 다음과 같다. 먼저 숫자를 정수부 11 와 소수부 0.765625 로 나누어주고, 각각 2진수로 변환해주면 된다. 정수부 2진수 변환 정수부에 2를 지속적으로 나눈다. 몫은 계속 2로 나누어주고, 나머지값은 따로 모아준다. 더이상 나눌수 없을때 나머지 값을 모아 연결해주면 1011(2)로 간단히 변환이 된다. 실수부 2진수 변환 절대값이 1보다 작은 10진수 소수에 2를 곱한다. 2를 곱한 결과는 1을 넘거나 넘지 않을 것이다. 만약 1을 넘었을 경우 결과에서 1을 떼어내고, 아니면 0으로 처리하며 다음 계산을 ..
[JVM] 성능 테스트를 위한 JVM Warm-up 하기
·
JAVA/JAVA (JVM)
Java 컴파일 1. 컴파일 과정 JVM 실행 전 1) 소스 코드(.java)를 바이트 코드(.class)로 변환 (Java compiler) JVM 실행 후 2) 해당 클래스를 사용하는 시점에 클래스 로더가 lazy loading 3) 로딩 된 클래스를 OS가 이해할 수 있는 기계어로 변환 (인터프리터) 여기서 알 수 있는 사실은 Java는 C 언어 처럼 미리 기계어로 변환해두지 않고, 자바 컴파일러로는 바이트 코드로 변환 후 실제 클래스가 사용되는 시점에 인터프리터가 기계어로 변환한다는 것이다. 클래스 로더에 대한 자세한 설명은 다음 포스팅을 참고 [JVM] JVM 클래스 로더 (Class Loader) Class Loader 자바는 동적으로 클래스를 읽어오므로, 프로그램이 실행 중인 런타임에서야 모..