2013-05-02 15 views
1

패키지에서 짧은 이름을 사용하거나 이름이없는 패키지 (기본 패키지)를 사용하면 실제로 병 크기가 더 작아지는 이유에 대한 많은 정보를 찾을 수 없었습니다.이름없는 패키지 또는 더 작은 패키지 이름을 사용하면 Jar가 더 작아지는 이유는 무엇입니까?

나는 obfuscators를 사용하여 사용되지 않는 클래스를 제거하고 나머지 클래스의 이름을 더 작게 만들었습니다. 그러면 jar 크기가 줄어 듭니다. 그리고 저는 실제로 그것을 시도해 보았습니다. 내 응용 프로그램 중 하나에서 무명 패키지를 사용하여 파일 크기가 1.2 % 감소했습니다. 그러나 나는 왜 이런 일이 일어나는가에 대한 어떤 신뢰할만한 정보도 찾을 수 없었다. 나는 긴 이름이 소개하는 오버 헤드 때문에 그것이 있다고 추측 할 수 있습니다. 여전히 이것을 정당화하는 방법에 대한 조언을 주시면 감사하겠습니다. http://carfield.com.hk/document/java/articles/Efficient_MIDP_Programming.pdf

정말하지만 이유를 설명하지 않습니다

처음에 나는이 문서에서 아이디어를 얻었다.

+0

에서 볼 수 있듯이? –

+2

글쎄, 꽤 간단합니다. 실제로 클래스에 대한 모든 참조는 완전한 이름 (예 : package + name)을 사용하여 수행됩니다. 각 클래스 이름은 클래스 파일마다 한 번만 저장되지만 더 짧은 이름 (즉, 데이터 바이트 수가 적음)이 많은 클래스에 추가됩니다. 'x.a'는 3 바이트이고, com.mycompany.product.client.android.MyFancyViewComponent'는 ... more (너무 게으르다.). –

+0

@dystroy 오버 헤드가 추가되는 위치를 잘 모르겠습니다. @ JoachimSauer 감사합니다.이 com.mycompany.product.client.android.MyFancyViewComponent는 모든 단일 개체에서 발생합니다. –

답변

1

Jar 파일은 다른 확장자와 META-INF라는 특수 (선택 사항) 폴더가있는 Zip 파일입니다. 각 파일 또는 폴더에는 헤더가 연결되어 있습니다. 헤더가 약간의 공간을 차지하기 때문에 더 적은 파일을 보관하는 것이 좋지만 이미 최소한으로 가져간 파일은 루트 디렉토리에 보관하십시오.

MIDlet 배포의 경우 jar 파일에는 META-INF 폴더가 있어야하므로 공간을 최대한 활용하려면 jar 파일에이 폴더 만 있어야합니다. MIDlet 및 다른 모든 클래스는 기본 패키지에 있어야합니다. 리소스 파일과 동일하게 파일 루트에 모든 파일을 보관합니다.

당신이 * * "오버 헤드 긴 이름을 소개합니다"하지 않을 경우 찾는거야 http://smallandadaptive.blogspot.com.br/2008/09/keep-it-flat.html