Java
-
JVM 메모리 구조Java 2023. 3. 9. 20:05
JVM은 Java Virtual Machine의 약자로, 자바 가상 머신이라고 부르며 자바 프로그램 실행환경을 만들어 주는 소프트웨어다. 자바 코드를 컴파일하여 .class 바이트 코드로 만들면 이 코드가 자바 가상 머신 환경에서 실행된다. 자바와 운영체제 사이에서 중개자 역할을 수행하며, 자바가 운영체제에 구애 받지 않고 프로그램을 실행할 수 있도록 도와준다. 또한, 가비지 컬렉터를 사용한 메모리 관리도 자동으로 수행하며, 스택 기반으로 동작한다. JVM을 사용함으로써 얻는 가장 큰 이점은 JVM을 사용하면 하나의 바이트 코드(.class)로 모든 플랫폼에서 동작하도록 할 수 있다는 점이다. C언어로 작성된 Test.c를 윈도우 컴파일러를 사용하여 컴파일하면 Test.exe가 만들어진다. 윈도우 컴파일..
-
[Effective Java] wait와 notify보다는 동시성 유틸리티를 애용하라Java 2023. 2. 14. 02:44
wait와 notify보다는 동시성 유틸리티를 애용하라 자바 5에서 도입된 고수준의 동시성 유틸리티가 이전이라면 wait와 notify로 하드코딩해야 했던 전형적인 일들을 대신 처리해주기 때문에 지금은 wait과 notify를 사용해야 할 이유가 많이 줄었다. 갖고 있던 고유 락을 해제하고, 스레드를 잠들게 하는 wait와 잠들어 있던 스레드 중 임의로 하나를 골라 깨우는 notify는 synchronized 블록이나 메소드에서 호출되어야하고, 올바르게 사용하기가 아주 까다로우니 고수준 동시성 유틸리티를 사용하자. java.util.concurrent의 고수준 유틸리티는 세 범주로 나눌 수 있다. 실행자 프레임워크, 동시성 컬렉션, 동기화 장치다. 동시성 컬렉션 동시성 컬렉션은 List, Queue, M..
-
[Effective Java] 스레드보다는 실행자, 태스크, 스트림을 애용하라Java 2023. 2. 14. 02:43
스레드보다는 실행자, 태스크, 스트림을 애용하라 책 초판의 아이템 49에서는 단순한 작업 큐(work queue) 클래스는 클라이언트가 요청한 작업을 백그라운드 스레드에 위임해 비동기적으로 처리해줬다. 작업 큐가 필요 없어지면 클라이언트는 큐에 중단을 요청할 수 있고, 그러면 큐는 남아 있는 작업을 마저 완료한 후 스스로 종료한다. 안전 실패나 응답불가가 될 여자를 없애는 코드를 추가해야 했기 때문에 코드가 길고 복잡했다. java.util.concurrent 패키지 java.tuil.concurrent 패키지가 등장하면서 더이상 위와 같은 코드를 작성하지 않아도 됐다. 이 패키지는 실행자 프레임워크라고 하는 인터페이스 기반의 유연한 태스크 실행 기능을 담고 있다. 그래서 모든 면에서 뛰어난 작업 큐를 ..
-
@EqualsAndHashCode, equals, hashCodeSpring 2023. 1. 18. 22:23
equals 와 hashCode란? equals 와 hashCode는 Object 클래스에 정의되어 있다. Object 클래스의 자식인 Java의 모든 객체는 Object 클래스에 정의된 equals 와 hashCode 함수를 상속받는다. equals() boolean equals(Object obj)로 정의된 equals 메소드는 2개의 객체가 동일한지 검사하기 위해 사용된다. equals는 2개의 객체가 참조하는 것이 동일한지를 확인하는 것이며, 동일성(identity)을 비교하는 것이다. 즉, 2개의 객체가 가리키는 곳이 동일한 메모리 주소일 경우에 동일한 객체가 된다. public boolean equals(Object obj) { return (this == obj); } 동일한 객체일지라도 서..