摘录自C#Daniel的话:方法是一种类型定义,因此将其存储在类型对象中,该类型对象是在托管堆上分配的一种特殊类型,位于同一AppDomain中,每种类型都对应一个全局TypeObject。引用类型的每个实例都包含一个指向其直接类型对象的指针,并且每个类型对象也具有一个相似的指针来标识其直接父类型对象。当调用静态方法时,CLR将根据方法调用查找相应的Type Object,然后JIT方法。 JIT之后的方法是本机代码,可以直接运行。然后,这部分代码被加载到内存中。参数被加载到当前的执行栈中,并且原始的执行上下文地址也被记录在执行栈中。该方法开始执行,执行后,将读取执行堆栈中的返回地址,然后CLR使用本机跳转指令跳转到该时间返回以继续执行。调用实例方法时,CLR将根据实例的“类型对象”指针找到对应的“类型对象”,然后JIT方法。 JIT之后的方法是本机代码,可以直接运行。然后,这部分代码被加载到内存中。实例对象和方法参数被加载到当前执行堆栈中(实例对象始终是第一个参数,即arg0,使用ldarg0指令读取该参数),并且原始执行上下文地址也记录在执行堆栈中该方法开始执行,执行后,读取执行堆栈中的返回地址,然后CLR使用本机跳转指令跳转到返回值以继续执行。如果该方法已经是JIT,则不会再次使用JIT。该方法在IL中作为字节流存在,因此它仍然占用内存。然后,JIT方法将驻留在进程的地址空间中,因此它还将在运行时占用内存。注意:如果JIT是及时的PHP编译器,则应仅在访问JIT时才将其加载到内存中,因此静态方法和实例方法是相同的。是什么取决于您的设计,我去SO帮您问,我应该避免在PHP中使用太多的静态方法吗?,外国人说,从OOP的角度来看,您应该避免使用太多的静态方法,此外,这也是曾说过,在这个时代,您不需要过多地关注内存消耗(当然,糟糕的代码还是不好的)。出现了,老外像我一样! ! (可悲的是,PHP在调用之前加载了所有方法,这与.NET不同)
本文来自电脑杂谈,转载请注明本文网址:
http://www.pc-fly.com/a/shoujiruanjian/article-376906-1.html
找个退役船撞它