일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- java
- 서버
- socket
- 클래스
- mavenCentral
- 카카오코딩테스트
- jcenter
- 멀티쓰레드
- JPA Auditing
- 백준
- Oracle
- springboot
- 클라이언트
- 상속
- Swing
- springDataJPA
- 컬렉션프레임워크
- HTML모드
- 자바
- 사용자관리프로그램
- SwingCalendar
- 깃허브
- 템플릿엔진
- 바인드변수
- 메소드
- JavaScript
- 코딩
- 생성자
- 인스턴스
- Spring
- Today
- Total
프리 정보 컨텐츠
자바의 정의와 특징 본문
JAVA 정의와 특징
java는 네트워크상에서 쓸 수 있도록 미국의 선 마이크로 시스템즈가 개발한 객체 지향 프로그래밍 언어
A. 자바가상머신(JVM)만 설치하면 컴퓨터의 운영체제에 상관없이 작동(독립적)
B. 기본 자료형을 제외한 모든 요소들이 객체로 표현
C. 객체 지향 개념의 특징인 캡슐화, 상속, 다형성이 잘 적용된 언어
D. Garbage Collector 를 통한 자동적인 메모리 관리
E. 멀티쓰레드 지원
※ Garbage Collector ?
메모리 관리 기법 중 하나로 프로그램이 동적으로 할당했던 메모리 영역 중에서 필요없게 된 영역을 해제하는 기능이다.
자동으로 메모리 관리를 해준다.
장점
GC를 사용하면 동적으로 할당한 메모리 영역 전체를 완벽하게 관리하지 않아도 된다. 즉, GC를 통해서 아래와 같은 버그를 줄이거나 막을 수가 있다.
단점
GC가 행동하는 타이밍, 점유 시간을 사전에 예측하기 힘들어 실시간 시스템에는 적합하지않다. 즉, 할당된 메모리가 해제되는 시점을 알 수 없으므로 알고리즘의 동작이 멈출 수 있는 가능성 때문에 실시간 시스템에서는 지양해야 한다.
방식
- 포인터 추적 방식
포인터 추적 방식은 한 개 이상의 변수가 접근 가능한 메모리는 사용하고있는 메모리라 간주하고, 그 밖의 메모리를 해제하는 방식이다.
접근 가능한 메모리는 직/간접적인 메모리이며, 재귀적으로 접근하여 모든 메모리 파악 가능
- Mark and sweep (MARK)
포인터 추적 방식 중 당순한 기법으로 할당받는 메모리중 1비트를 남겨 메모리를 사용하는지 하지 않는지 표시 여부로 사용한다.
표시 단계에서 모든 변수가 가리키는 메모리(객체)를 사용중이라 표시하고 재귀적으로 따라가며 모든 사용중인 메모리에 마킹을 한다.
그 후 마킹이 안된 영역은 메모리의 할당 해제를 할 수가 있다. 단점으로는 표시 단계에서 메모리 내용이 변경되면 작동하지 않기 때문에 전체 시스템 실행이 정지된다는 단점이 있다.
- 삼색 표시 기법
위의 Mark and sweep 단점을 극복하기위한 기법이며 같은 방식으로 표시 단계에서 0/1이 아닌 흰색, 회색, 검은색이라는 정보 중 하나로 메모리에 표시를 한다.
※ 멀티쓰레드 ?
통상 하나의 프로세스는 하나의 스레드를 가지고 작업을 수행하게 된다.
멀티쓰레드는 하나의 프로세스 내에서 둘 이상의 스레드가 동시에 작업을 수행하는 것을 의미한다.
즉, 여러 개의 CPU를 사용하여 여러 프로세스를 동시에 수행하는 것을 의미한다.
멀티쓰레드는 각 스레드가 자신이 속한 프로세스의 메모리를 공유하므로, 시스템 자원의 낭비가 적으며, 하나의 스레드가 작업을 할 때 다른 스레드가 별도의 작업을 할 수 있어 사용자와의 응답성도 좋아진다.