자바와 절차적 / 구조적 프로그래밍

zio도미닉·2021년 10월 13일
0

2. 자바와 절차적 / 구조적 프로그래밍

자바 프로그램의 개발과 구동

  • 자바 구동 과정

    • JDK (Java Development Kit) - JVM용 소프트웨어 개발 도구
    • JRE (Java Runtime Environment) - JVM용 OS
    • JVM (Java Virtual Machine) - 가상의 컴퓨터
  • JDK가 JRE를 포함하고 JRE는 JVM을 포함하는 형태로 배포

  • T 메모리 구조 (T형태 이기 때문에)

  • JAVA에서 프로그램이 실행되는 과정

    • 조건문을 만나면 블록을 종료하는 중괄호 만나고 안에 인자는 사라짐

    • 변수들은 메모리에 어디에 있는 것일까?

      • 정답은 스태틱 영역, 스택 영역, 힙 영역 3 곳 모두에 들어갈 수 있음.
      • 스태틱 영역 변수 -> 클래스 멤버 변수 (JVM이 종료될때 까지 고정된 static 상태)
      • 스택 영역 변수 -> 지역 변수 (스택 프레임 안에서 보내다가 스택 프레임이 사라지면 사라짐)
      • 힙 영역 변수 -> 객체 멤버 변수 (힙에서 일생을 보내고, 가비지 컬렉터에 의해 사라짐)
    • Call by Value

      • 값에 의한 호출
      • 변수가 저장한 값만을 복제해서 전달
      • main() 메소드와 square() 메소드의 각 변수 k라는 이름만 같지 서로 별도의 변수 공간을 가짐
      • 두 메소드 간의 변수로는 접근 불가
        • 단 전역 변수는 가능
    • 전역 변수

      • 어느 곳에서나 접근 가능 (static)
      • 규모가 커짐에 따라 전역 변수의 파악이 어렵다 -> 최대한 피해야 한다.
      • 다만 읽기 전용으로 값을 공유해서 전역 상수로 쓰는것은 추천
        • 대표적인 것은 PI (3.14)
  • 멀티 스레드 / 멀티 프로세스의 이해

    • 멀티 스레드는 T 메모리 모델의 스택 영역을 쓰레드 개수만큼 분할해서 쓰는 것

      • 스택영역이 분할되므로 스레드 간의 스택영역을 침범 할 수는 없지만

        큰 측면에서 봤을 때 결국 자바 메모리의 스태틱영역과 힙영역은 공유

      • 멀티 프로세스 대비 메모리를 적게 사용할수 있는 구조

      • 이런 장점때문에 서블릿은 멀티 스레드로 구현되어 있음.

    • 멀티 프로세스
      • 다수의 데이터 저장 영역, 즉 다수의 T 메모리를 갖는 구조
      • 멀티 프로세스는 하나의 프로세스가 다른 프로세스의 T 메모리 영역을 절대 침범할 수 없는 메모리 안전한 구조이지만 메모리 사용량은 그만큼 크다.

  • 전역변수를 쓰지 말아야 하는 이유
    • 멀티 스레드에서 스레드는 스레드끼리 스태틱 영역과 힙 영역을 공유하기 때문에 전역 변수를 쓰면 다른 스레드에서 갑자기 쓰려던 값이 변경됨
      • 스레드 1이 전역 변수 A에 10을 할당, 스레드 2가 A에 20을 할당, 다시 스레드 1이 A의 값을 출력 하면 20으로 변경되어 시스템에 영향을 끼침
      • 막을 수 있는 방법?
        • Lock을 거는 방법이 있지만 스레드의 장점을 버린것과 같다.

REFERENCE

profile
BackEnd Developer

0개의 댓글