본문 바로가기

java9

[Java] 많이 헷갈려하는 String constant pool과 Runtime Constant pool, Class file constant pool String Constant Pool과 Constant Pool 이 두 가지는 완전히 다른 개념입니다. 용어가 비슷한 형태이기 때문에 이 두 가지를 혼용하여 헷갈리는 경우가 많습니다만, 저장되는 위치부터 저장하는 데이터의 종류, 관리 주체까지 모든 것이 다른 저장공간입니다. 심지어 Constant pool은 JVM - Metaspace영역의 Constant pool과 컴파일된 class파일의 Constant pool이 다릅니다. 헷갈리지 않도록 살펴봅시다. String Constant Pool Java에서 문자열 리터럴을 저장하는 독립된 영역을 `String Constant Pool` 또는 `String Pool`이라고 부릅니다. JVM - Perm/Metaspace 영역에 존재하고 일반적으로 GC 대상.. 2023. 5. 19.
[Java] Multi Thread환경에서 동시성 제어를 하는 방법 스레드(Thread)란 무엇일까요? 스레드가 무엇인지 설명하기 위해서는 그 상위 단위인 프로세스에 대해 이해할 필요가 있습니다. 일반적으로 특정 작업을 수행하는 소프트웨어를 우린 프로그램이라고 부릅니다. 이러한 프로그램이 실제로 실행되어, 메모리나 CPU와 같은 자원을 할당받으면 이를 프로세스라고 부릅니다. 스레드는 이 프로세스를 구성하는 하나의 단위입니다. 하나의 프로세스에는 여러 스레드가 작동하고 있을 수 있겠네요. 스레드는 작업의 한 단위입니다. 프로세스는 독자적인 메모리를 할당받아서 서로 다른 프로세스끼리는 일반적으로 서로의 메모리 영역을 침범하지 못합니다. 하지만 프로세스 내부에 있는 여러 스레드들은 서로 같은 프로세스 내부에 존재하고 있기 때문에 같은 자원을 공유하여 사용할 수 있습니다. 같은.. 2020. 6. 6.
[Java] Java는 Call by reference가 없다 Call by Value와 Call By Reference가 뭘까? 프로그래밍을 하다 보면 꼭 알고 넘어가야 하는 개념이 있습니다. 바로 Call By Value, Reference입니다. 어떤 언어를 공부하든 나오는 개념이기도 합니다. Call by value란, 값을 호출하는 것을 의미합니다. 전달받은 값을 복사하여 처리합니다. 즉 전달받은 값을 변경하여도 원본은 변경되지 않습니다. Call by reference란 참조에 의한 호출을 의미합니다. 전달받은 값을 직접 참조합니다. 즉 전달받은 값을 변경할 경우 원본도 같이 변경이 됩니다. Java에 Call by reference가 있을까? 우리는 Java에서 객체를 전달받고, 그 객체를 수정하면 원본도 같이 수정되니 이것이 Call by refere.. 2020. 3. 24.
[Java] jConsole로 원격에서 실행중인 JVM 모니터링하기 서버 환경 Naver Cloud Platform(nCloud) Compact Server ubuntu 16 docker (openJDK-8 베이스 이미지로 만든 프로젝트가 올라갑니다) 프로젝트 Spring boot 2.2 maven JDK 8 모니터링 환경 Windows10 PRO Oracle JDK 8 jConsole 도커 이미지 작성 도커 이미지를 만들 때 참조하는 DockerFile을 다음과 같이 작성했습니다. FROM ascdc/jdk8 ADD delfood.jar delfood.jar ENV JAVA_OPTS="" ENTRYPOINT ["java",\ "-Dcom.sun.management.jmxremote.port=[접근할 포트]",\ "-Dcom.sun.management.jmxremote... 2020. 2. 14.
[Java] Java의 GC(Garbage Collection)방법과 종류 GC란? Java Application은 JVM(Java Viirtual Machine) 위에서 구동됩니다. JVM에서는 Java Application이 사용하는 메모리를 관리하고 있는데 이 JVM의 기능중 더 이상 사용하지 않는 객체를 청소하여 공간을 확보하는 GC라는 작업이 있습니다. GC란 Garbage Collection(쓰레기 객체 정리, 이하 GC)의 약자입니다. Java Runtime시 Heap 영역에 저장되는 객체들은 따로 정리하지 않으면 계속헤서 쌓이게되어 OutOfMemmory Exception이 발생할 수 있습니다. 이를 방지하기 위하여 JVM에서는 주기적으로 사용하지 않는 객체를 수집하여 정리하는 GC를 진행합니다. GC 전 후의 메모리 JVM의 메모리 영역 GC 작업을 진행하는 G.. 2019. 10. 17.
[Java DP] 프로그래머스 2 X n 타일링 Dynamic Programming의 대표적인 문제인 2XN 타일링 문제입니다. 문제 DP문제는 케이스를 나누는 것이 중요합니다. 케이스를 나눌 때는 문제를 다 풀기 직전의 상황부터 거꾸로 푸는 방법이 좋습니다. 바닥의 세로 길이는 2로 고정되어있고, 가로의 길이는 60,000이하의 자연수 입니다. 그러므로 문제를 풀 때는 변수로 주어지는 가로의 길이를 기준으로 진행하여야 합니다. 가로의 길이가 n일경우 n-1까지 타일이 꽉 차있다면 다음과 같은 경우가 있습니다. Case1. n-1 개의 타일까지 꽉 차있는 경우 채울 수 있는 가로의 길이가 1밖에 없으므로, 이 경우는 단 1개의 타일만 채울 수 있습니다. 가로의 길이가 n-2까지 꽉 차있다면 다음 케이스가 가능합니다. Case2. n-2개의 타일까지 꽉.. 2019. 9. 23.
[Java] 이클립스 설치방법 - JDK 1.7 설치, Eclipse Luna 설치 이클립스 설치 전 JDK를 먼저 설치해야 합니다. 가장 대중적으로 사용되고있는 JDK1.7을 설치해보도록 하겠습니다. https://www.oracle.com/technetwork/java/javase/downloads/java-archive-downloads-javase7-521261.html Java Archive Downloads - Java SE 7 www.oracle.com Accept License Agreement(동의)를 체크해주시고 윈도우에 설치하신다면 본인 운영체제에 맞는 exe파일을 클릭해주세요! 바로 다운로드가 진행되면 좋겠지만, 오라클 로그인을 해야합니다. 계정이 없으시다면 생각보다 오라클 계정이 필요한 경우가 많으니 계정을 만들어주세요. 로그인을 하신 후 로그인을 하시면 바로 J.. 2019. 8. 23.
[Java] String .split(".")결과가 공백이 나올 때 해결방법 문자열을 split()을 이용하여 자르고 싶을 때 작동이 잘 안되는 경우가 종종 있습니다. 보통 "."을 이용하여 자를 때 많이 일어나는데 이것은 split(); 메서드에 들어가는 "."이 정규식으로 작동하기 때문입니다. 그냥 "."을 이용하여 잘랐을 때의 결과 입니다. public class Test { public static void main(String[] args) { String str = "Hello.Wolrd.Eric!"; System.out.println("자를 문자열 => " + str); System.out.println("문자열을 \".\"를 이용하여 잘라 배열로 만듭니다."); String[] arrStr = str.split("."); System.out.println(); Sy.. 2019. 8. 21.
[java] 스레드(Thread)[2] - Runnable을 이용하여 구현하는 방법 스레드를 만드는 방법 중 black-box 방법으로 알려진 Runnable 인터페이스를 구현하는 방법에 대해 알아보겠습니다. 스레드를 만드는 방법은 white-box방법과 black-box방법이 있습니다. white-box방법은 java.lang.Thread 객체를 extend하여 만드는 것이고, black-box 방법은 java.lang.Runnable 인터페이스를 implements 하여 만드는 것입니다. white-box방식으로 제작한 스레드는 컴파일 타임 시점에 형식이 결정되어 동적인 기능 변경이 불가능하다는 단점이 있습니다. 반면 스레드를 Runnable객체로 만들게 되면 스레드를 상속받아 만드는 white-box방식에 비해 어플리케이션의 유연성과 확장성을 보장받을 수 있게 됩니다. Runnab.. 2019. 7. 27.