2013-06-08 3 views
3

는이 사이트에 새로운 오전 CPU를 사용하기 때문에 나는 늘 여기에 어떤 불문율을 위반 희망입니다 ... ;-)프로그램은 넷빈즈에 따라 실행하지만 진행을하지 않으며 java.exe를 거의

I을 먼저 최소 스패닝 트리를 생성하고이를 확장하여 오일러 투어를 생성 한 다음 해당 오일러 투어에서 해밀턴이 생성 된 원을 얻습니다.

이 프로그램은 최대 약 3700 개의 정점 그래프에 대해 완벽하게 작동하지만 (내 랩톱에서 약 3 시간이 걸리지 만) ~ 4300 개의 정점 그래프를 풀려고 할 때 문제가있는 것 같습니다. .

MST는 언제나처럼 만들어 지지만, 오일러 투어를 만드는 동안 어느 시점에서 CPU는 내 프로그램에서 "intrest"를 잃는 것처럼 보입니다. Windows 작업 관리자에 따르면 java.exe 프로세스는 작은 그래프를 해결하는 동안 CPU의 약 25 % (4 코어 중 하나)에서 사용하지만 현재는 0-1 %입니다. Netbeans IDE에 따르면 프로그램은 여전히 ​​실행 중이지만이 정보를 어떻게 만들지는 확실하지 않습니다.

짐작할 수없는 OutOfMemory-Errors (힙 공간)를 극복해야만하는 것이 적절할 수 있습니다.이 무수한 힘의 조합으로 프로젝트를 4090MB 힙 (4GB RAM)으로 만들 수있었습니다. 여기에 관련이없는 코드가 변경됩니다.

누군가가 내게 어떤 문제가 될지도 모른다는 힌트를 줄 수 있다면 나는 꽤 행복 할 것이다.

감사합니다, 필

+0

프로그램을 실행하는 동안 계속 기록 중이십니까? 아마도 somepoint에서 멈추고 그냥 실행중인 것 같습니다 – Zavior

+1

스레드 덤프를 가져오고 어딘가에 교착 상태가있을 수 있습니다. – fge

답변

0

당신이 당신의 프로그램 내에서 완료되지 않은 스레드를 가지고 있기 때문에이 아마 일어나고있다.

스레드가 잠자기 상태로 전송되어 절대로 깨우지 않았거나 교착 상태 일 수 있으므로 스레드가 작동 중일 수 있습니다. 스레드가 여전히 실행 중인지 확인하려면 visualvm을 사용하고 프로그램의 어느 지점에서 높은 CPU 사용량에서 낮은 CPU 사용량으로 이동하는지, 일부 로깅을 확인하면 정확한 문제점을 파악하는 데 도움이 될 것입니다.

관련 문제