월별 글 목록: 2008년 7월월

브라이언 고츠(Brian Goetz’s)의 빠르고 성능좋은 자바 코드에 대한 인터뷰

브라이언 고츠(Brian Goetz)는 선 마이크로 시스템즈(Sun)에 근무하는 자바 에반젤리스트(Java evangelist)이고, 자바에 많은 공헌을 했지만, 특별히 java.util.concurrent 패키지에 많은 공헌을 했습니다.  아래 인터뷰는 2006년에 한 내용으로, 빠르고 성능좋은 자바 애플리케이션을 작성하는 기본에 대한 내용입니다.


In the interview, Goetz gave this advice on how to write faster-performing Java code:

Often, the way to write fast code in Java applications is to write dumb code?code that is straightforward, clean, and follows the most obvious object-oriented principles.

This has to do with the nature of dynamic compilers, which are big pattern-matching engines. Because compilers are written by humans who have schedules and time budgets, the compiler developers focus their efforts on the most common code patterns, because that’s where they get the most leverage. So if you write code using straightforward object-oriented principles, you’ll get better compiler optimization than if you write gnarly, hacked-up, bit-banging code that looks really clever but that the compiler can’t optimize effectively.

So clean, dumb code often runs faster than really clever code, contrary to what developing in C might have taught us. In C, clever source code turns into the expected idiom at the machine-code level, but it doesn’t work that way in Java applications…

If I could wave a magic wand and send out one message about Java programming, it would be this: Trust the JVM. It’s smarter than you think. Stop trying to outwit or outsmart it. Tell it what you want, and it will do its damnedest to make your application run as fast as it can.


이 인터뷰를 간단하게 정리하면, “코드를 어렵게 또는 최적화해서 쓰지 말고, 많이 사용하는 패턴으로 작성하면 컴파일러가 최적화해서 비교적 성능이 좋은 자바 애플리케이션을 개발할 수 있다”는 것이다. 즉, 어렵게 코드를 개발하지 말고 쉽게 쉽게 가독성 좋게 코드를 쓰자.

자바 디컴파일러(java decompiler)

자바 애플리케이션이 실행되는 과정을 살펴보면 아래와 같다.

  1. 소스를 컴파일해서 바이트 코드를 만들어 진다.
  2. 다음으로 자바 VM이 컴파일 된 바이트 코드를 읽어서 실행이 된다.

자바 애플리케이션은 VM이 바이트 코드를 읽어서 사용하는 구조이기에, 자바 애플리케이션들은 디컴파일러를 사용하면 쉽게 소스를 확인할 수 있다. 그래서 최소한의 보안을 위해서 난독화(Obfuscate)를 많이 사용한다. 이 글에서는 자바 애플리케이션을 디컴파일할 수 있는 툴 목록은 아래와 같다.

bubble sort using java

Bubble sort is a simple sorting algorithm. It works by repeatedly stepping through the list to be sorted, comparing two items at a time and swapping them if they are in the wrong order. The pass through the list is repeated until no swaps are needed, which indicates that the list is sorted. The algorithm gets its name from the way smaller elements “bubble” to the top of the list. Because it only uses comparisons to operate on elements, it is a comparison sort.

사용자 삽입 이미지

	public static void bubbleSort() {

		int temp = 0;
		int[] data = new int[5];

		data[0] = 1;
		data[1] = 5;
		data[2] = 100;
		data[3] = 20;
		data[4] = 50;

		for (int i = 0; i < data.length; i++) {
			for (int j = i + 1; j < data.length; j++) {
				if (data[i] < data[j]) {
					temp = data[i];
					data[i] = data[j];
					data[j] = temp;
				}
			}
		}

		for (int x = 0; x < data.length; x++) {
			System.out.println(data[x]);
		}
	}

자바 5 이상에서 Nimbus LookAndFeel 보다 좋은 Substance LookAndFeel

대체로 클라이언트 프로그램은 자바를 사용하지 않는것 같다. 성능 이슈도 있겠지만, UI의 부족(?)도 큰 이유라고 생각한다. 최근 클라이언트 프로그램을 개발하다가 매우 좋은 Look and Feel인 Substance를 발견했다. Substance는 https://github.com/kirill-grouchnikov/substance 사이트에서 확인할 수 있다. 아래 이미지는 Substance Look and Feel을 적용한 예제이다. 자바로 이렇게 멋진 클라이언트를 만들수 있겠구나라는 생각과 의욕을 줄 만한 프로젝트로 보여진다.

사용자 삽입 이미지

Sun xVM VirtualBox

요즘 가상화에 대한 기술이 이슈긴 한거 같습니다.
소속되어 있는 회사도 가상화를 통해서 서비스를 준비하고 있고요..

가상화로 유명한 툴은 Vmware가 있지만,
Sun에서도 Xvm VirtualBox가 출시를 하고 있습니다.
물론, MS도 VirtualPC 라는 툴이 있긴 하지만 윈도만 지원되는 단점이 잇네요..

아래는 Sun의 Xvm VirtualBox 소개 페이지 및 특징입니다.

Sun xVM VirtualBox software is the world’s most popular open source
virtualization platform because of its fast performance, ease of use,
rich functionality, and modular design.

VirtualBox 1.6 is a major update, incorporating over 2000 improvements. Among the highlights:

  • The new Sun livery
  • Solaris and Mac versions no longer in beta
  • Guest Additions for Solaris
  • Seamless windowing for Solaris and Linux guests
  • SATA support for up to 32 hard disks per VM (first product in the industry to do SATA!)
  • PAE support for guests (memory model required by some server OSes)
  • Web Services API for remote management
  • Significant improvements to scalability

자세한 내용은 http://www.sun.com/software/products/xvm/ 에서 살펴보실 수 있습니다. ^^