분류 전체보기

    자바 volatile 이란?

    volatile = 휘발성 그 변수를 휘발성 메모리에 만들어라 라는 뜻이다. 변수를 메인 메모리에 저장하겠다고 명시하는 것이다. 매번 변수의 값을 Read,Wrtie할 때마다 CPU cache에 저장된 값이 아닌 Main Memory에서 읽는 것이다 . CPU Cache보다 Main Memory 비용이 더 크기 때문에 변수 값 일치를 보장해야만 하는 경우에만 volatile을 사용하는게 좋다. Main Memory에 read, write 하는 작업의 원자성을 보장하는 경우. 원자성이 보장되는 경우에 volatile 키워드 만으로 안전하게 데이터를 교환할 수 있음. 멀티 스레드 환경에서 하나의 스레드만 read & write 하고 나머지 Thread가 read하는 상황에서 가장 최신의 값을 보장함 vola..

    BigInteger, BigDecimal 클래스

    BigDecimal 아래의 두개로 표현 가능함 Unscaled value – an arbitrary precision integer : Scale – a 32-bit integer representing the number of digits to the right of the decimal point 예) 3.14인 경우 unscaled value = 314, scale = 2 javadocs에 아래와 같이 기술되어 있다. Immutable, arbitrary-precision signed decimal numbers. A * {@code BigDecimal} consists of an arbitrary precision integer * unscaled value and a 32-bit integer ..

    JVM String Constant Pool

    JVM의 Heap메모리의 Permenent 영역에 존재한다. 자바 7에서의 힙에서는 PerGen에 있는 클래스의 인스턴스 저장 -Xms(min), -Xmx(max로 사이즈 조정 PermGen 클래스와 메소드의 메타데이터 저장 상수풀 정보 JVM, JIT 관련 데이터 -XX:PermSize(min), -XX:MaxPermSize(max)로 사이즈 조정 Perm 영역은 보통 Class의 Meta 정보나, 메소드의 메타 정보, 스태틱 변수와 상수 정보들이 저장되는 공간으로 흔히 메타데이터 저장 영역이라고도 한다. 하지만 자바 8에서는 Native 영역으로 이동하여 Metaspace 영역으로 변경되었다. 자바8 : 메타스페이스 영역 자바 8에부터는 자바 7의 Perm 영역이 삭제되고 Native 영역으로 이동해..

    Spliterator란

    public interface Spliterator ForkJoinFramwork에서 사용되는 인터페이스라, 이번 기회에 공부해보려고 한다. Spliterator는 8버전에서 새롭게 소개된 인터페이스다. 소스의 원소를 traverse 하고 partition 하기 위한 인터페이스다. 이름에서 알수 있다 싶이, Stream안에서만 사용된다. * An object for traversing and partitioning elements of a source. The source * of elements covered by a Spliterator could be, for example, an array, a * {@link Collection}, an IO channel, or a generator funct..

    non-reifiable 타입이란

    비 구체화 타입(non-reifiable type) : 타입 소거자에 의해 컴파일 타임에 타입 정보가 사라지는 것(런타임에 구체화하지 않는 것) 구체화 타입(reifiable type) : 자신의 타입 정보를 런타임 시에 알고 지키게 하는 것 (런타임에 구체화하는 것). 런타임 시에 완전하게 오브젝트 정보를 표현할 수 있는 타입 제너릭 타입 소거 : 원소 타입을 컴파일 타임에만 검사하고 런타임에는 해당 타입 정보를 알 수 없는 것. 다른 말로는 컴파일 타임에만 제약 조건을 적용하고, 런타임에 타입에 대한 정보를 소거하는 프로세스. Primitives, non-generic types, raw types 등이 있다. non-reifiable 문제는 자바에서 제네릭을 사용하지 않는 버전과의 호환성을 위해서 ..

    Java Datagram 관련 클래스

    TCP와는 다르게 클래스 하나에서 보내는 역할과 받는 역할을 모두 수행할 수 있다. 스트림을 사용하지 않고 DatagarmPacket이라는 클래스를 사용함 javadocs에는 아래와 같이 기술되어 있다. datagram packet를 나타내는 클래스이다. Datagarm 패킷은 비연결성 packet 전송 service에 쓰인다. 각각의 message는 여러개의 packets은 한 machine에서 다른 machine으로 전송된다. 순서가 보장되지 않고, 전송이 보장되지 않는다. * This class represents a datagram packet. * * Datagram packets are used to implement a connectionless packet * delivery service..

    자바 Socket 클래스

    package java.net에 선언된 클래스. 데이터를 보내는 쪽에서 객체를 생성하여 사용한다. 데이터를 보내는 쪽에서 많이 사용하고. 원격에 있는 장비와의 연결 상태를 보관하기 위한 클래스 javadocs에는 아래와 같이 기술되어 있다. "소켓은 두개의 machine의 연결을 위한 endpoint이다." 실제 동작은 SocketImpl의 instance에 의해 동작한다. 데이터를 보내기 위한 클래스이고, 데이터를 받는 서버에서는 클라에서 접속을 하면 Socket 객체를 생성하지만, 데이터를 보내는 쪽에서는 직접 생성해야 한다. * This class implements client sockets (also called just * "sockets"). A socket is an endpoint for..

    Funcitional Programming (함수형 프로그래밍)

    프로그래밍 패러다임 프로그래밍 패러다임은 프로그래머에게 프로그래밍의 관점을 갖게하고 결정하는 역할을 한다. 명령형 프로그래밍: 프로그래밍의 상태와 상태를 변경시키는 구문의 관점에서 연산을 설명하는 방식 알고리즘을 명시하고 목표는 명시 안함 절차지향 프로그래밍: 수행되어야 할 연속적인 계산 과정을 포함하는 방식 (C, C++) 객체지향 프로그래밍: 객체들의 집합으로 프로그램의 상호작용을 표현 (C++, Java, C#) 선언형 프로그래밍: 어떤 방법으로 해야 하는지(How)를 나타내기보다 무엇(What)과 같은지를 설명하는 방식 알고리즘은 명시하지 않고 목표만 명시 함수형 프로그래밍: 순수 함수를 조합하고 소프트웨어를 만드는 방식 (클로저, 하스켈, 리스프) 거의 모든 것을 순수 함수로 나누어 문제를 해결..