본문 바로가기

WEB개발/JAVA

(6)
[JAVA] 메모리 스택, 힙 프로그램이 실행되기 위해서는 먼저 프로그램이 메모리에 로드(load)되어야 합니다. 또한, 프로그램에서 사용되는 변수들을 저장할 메모리도 필요합니다. 따라서 컴퓨터의 운영체제는 프로그램의 실행을 위해 다양한 메모리 공간을 제공하고 있습니다. 프로그램이 운영체제로부터 할당받는 대표적인 메모리 공간은 4가지가 있습니다. 코드(code) 영역 데이터(data) 영역 스택(stack) 영역 - 지역 변수 메서드, 생성자, 초기화 블록 내에서 선언되고 사용됩니다. 스택 메모리에 저장되며, 메서드나 생성자의 실행이 끝나면 메모리에서 사라집니다. 힙(heap) 영역 - 인스턴스 변수 클래스 내부에서, 메서드 밖에서 선언되고 사용됩니다. 힙 메모리에 저장되며, 객체가 생성될 때 생성되며 객체가 사라질 때까지 유지됩니다..
[JAVA] Thread-Safe, Concurrent Collection class, Double Checked Locking synchronized 서버에 동시에 여러 request다 요청될 경우 data의 안정성과 신뢰성을 보장할 수 없습니다. 따라서 data의 thread-safe 를 하기 위해 자바에서는 synchronized 키워드를 제공해 스레드간 동기화를 시켜 data의 thread-safe를 가능케합니다. Synchronized 키워드는 변수와 함수에 사용해서 동기화 할 수 있습니다. 하지만 Synchronized 키워드를 너무 남발하면 오히려 프로그램 성능저하를 일으킬 수 있습니다. // 1. 메서드에서 사용하는 경우 public synchronized void method(){// 코드} // 2. 객체 변수에 사용하는 경우(block문) private Object obj = new Object(); publi..
[JAVA] JMX(MBean), JOLOKIA JMX(Java Management Extensions) JMX(Java Management eXtensions)는 응용 프로그램(소프트웨어)/객체/장치 (프린터 등) 및 서비스 지향 네트워크 등을 감시 관리를 위한 도구를 제공하는 자바 API이다. JDK 1.5 이상부터 기본적으로 탑재된 기능 자바 어플리케이션의 모니터링과 관리 기능을 제공한다. Non-Java Resource와 하드웨어에 대해 wrapping한 인터페이스를 제공하며, API를 외부로 노출해 application 설정 및 통계데이터를 수집할 수 있는 기능을 제공한다. mBean으로 알려진 하나 이상의 사용자 JavaBean 오브젝트를 통해(혹은 리소스를 호출하는) 애플리케이션, 디바이스, 서비스를 원격으로 제어할 수 있다. mBean들..
[JAVA] 객체 직렬화 serialization, IOStream 1. 직렬화 serialization 직렬화 serialization 객체에 저장된 데이터를 스트림에 쓰기 위해 연속적인 데이터로 변환하는 것을 말한다. 반대로 스트림에서 데이터를 읽어 객체로 변환하는 것을 역직렬화(deserialization)라 한다. 역직렬화, deserialize 역직렬화는 ObjectInputStream의 readObject()를 이용한다. 다만 한 가지 주의 사항이 있는데 하나 이상의 객체를 직렬화 했을 경우 반드시 같은 순서로 역직렬화 해야 한다는 것이다. package test.serialize; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStrea..
[JAVA] AtomicInteger (thread-safe) AtomicInteger AtomicInteger란 원자성을 보장하는 Interger를 의미한다. 멀티 쓰레드 환경에서 동기화 문제를 별도의 synchronized 키워드 없이 해결하기 위해서 고안된 방법이다. (일반적으로 동기화 문제는 synchronized, Atomic, volatile 세가지 키워드로 해결한다.) synchronized은 특정 Thread가 해당 블락 전체를 lock 하기 때문에 다른 Thread는 아무작업을 못하고 기다리는 상황이 되어 낭비가 심하다. 그래서 NonBlocking하면서 동기화 문제를 해결하기 위한 방법이 Atomic이다. AtomicInterger 동작의 핵심 원리는 바로 CAS알고리즘(Compare and Swap)에 있다. 현재 쓰레드에 저장된 값과 메인 메모..
[JAVA ] ClassPath, ClassLoad, JAVA COMPILE(컴파일) 클래스패스란(Class Path)란?? 클래스패스란 말 그대로 클래스를 찾기위한 경로이다. 자바에서 클래스패스의 의미도 똑같다. 즉, JVM이 프로그램을 실행할 때, 클래스파일을 찾는 데 기준이 되는 파일 경로를 말하는 것이다. 소스 코드(.java로 끝나는 파일)를 컴파일하면 소스 코드가 “바이트 코드”(바이너리 형태의 .class 파일)로 변환된다. java runtime(java 또는 jre)으로 이 .class 파일에 포함된 명령을 실행하려면, 먼저 이 파일을 찾을 수 있어야 한다. 이때 .class 파일을 찾을 때 classpath에 지정된 경로를 사용한다. 톰캣 5 클래스 로드 순서 Tomcat 5.x Class 를 찾는 순서 Bootstrap classes of your JVM : Java ..