리치 클라이언트 애플리케이션을 개발 중입니다. 이제는 NetBeans RCP
에서 실행되도록 마이그레이션했습니다. 지금까지 모든 것이 원활하게 작동합니다.Netbeans 서명 된 jar로 인한 리소스 로딩 속도가 느림
최근에 첫 번째 릴리스를 빌드하고 시작하여 10 분이 아닌 1 분이 걸렸습니다. IDE
에서 시작하면 모든 것이 이전만큼 빠릅니다.
내가 본 모든 것을 프로파일 링 한 후에 JPA
에 대한 수천 개의 XML
파일로드가 이전보다 10-20 배 더 걸립니다. 나는 printlns
을 추가했고, 파일 당 1 초 전에 < 대신에 약 50ms가 걸렸습니다. 문제는 서명 된 jar 파일에서만 발생한다는 것을 알았습니다. 서명되지 않은 jar로 정확히 동일한 응용 프로그램을 시작하면 10 초가됩니다. NetBeans
부호가있는 항아리와 통합하지 않고 응용 프로그램을 시작하면 10 초 밖에 걸리지 않습니다.
코드 포인트에서 해당 자원의로드가 전혀 변경되지 않았습니다. 런타임시 차이는 클래스 로딩에서 가장 높습니다. NetBeans는 class loader hierachy을 제공합니다. 컨텍스트 클래스 로더로 설정하려고 시도했지만 성능에는 차이가 없습니다. 또한 메모리 프로파일 러를 확인한 결과 class of classloader은 NetBeans 통합의 유무와 동일하거나 동일하지 않습니다.
프로파일 링을 시도했지만 엉망입니다. 프로파일 러 (JProfiler
)에는 리소스가로드 된 클래스로드 스택 만 표시됩니다. Java의 "-verbose 옵션"조차도 리소스가로드되었음을 보여줍니다.
정확한 클래스 로딩 알고리즘을 모르는 상태에서 다음 부분으로 구성되어 있다고 가정합니다. NetBeans 통합의 유무에 상관없이 서명 한 응용 프로그램의 해당 부분은 동일해야합니다. CA와
- 시험 검사
- 검증 인증서를 verifiing 자원
- 로드 클래스 패스
- 에서 자원을 찾는
- (아마도 HTTP 요청을하지만, 한 번만 (희망))
그 이유는 무엇인지 생각해보십시오.
통합 정보 :
는 이전 응용 프로그램은 여러 개의 창을 처리 한 JFrame
여러 JInternalFrames
을 사용했다. NetBeans로 시작하면 이전 JFrame
을 사용하고 콘텐츠를 JInternalFrame
으로 표시하는 대신 동적으로 생성 된 상위 구성 요소에 표시합니다. 통합의 주된 이유는 NetBeans (Docking, Floating ...)에서 관리하는 창이었습니다.