이번에 소개할 내용은 GC(Garbage Collection)가 HotSpot VM에서 작동하는 기본 사항을 설명한다. 프로그램의 성능을 생각하는 개발자라면 GC(Garbage Collection)가 어떻게 처리되는지 기본 지식을 갖고 있어야 한다. GC(Garbage Collection)에 대해서 반드시 암기하고 숙지해야 자바 개발을 할 수 있는 것은 아니다. 자신이 만든 자바 프로그램의 성능을 생각하는 프로그래머라면, GC(Garbage Collection)가 어떻게 처리되는지 기본 지식을 갖고 있는 것이 좋다. GC(Garbage Collection)에 관심을 갖고 관련 내용을 찾을 정도면 프로그래머로써의 한 단계 레벨업을 꿈꾸시는 분들로 생각된다. 우선 JAVA 메모리 스택&힙 영역에 대해 기본적..
오버플로우 산술 연산을 할 때 주의할 점은 충분히 표현 가능한 산출 타입인지 확인해야 한다. 산출 타입으로 표현할 수 없는 값인 경우 오버플로우가 발생하여 쓰레기 값이 반환된다. public class OverflowExample { public static void main(String[] args) { int x = 50000; int y = 50000; int z = x * y; System.out.println(z); } } 변수 x, y는 int 타입이고 z 역시 int 타입이다. 컴파일 에러도 없다. 하지만 변수 z에 예상한 값이 저장되지 않는다. 그 이유는 int 타입 범위를 초과하였기 때문이다. 올바른 값을 얻기 위해서는 변수가 long 타입이어야 한다. public class Overfl..
자바의 특징 이식성이 높은 언어이다. 자바 언어로 개발된 프로그램은 소스 파일을 다시 수정하지 않아도, 자바 실행 환경(JRE)이 설치되어 있는 모든 운영체제에서 실행이 가능하다. 객체 지향 언어이다. 자바는 100% 객체 지향 언어이다. 객체를 만들기 위해 설계도인 클래스를 작성해야 하고, 객체와 객체를 연결하여 목적에 맞는 프로그램을 만들어 낸다. 처음부터 객체를 고려하여 설계되었기 때문에 객체 지향 언어가 가져야 할 캡슐화, 상송, 다형성, 기능을 완벽하게 지원하고 있다. 함수적 스타일 코딩을 지원한다. 자바는 함수적 프로그래밍을 위해 람다식을 자바 8부터 지원한다. 람다식을 사용하면 컬렉션의 요소를 필터링, 매핑, 집계 처리하는데 쉬워지고, 코드가 매우 간결해진다. 메모리를 자동으로 관리한다. 자..
프로그래밍 언어는 컴퓨터가 이해할 수 있는 언어로 일상생활에서 사용하는 언어와는 완전히 다른 기계어(machine language)이다. 기계어는 0과 1로 이루어진 이진 코드이다. 프로그래머와 컴퓨터가 대화하기 위해서는 기계어의 다리 역할을 하는 프로그래밍 언어가 필요하다. 프로그래밍 언어는 저급 언어와 고급언어로 구분된다. 저급 언어 - 기계어에 가까운 언어를 말하며, 대표적으로 어셈블리어가 저급 언어에 속한다. 고급언어 - 사람이 쉽게 이해할 수 있는 언어를 말한다. 고급언어로 작성된 소스는 컴퓨터가 바로 이해할 수 없기 때문에 컴파일(complie) 과정을 통해 컴퓨터가 이해할 수 있는 기계어로 변환하여 컴퓨터가 사용한다.
접근 제어자 자바는 4가지 접근 제어자를 제공한다. 이 접근 제어자는 클래스, 메서드, 변수 등을 선언할 때 사용하고, 선언한 해당 항목의 범위를 제한하는 것이 목적이다. public : 누구나 접근이 가능하다. protected : 같은 패키지 내에 있거나 상속받은 경우에만 접근 가능하다. packeage-private : 아무런 접근 제어자를 적어주지 않는 경우이며, 같은 패키지 내에 있을 때만 접근 가능하다. private : 해당 클래스 내에서만 접근 가능하다. 접근 제어자 클래스 패키지 상속 클래스 Import public O O O O protected O O O X packeage-private O O X X private O X X X 각종 제어자 접근 제어자 이외에 자바에서 제공하는 각종..
java.lang.Object 클래스가 toString 메서드를 제공하긴 하지만 이 메서드가 반환하는 문자열은 일반적인 문자열이 아니다. 클래스 이름 다음에 @ 기호와 16진수로 표현된 해시 코드가 붙은 문자열이다. toString의 일반 규약에는 '모든 하위 클래스는 이 메서드를 재정의함이 바람직하다.(It is recommended that all subclasses override this method.)' 라는 구절도 있다. toString을 재정의 하면 디버깅할 때에도 많은 도움이 된다. 그리고 객체를 바로 문자열과 연결시켜 사용할 때도 편하게 작업할 수 있다. 가능하다면 toString 메서드는 객체 내의 중요 정보를 전부 담아 반환해야 한다. toString이 반환하는 문자열의 형식을 떠나 ..
많은 버그가 hashCode 메서드를 재정의하지 않아서 생긴다. equals 메서드를 재정의하는 클래스는 반드시 hashCode 메서드도 재정의 해야 한다. 그렇지 않으면 Object.hashCode의 일반 규약을 어기게 되므로 HashMap, HashSet, Hashtable 같은 hash 기반 컬렉션과 함께 사용하면 오동작하게 된다. 일반 규약 같은 객체의 hashCode를 여러 번 호출하는 경우 equals가 사용하는 값이 변경되지 않았다면 언제나 동일한 정수(Integer)가 반환되어야 한다. 단 프로그램이 재시작되었을 경우 같은 값이 나올 필요는 없다. equals 메서드가 같다고 판정한 두 객체의 hashCode 값은 같아야 한다. equals 메서드가 다르다고 판정한 두 객체의 hashCod..
equals 메서드는 재정의하기 쉬워 보이지만 실수할 여지도 많다. 이런 문제를 피하는 가장 간단한 방법은 equals 메서드를 재정의 하지 않는 것이다. 아래 조건 중 하나라도 만족하면 equals 메서드를 재정의 하지 않아도 된다. 각각의 객체가 고유한 경우 상위 클래스에서 재정의한 equals가 하위 클래스에서 사용하기에도 적당 한 경우 그렇다면 Object.equals를 재정의하는 것이 바람직할 때는 언제인가? 객체 동일성(Object equality)이 아닌 논리적 동일성(Logical equality)의 개념을 지원하는 클래스인 경우 상위 클래스의 equals가 하위 클래스의 필요를 충족하지 못하는 경우 값 클래스(Value Class)는 대체로 그 조건에 부합한다. Value Class (I..
종료자(finalizer)는 예측 불가능하며, 대체로 위험하고, 일반적으로 불필요한다. 종료자는 C++의 소멸자(destructor)와는 다르다는 것을 유념해야 한다. C++의 소멸자는 생성자와 쌍으로 움직이기 때문에 소멸 즉시 호출된다. 하지만 Java에서는 사용되지 않는 객체에 할당된 공간을 GC가 알아서 반환하므로 프로그래머 입장에서 특별히 할 일이 없다. 신경 쓰지 않아도 된다는 말은 다른 말로는 즉시 처리가 되지 않는다는 의미이기도 하다. 따라서 긴급한 작업을 종료자 안에서 처리하면 안 된다. Java에서는 try-finally를 이용하여 해제되어야 할 상황이라면 객체 종료를 보장하기 위해 반드시 그 즉시 직접 해제해야 한다. Java 1.7부터 try-with-resources 문을 지원하므로..
자바는 C/C++ 과는 다르게 더 이상 참조되지 않으면 객체들이 사용하던 메모리가 자동으로 회수된다. public Object pop(){ if(size == 0) throw new EmptyStackException(); Object result = elements[--size]; elements[size] = null; // 쓸모없는 reference 를 제거 return results; } 불필요한 객체를 null로 만들면 메모리에서 바로 제거되며 나중에 실수로 그 참조를 사용하더라도 NullpointException이 바로 일어나도록 할 수 있다. 자체적으로 관리하는 메모리가 있는 클래스를 만들 때는 메모리 누수가 발생하지 않도록 주의해야 한다. (ex. element 가 free 되면 objec..
- 프로그래머스
- 제주도 3박4일 일정
- Linux 명령어
- 정렬 알고리즘
- Eclipse
- 제주도 여행
- 경력관리
- Maven
- sort algorithm
- Collection
- React
- 오라클 내장 함수
- SQL
- 성능분석
- Java
- 소프트웨어공학
- 이직
- 프로그래머
- Tomcat
- 리액트
- 리액트 16
- 개발환경
- 자바
- 리눅스 명령어
- effective java
- 회고
- spring
- 오라클
- 자바스크립트
- javascript
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 | 31 |