2014.03.31 10:59

OS를 새로 설치하고 톰캣도 새로 다운받고

백업해놨던 이클립스 워크스페이스를 로드하고 나면 톰캣 설정이 꼬여서
새로운 톰캣 서버를 추가할 수 없게 될때가 있습니다.


그런 상황에서는

http://stackoverflow.com/questions/93900/cant-add-server-to-a-moved-workspace

요로코롬

Window/Preferences/Server/Runtime Environments 가셔서

기존에 있던 톰캣들을 지워주시고 올바른 경로로 새 톰캣 서버를 추가해주시면 됩니다.


Posted by 나야
2012.02.29 15:12
두 관련 없는 파일을 비교할 때, 

예를 들면, 
A라는 프로젝트에서 복사 수정한 B라는 프로젝트가 있는데
A 프로젝트의 소스코드에서 변경된 부분을 확인하고 싶을 때는 다음과 같이 하면 됩니다.

Package Explorer 등에서 두 파일을 모두 선택합니다.
오른쪽 클릭 또는 Context 버튼을 눌러 컨텍스트 메뉴를 띄웁니다.
Compare With > Each Other를 차례로 선택합니다.

출처: Using Eclipse to compare two files

Posted by 나야
2008.05.30 16:20
http://www.sdnkorea.com/blog/232에 가보면 해당 플랫폼을 위한 자바 버츄얼 머신의  비표준 옵션에 관련된 설명입니다.  이 글은 가비지 컬렉션을 프로그램 내에서 실행시킬 수 있는 방법을 찾다가 읽게 되었는데, 그래서 이 글의 요점은 System.gc() 를 이용해서 청소기를 실행시키는 방법입니다.

저는 자바를 이용해서 간단한 텍스트 마이닝을 하고 있습니다.
텍스트를 많이많이 메모리에 올리고, 거기서 단어를 추출해서 다시 많은 단어가 메모리에 올라가고,
그 단어들에 대해서 tfidf 를 계산해서 다시 메모리에 다 올리고...하는 통에 많은 메모리를 사용하게 되었습니다. -Xmx1024M 옵션을 사용하게 되었습니다. 그러나 안심한 것도 한 순간.
초초보인 제가 짠 프로그램은 1024M를 넘어 죽어버리고 말았습니다.
불쌍한 녀석.
그래서 메모리를 적게 사용하고자 프로그램을 수정해주었습니다.
일단 사용하고난 객체는 null 을 할당하여 가비지 컬렉터에 도움을 주고자 하였으며,
편리함에 잘 사용하고 있는 Java Collecion의 클래스 들인 ArrayList, HashMap, LinkedList 등등의 clear() 메소드를 전혀 사용하고 있지 않았던 것이었습니다. 흠.
사실, System.gc() 메소드를 사용하지 않고 문제를 해결하려 했으나...역시 메모리는 많이 사용하더군요.

그런데 도대체 clear() 메소드는 무엇을 하는 녀석인가! 하여 소스를 살짝보니...

ArrayList의 clear() 메소드입니다.
사용자 삽입 이미지
ArrayList의 객체가 저장되어 있는 elementData를 다 쭈~욱 null 로 할당한다음에,
size를 0으로 할당하는군요. ㅡㅡㅋ

LinkedList의 clear() 메소드
사용자 삽입 이미지

















이건 모지... LinkedList에는 Entry<E>라는 pirvate static class가 정의되어 있는데,
next와 previous 를 갖고, element를 저장할 수 있는....
어쨌거나 next와 previous, 그리고 element에 null을 할당한 후 다음 element를 넘어가는 군요.
역시 modCount++; 을 실행시키고 있고...

ㅡㅡㅋ 모, HashMap 도 그냥 null을 할당하는 정도...
그런데, modCount++은 도대체 왜 하는 것인가요?
그래서! F3키를 눌러 modCount로 고고씽~

ArrayList의 modCount는 AbstractList 에 있는
protected transient int modCount 입니다.
주석이 영어로 길게 달려 있지만 읽기가 귀찮으므로므로므로....
대강 size 가 수정된 회수를 나타내는 군요. ㅡㅡㅋ

모...어찌됐건.

실행되는 동안 청소기는 동작하지 않는 듯 했고. 메모리는 어느새 1G에 근접했으나,
997M에서 멈추었습니다. 흠...TimerTask로 하루에 한번씩 실행되게 되어 있어
계속 그정도 메모리는 유지하더군요.

다음. System.gc() 를 코드에 넣고 실행시켜보았습니다.
아. 뭥미.....별거 모 안해주는 군요. 반전인가...

Posted by 나야
2008.03.07 10:31
구글에서 검색해보니

Inet Address inetaddr = InetAddress.getLocalHost();
inetaddr.getHostAddress();

를 리눅스에서 사용하면,  127.0.0.1을 반환해 주는데, 이 주소는 LoopBack 주소를 말합니다.
윈도우에서는 실제 설정해놓은 ip를 반환한다고 합니다.
LoopBack 주소를 반환하는 것은 합당하다는 글이 좀 있었는데.
어쨌거나 제가 하고 싶은 것은 메시지 기반 통신에서 필요할 때마다 ServerSocket을 띄우고 메시지를 받을 Agent에게 접속할 ip와 port를 알려주어서 Binary File을 받아가게 하고 싶은 것입니다.

이를 위해서 NetworkInterface.getNetworkInterfaces()를 사용했습니다.
이 정적 메쏘드를 사용하면 시스템이 갖고 있는 NetworkInterface들을 Enumeration<NetworkInterface>로 반환해주는데, 이를 확인해보면 ip를 확인할 수 있습니다.

Enumeration<NetworkInterface> ne = NetworkInterface.getNatworkInterfaces();
while ( ne.hasMoreElements()) {
     NetworkInterface ni = ne.nextElement();
     System.out.println("Name : " + ni.getName());
     Enumeration<InetAddress> inets = ni.getInetAddresses()/;
     while(inets.hasMoreElements();
          InetAddress iaddr = inets.nextElement();
          System.out.println("INet --> isSiteLocalAddress() -->" + iaddr.isSiteLocalAddress());
     }
}

간략히 위와 같은 식으로 해서 NetworkInterface의 이름이 regular expression "eth[0-9]'인 것을 찾은 다음, isSiteLocalAdresss()를 통해 true인 것을 확인하면, local ip를 확인할 수 있습니다.

검색한 글에서 추천하는 방법은 외부와의 socket연결이 되어 있다면 그 socket연결을 통해서 ip를 확인하는 방법이 좋다고 합니다.

꼼수꼼수...
Posted by 나야
2007.11.08 15:18

구글에서 Eclipse java heap size 를 검색하니 우선
http://wiki.eclipse.org/FAQ_How_do_I_increase_the_heap_size_available_to_Eclipse%3F
http://www.brooksandrus.com/blog/2006/11/23/setting-eclipse-and-java-application-jvm-heap-size-on-mac-os-x/
위의 두 가지 글에 검색됩니다.

위 글들은 두 가지 문제에 대해서 설명을 하고 있는데,
하나는 eclipse 자체를 실행할 때의 OutofMemory 에러에 대한 해결책과
다른 하나는 eclipse 내에서 코딩 중인 프로그램을 실행할 때 jvm에 Xmx 등의 Heap size 관련 변수를 어떻게 넘겨주냐는 것입니다.

1. Eclipse 자체를 실행할 때의 문제
(1)  다음과 같이 eclipes를 실행할 때 argument를 넘겨주는 것입니다.

사용자 삽입 이미지

(2) eclipse.ini파일을 수정합니다.
eclipse.ini는 이클립스 실행파일과 같은 곳에 있으며 제가 같고 있는 파일의 내용은 다음과 같습니다.

-showsplash
org.eclipse.platform
--launcher.XXMaxPermSize
128M
-vmargs
-Xms40m
-Xmx512m

필요한 만큼 수정해주면 될 것 같습니다. Xmx가 512메가로 지정되있군요. 흠흠.

2. Eclipse 내에서 애플리케이션을 실행할 때의 문제
상단 메뉴에서 Run -> Open Run Dialog 를 실행하여 Run Dialog를 여신다음,
다음과 같이 VM arguments에 입력해주시면 됩니다.
간단하군요.
사용자 삽입 이미지



Posted by 나야