스터디참석자 : 박지훈, 전형민, 임기영, 구자관, 윤동열, 송형주

 

- 드라이빙 : 박지훈

- 세팅 : 전형민

 

zygoteinit.java를 위해 분석을 위해 필요한 지식


1. 자바 문법 : 당연한거죠??
  (자바 잘 모르시는 분은 미리 공부를 해놓으시는게 좋을듯 싶습니다.)

  저도 지금 자바책 공부중입니다. ^^

 

2. JNI : Zygoteinit.java 소스 파일이 Dalvik VM과 맞물려 동작하고 있기 때문에 

    local reference 개념 이해 필요


3. 안드로이드 API 
    http://developer.android.com/reference/packages.html

 

 

- /frameworks/base/preloaded-classes :  안드로이드에서 미리 로드되야 하는 클래스 모음


* preloaded resources에 대한 정보

   /frameworks/base/core/res/res/values/arrays.xml

   /frameworks/base/core/res/res/drawable/ : 시스템 리소스에 대한 정보

 

의문점

1. ZygoteInit.java의 prelaodClasses() 함수에서 아래 굵은 줄의 ZygoteInit.class의 의미??

 

    private static void preloadClasses() {
        final VMRuntime runtime = VMRuntime.getRuntime();
        InputStream is = ZygoteInit.class.getClassLoader().getResourceAsStream(PRELOADED_CLASSES);

       ...

 

우선 ZygoteInit.class의 의미가 중요할 것 같습니다.


모든 자바 클래스는 Class 클래스의 static 멤버 필드로 class를 가지고 있는 것 같습니다.

(실제로 이클립스를 통해 테스트해봤습니다.)


그러므로, ZygoteInit.class 는 Class 객체를 가리킴.

[참고] Class 클래스 : http://developer.android.com/reference/java/lang/Class.html


Class 객체는 getClassLoader() 메소드를 가지고 있습니다.

[참고] http://developer.android.com/reference/java/lang/Class.html#getClassLoader%28%29


(송형주) 혹시 다른 의견있으시면 알려주세요


 

2. ZygoteInit.java의 prelaodClasses() 함수에서
    setEffectiveGroup, setEffectiveUser 함수에서 사용된 setregid, setreuid 시스템 콜의 기능은?

 

            // Drop root perms while running static initializers.
            setEffectiveGroup(UNPRIVILEGED_GID);
            setEffectiveUser(UNPRIVILEGED_UID);

 


3. ZygoteInit.java의 prelaodClasses() 함수에서

Class.forName(line); 라인의 역할?

 

                    try {
                        if (Config.LOGV) {
                            Log.v(TAG, "Preloading " + line + "...");
                        }
                        Class.forName(line);
                        if (Debug.getGlobalAllocSize() > PRELOAD_GC_THRESHOLD) {
                            if (Config.LOGV) {
                                Log.v(TAG,
                                    " GC at " + Debug.getGlobalAllocSize());
                            }
                            runtime.gcSoftReferences();
                            runtime.runFinalizationSync();
                            Debug.resetGlobalAllocSize();
                        }
                        count++;
                    }

일단 회사라 대충 정리했습니다.