메모리 구조4 Java의 메모리 구조_메소드의 매개변수 [3/3] 이전 글에서 8가지 원시타입의 변수를 제외한 모든 변수는 참조 변수라고 했습니다. 이 구조를 이해하면 메소드 사용 시 실수를 피할 수 있습니다. C언어를 해보신 분들은 C언어의 함수와 포인터와 동일한 원리라고 이해하시면 됩니다. 아래 코드를 보시고 결과를 한 번 예측해보세요. package study.first; /* Public class */ public class Main { public static void main(String[] args) { String arr = "Hello"; print(arr); System.out.println(arr); } static void print(String text) { text += " world"; } } 정답은 "Hello"만 출력됩니다. C언어의 포.. ▸JAVA/기본 상식 2019. 12. 9. Java의 메모리 구조_자바가 상대적으로 느린 이유[2/3] C언어에 비해 Java가 느린 이유는 크게 2가지를 들 수 있을 것 같습니다. 첫 번째는 객체지향언어라는 특성 때문이고, 두 번째는 JVM이라는 가상 머신을 사용하기 때문입니다. 둘 다 개발자의 편의성을 위해 성능을 희생하고 있는데, 사실 하드웨어도 빨라지고 Java 자체의 소프트웨어도 워낙 발달해서 초기에 이슈가 됐던 성능 이슈가 잠잠해졌습니다. 하지만 여전히 하드웨어 스펙을 짱짱하게 넣지 못하는 소규모 장비 등에서는 C언어를 주로 사용한다고 합니다. [ 객체지향언어의 특성으로 인한 느림 ] Java에서는 클래스 단위로 모든 코드를 작성합니다. C언어와 같이 함수 단위가 아닙니다. 따라서 다른 클래스에 있는 일부 메소드나 정보를 사용하기 위해서는 전체 클래스를 인스턴스로 만들어 메모리에 저장해야 합니다.. ▸JAVA/기본 상식 2019. 12. 9. C언어의 메모리_스택 메모리 [2/2] C언어로 만든 프로그램은 함수 호출로 시작해서 함수 호출로 끝난다고 해도 무방합니다. 다른 언어도 근본적으로는 모두 똑같습니다. 함수를 효율적으로 처리하기 위해 사용되는 메모리가 바로 스택 메모리입니다. [ 스택 메모리 ] 앞서 말한 네 가지 영역 중 스택 세그먼트(Stack Segment) 전체를 의미 함수 실행을 위해 동적 할당 되는 메모리 공간 후입선출(LIFO - Last Input First Out) 방식으로 작동 [ 스택 프레임 (Stack Frame)] 스택 영역(Stack Segment) 내에서 하나의 함수 실행을 위해 할당받는 메모리 덩어리 후입선출이란, 이 스택 프레임이 순서대로 쌓이고 마지막 스택 프레임이 먼저 빠지는 것을 의미 [ C언어의 함수란? ] 프로그램 안에서 자주 쓰이는 .. ▸C언어/기본 상식 2019. 12. 5. C언어의 메모리_기본 구조 [1/2] C언어의 메모리 구조를 살펴보겠습니다. 디테일하지 않게 추상화하여 정리했습니다. 먼저 C언어에서 사용하는 메모리의 구조 입니다. 사실 다른 언어들도 같은 구조를 사용하지만 사용하는 방법이나 각 segment를 사용하는 용도가 조금씩 다릅니다. 1. 코드 영역 (Code Segment) 먼저 프로그램이 실행되면 프로그램의 실행 명령어인 바이너리 코드가 코드 영역에 저장됩니다. 코드 자체에 포함된 문자열이나 상수 또한 프로그램 실행 시 절대 변경되면 안되기 때문에 코드 영역에 저장됩니다. 텍스트 영역( (Text Segment)이라고도 함 컴파일되어 바이너리 코드(기계어) 형태로 저장된 영역 코드에 직접적으로 적혀있는 문자열(String)과 상수 또한 코드 영역에 저장됨 프로그램 실행 시 절대 변경되면 .. ▸C언어/기본 상식 2019. 12. 5. 이전 1 다음 💲 추천 글 반응형