Java에서 Stream을 이용해서 read, write를 할때 버퍼를 얼마의 크기로 설정해야 할지 고민이 될때가 있다.이럴 때는 다음과 같이 시스템에 최적인 크기를 알아내서 사용하면 최고의 성능이 나온다.아래의 코드는 디스크에서 몇바이트 씩 읽는가를 BufferedXXXStream이 알아내서 사용한다.일반적으로 안드로이드는 8192이다. 인터넷이나 책의 예제는 1024로 설정하는데 8192로 설정하면 가장 적합하다. class IdealBlockSize { // You could alternatively use BufferedInputStream and System.in . private static class MyBufferedOS extends BufferedOutputStream { public ..
Java에서 MySQL을 연동할때 JDBC로 연동을 하느냐, 아니면 MySQL connector로 직접 연동을 하느냐 고민이 많았다. 결론적으로는 JDBC는 MySQL connector library jar가 필요하고 두가지는 똑같다고 할수 있다. 윈도우에서 ODBC냐 아니냐와는 다른 문제였다. 아무튼 다음과 같이 코드를 작성하고 리눅스 서버 콘솔에서 테스트 하면 Java에서 MySQL을 연결할수 있는지 테스트를 할수 있다. MySQL connector가 없으면 ClassNotFoundException이 발생하며, 기타 DB관련 문제는 SQLException이 발생한다. import java.sql.*; /* javac MySQLTest.java java -classpath .:./mysql-connec..
자바는 C++이나 C#과는 다르게 enum을 int로 형변환 하는 등 제대로 사용하려면 많이 구현해 주어야 한다. 아래와 같은 enum이 있다고 하였을 경우, Carrier.SKT enum을 int로 변환하려고 할때 다음을 호출하면 0이 리턴 된다. Carrier.SKT.getValue(); 그리고 1을 Carrier.KT로 변환하려 할때는 다음과 같이 한다. Carrier.values()[1]; public enum Carrier { SKT(0), KT(1), LGT(2), NA(3); int value = 0; Carrier(int value) { this.value = value; } public int getValue() { return value; } @Override public String ..
public class Singleton { //쓰레드에서 변수의 변화를 바로 감지하게 하기 위함 private volatile static Singleton instance; private Singleton() { } public static Singleton getInstance() { // 생성할때만 초기화 한다. if (instance == null) { // 클래스 단위로 락을 건다. static 이므로 synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } }
자바로 만든 서버 파일이 server.jar일때 이 jar를 실행하는 방법은 다음과 같다. java -jar server.jar 그러나 이렇게 하면 백그라운드 실행이 안되므로 다음과 같이 start/stop.sh를 만들었다. [start.sh] nohup java -jar server.jar >/dev/null 2>&1 & [stop.sh] pid=`ps -ef | grep server.jar | grep -v 'grep' | awk '{print $2}'` kill -9 $pid
GC의 reachability를 판단할때는 다음과 같은 GC root 노드를 기준으로 판단한다. 그 GC root에 해당하는 것들은 다음과 같은 것이 있다. The so-called GC (Garbage Collector) roots are objects special for garbage collector. Garbage collector collects those objects that are not GC roots and are not accessible by references from GC roots. There are several kinds of GC roots. One object can belong to more than one kind of root. The root kinds are:..
- Total
- Today
- Yesterday