딱콩이의 봄

JAVA 공부 본문

개발/JAVA

JAVA 공부

코린이딱콩 2022. 8. 15. 18:59

자바의 특징

객체지향 프로그래밍 언어입니다.

기본 자료형을 제외한 모든 요소들이 객체로 표현되고, 객체지향 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어입니다.

 

장점

JVM(자바가상머신) 위에서 동작하기 때문에 운영체제에 독립적입니다. 

Garbage collector를 통한 자동적인 메모리 관리가 가능합니다

 

단점

JVM(자바가상머신) 위에서 동작하기 때문에 실행 속도가 상대적으로 느립니다.

다중 상속이나 타입에 엄격하고, 제약이 많습니다.


JVM

자바를 실행하기 위한 가상 기계이며, 자바의 바이트 코드를 운영체제에 맞게 해석해주는 역할을 하고, 스택 기반으로 동작하며

java byte code를 os에 맞게 해석해 주는 역할을 하고 가비지 컬렉션을 통해 자동적으로 메모리 관리를 합니다.


Primitive type(기본 자료형) 과 각 몇 byte 인가?

  • 정수형 
byte short int long
1byte 2byte 4byte 8byte
  • 실수형
float bouble
4byte 8byte
  • 문자형
char
2byte
  • 논리형
boolean
1byte

 


static(클래스변수), non-static(인스턴스 변수) 차이

 

Static멤버

  • 멤버는 클래스당 하나 생성
  • 멤버는 객체 내부가 아닌 별도의 공간인 클래스 코드가 적재되는 메모리에 생성됨
  • 클래스 로딩 시에 멤버를 생성하고 공용자원으로 사용이 가능함
  • 객체로 만들어서 사용하지 않고도 직접 접근이 가능
  • 프로그램이 종료될 때 사라짐

 

Non-static멤버

  • 객체마다 별도로 존재함
  • 객체 생성 시에 멤버가 생성됨
  • 메모리 영역에 공유되지 않기 때문에 객체를 만들어서 접근해야 함
  • 객체를 만드는 순간 해당 정보가 Heap메모리에 생성됨
  • 객체가 사라지면 멤버도 사라짐
  • 객체 내에 각각 공간을 유지

Garbage-collection(GC)

더 이상 사용하지 않는 객체 등을 메모리에서 해제(삭제) 하는 JVM 작업

https://doozi0316.tistory.com/

처음 생성된 객체는 young Generation 영역의 일부인 Eden 영역에 위치하게 됩니다. 그리고 Eden 영역이 다 차서 MinorGC가 발생하게 되면, 다른 곳에서 참조되지 않는 객체는 메모리에서 제거됩니다. Eden 영역에서 살아남은 객체는 young Generation 영역의 또 다른 일부인 Survival 영역으로 이동하게 됩니다. Survival 영역은 0 영역과 1 영역으로 구성되어 있는데, MinorGC가 발생할 때마다 0영역에서 1영역 또는 1 영역에서 0 영역으로 객체가 이동하게 되며, 이 과정에서 더 이상 참조되지 않는 객체는 메모리에서 제거됩니다.

MinorGC가 발생하는 동안 0,1 영역을 오가며 살아남은 객체들은 최종적으로 OldGeneration 영역으로 옮겨지며, OldGeneration 영역에 있다가 미사용 된다고 식별되는 객체들은 MajorGC를 통해 메모리에서 제거됩니다.

 

오래되었다는 기준은?

young Generation 영역에서 MinorGC가 발생하는 동안 얼마나 오래 살아남았는지를 판단합니다.

각 객체는 MinorGC에서 살아남은 횟수를 기록하는 age-bit를 가지고 있으며, MinorGC가 발생할 때마다 1씩 증가합니다.

age-bit값이 MaxTenuringThreshold라는 설정 값을 초과하게 되는 경우에 OldGeneration 영역에 객체가 이동하는 것입니다.

또는 age-bit가 MaxTenuringThreshold를 초과하기 전이라도 survival 영역의 메모리가 부족할 경우에는 미리 OldGeneration으로 객체가 옮겨질 수도 있습니다.

 

 

'개발 > JAVA' 카테고리의 다른 글

JAVA공부  (0) 2022.08.16
JAVA 공부  (0) 2022.08.16
JAVA공부  (0) 2022.08.16
JAVA공부  (0) 2022.08.15
JAVA 공부  (0) 2022.08.15
Comments