2013-09-22 2 views
0

시작하기 전에 코드에 내 의견이 부족하다는 것에 사과드립니다. 나는 현재 OBJ 파일 로더를 만들고있다. (자바에서는.) 내 코드가 작은 파일에 대해 예상대로 작동하지만 파일이 커지면 (예를 들어, 현재 25,958 라인을 가진 obj 파일을로드하려고 시도하고있다.) 전체 시스템이 충돌한다. 최근 C++에서 전체 프로젝트를 마이그레이션하여이 모델을 빠르게로드 할 수있었습니다. 디버거와 함께 프로파일 러를 사용하여 전체 프로세스가 시스템에서 충돌하는 위치를 파악했습니다. 나는 몇 가지 것을 눈치 챘다. 첫째, 그것은 개시 과정에 매달려 있었다. 둘째, 힙이 거의 다 써 버렸습니다. (힙의 약 90 %를 사용했습니다.) 내 코드는 여기에서 찾을 수 있습니다. http://pastebin.com/VjN0pzyi 이 코드를 최적화하는 데 사용할 수있는 방법에 대해 궁금합니다.OBJ 파일 최적화 (3d 모델) java 로딩

답변

0

메모리가 부족하면 모든 것이 느려집니다. 나는 당신이 아마 자동적으로

startChar = line[i].charAt(k); 

에 최적화되지 않습니다

startChar = line[i].toCharArray()[k]; 

같은 기술, 일을 코딩을 개선해야한다 같아요. 어쩌면 문자열을 인턴하는 것은 많은 메모리를 절약 할 수 있습니다. String.intern 또는 Guava Interner을 사용해보십시오.

핫스팟은 간단한 방법을 선호하므로 리팩토링 도구입니다. 코드는 읽기가 어렵고 크기가 주어지면 최적화가 전혀 수행되지 않는다고 생각합니다!

0

나는 이것이 오래된 질문이라는 것을 알고 있지만, 성능 문제에 대해 두 센트를 던지고 싶었습니다. 코드가 느리게 실행될뿐만 아니라 힙의 90 %를 차지한다는 코드가 있습니다. 나는 90 %가 엄청난 과장이라고 말하지만, 여전히 Java 게임 개발에서 가장 큰 결함을 지적하고 있습니다. Java는 구조체와 같은 값 유형을 지원하지 않습니다. 즉, 속도를 높이려면 OOP를 피해야합니다. 왜냐하면 로더에 대한 클래스를 인스턴스화 할 때마다 힙에 할당되기 때문입니다. 그런 다음 GC가 불규칙하게 벗어나서 로더가 생성 한 인스턴스를 남겨 둘 때까지 기다려야합니다. 이제 C# 같은 언어를 의 예제로 사용하여 실제 언어를 만드는 방법. C#은 구조체를 완벽하게 지원합니다. 로더의 모든 클래스를 대체 할 수 있습니다. 면, 그룹, 꼭지점, 보통, 클래스는 값 유형으로 처리됩니다. 스택이 풀면 삭제됩니다. 쓰레기는 생기지 않습니다. 수업을 1 ~ 2 권만 사용해야한다면 최소한 쓰레기가 생성됩니다.

제 생각에는 Java를 게임 개발에 사용하지 마십시오. 나는 C#을 발견하기 전에 수년간 그것을 사용했다. 엄밀히 말하면 내 의견은 여기에 있지만 자바는 끔찍한 언어입니다. 다시는 사용하지 않을 것입니다.

관련 문제