详细分析Android中实现Zygote的源码

2020-01-06 13:36:52丽君
  • char jniOptsBuf[sizeof("-Xjniopts:")-1 + PROPERTY_VALUE_MAX];  char heapstartsizeOptsBuf[sizeof("-Xms")-1 + PROPERTY_VALUE_MAX]; 
  • char heapsizeOptsBuf[sizeof("-Xms")-1 + PROPERTY_VALUE_MAX];  char heapgrowthlimitOptsBuf[sizeof("-XX:HeapGrowthLimit=")-1 + PROPERTY_VALUE_MAX]; 
  • char heapminfreeOptsBuf[sizeof("-XX:HeapMinFree=")-1 + PROPERTY_VALUE_MAX];  char heapmaxfreeOptsBuf[sizeof("-XX:HeapMaxFree=")-1 + PROPERTY_VALUE_MAX]; 
  • char heaptargetutilizationOptsBuf[sizeof("-XX:HeapTargetUtilization=")-1 + PROPERTY_VALUE_MAX];  char jitcodecachesizeOptsBuf[sizeof("-Xjitcodecachesize:")-1 + PROPERTY_VALUE_MAX]; 
  • char extraOptsBuf[PROPERTY_VALUE_MAX];  char* stackTraceFile = NULL; 
  • bool checkJni = false;  bool checkDexSum = false; 
  • bool logStdio = false;  enum { 
  • KEMDefault,  KEMIntPortable, 
  • KEMIntFast,  KEMJitCompiler, 
  • } executionMode = KEMDefault;   
  • /**  * 这段代码是用了设置JNI_check选项的。JNI_check指的是Native层调用JNI函数时,系统所做的一些检查动作。 
  • * 这个选项虽然能增加可靠性,但是还有一些副作用:  * 1. 因为检查工作比较耗时,所以会影响系统运行速度。 
  • * 2. 有些检查工作比较耗时,一旦出错,整个进程会abort。  * 所以,JNI_check选项一般只在eng版本设置。 
  • */  property_get("dalvik.vm.checkjni", propBuf, ""); 
  • if (strcmp(propBuf, "true") == 0) {  checkJni = true; 
  • } else if (strcmp(propBuf, "false") != 0) {  property_get("ro.kernel.android.checkjni", propBuf, ""); 
  • if (propBuf[0] == '1') {  checkJni = true; 
  • }  } 
  •   property_get("dalvik.vm.execution-mode", propBuf, ""); 
  • if (strcmp(propBuf, "int:portable") == 0) {  executionMode = KEMIntPortable; 
  • } else if (strcmp(propBuf, "int:fast") == 0) {  executionMode = KEMIntFast;