자바공부하기 64

JVM 메모리 모델

 

메소드 영역(Method area)

- 공유 메모리 영역이라고도 한다.

 

- 클래스의 메소드에 대한 바이트코드, 클래스의 전역변수인 클래스 병수(static)위치

 

- JVM에서 실행되고 있는 모든 스레드에 의해 공유

 

- JVM은 복수개의 스레드가 메소드를 정상적으로 사용하기 위해 동기화(synchronization)기법 제공

 

- static 필드(클래스 변수)

: 각 클래스의 static 필드가 확보

: 사용을 위해 클래스 이름으로 호출 시 메모리에 적재

 

- 바이트 코드(메서드)

: 메서드의 실행 로직에 대한 바이트코드가 메모리로 적재되는 공간

: 실행 로직이 메모리에 적재되야 cpu가 fetch할 수 있음

: 자바의 모든 로직은 메서드에만 존재

* 클래스는 ㅣㄹ드와 메서드로만 구성되어있기 때문

: 메서드에 대한 바이트코드도 static 필드와 마찬가지로 클래스를 객체 생성할 시점에 메모리에 적재(예외: main())

 

- 장점

: 기동시간의 단축

: 끝까지 사용되지 않은 클래스(필드, 메서드)가 있을 경우 메모리를 절약

 

- 메서드 영역은 프로그램이 시행되기 시작되기 시작할 때부터 끝날 때까지 계속 존재하는 것이라고 보면 된다.

 

- 다른 메모리 영역과의 차이

: 스택(Stack)과 같이 필요에 의해 임시적으로 생성되고 사라지지도 않고 힙(Heap)안의 객체와 같이 실행 시 확보되지 않고 계속해서 정적으로 존재

: 또한 스택은 스레드 별로 존재한다.

 

 

 

자바공부하기 59

 

private의 진정한 의미

 

Encapsulation

- 자료의 보호

- 내부적으로만 사용하기 위해

* "사과와 위 그리고 먹다(씹다)"

* 사과 : 외부 데이터

* 위 : private 변수

* 먹다() : public 메서드

* 그냥 집어넣으면 입 찢어지고 가슴 찢어짐

- 내부의 자료가 변경되어도 외부에 영향을 주지 않는다.

 

 

 

 

- 내부의 데이터 또는 로직이 변경되어도 외부에 영향을 주지 않는다.

 

- 액세서(accessor)

* getXXX(), setXXX()

 

- 데이터필드는 반드시 private으로 하고 엑세서를 경유하여 접근해야 한다.

단점은 번거롭고 소스가 엑세서에 묻힐 수 도 있다.

 

J2ME

:Java 2 Micro Edition

 

- J2ME 기술은 스마트 카드나 모바일과 같은 소형기기 시장을 지원하기 위한 자바플랫폼이다.

이 경우 속도나 기능 문제보다는 크키와 효율성이 중요한 요소가 된다. 즉 메모리, 파워등 소형기기들이 가지는 일반 적인 환경을 고려하여 제작하였다.

 

- J2ME의 주요특징

* 어디에서나 어느 시간, 어느 디바이스에서건 조화롭게 구축될 수 있다.

* 코드의 이식성이 뛰어나다.

* 동일한 자바 프로그래밍 언어가 효력있다.

* 안전한 네트워크 전달력이 있다.

* J2ME로 작성된 어플리케이션은 J2SE와 J2EE와 호환성 있게 작동한다.

 

- 주요 패키지

* CLDC / MIDP / CDC

* Foundation Profile / Java TV / Java Embedded Server Software

* Java Card / Personal Java / J2ME Wireless Toolkit 1.0

 

- WORA(Write Once, Run anywhere)이 깨짐

 

 

 

 

 

 

+ Recent posts