非静态类ClassA中有一个static方法A1,非静态类ClassB中有一个非static方法B1,public class ClassA
{
public static A1()
{
ClassB b=new ClassB();
b.B1();
}
}问题如下:
1、不调用ClaaA.A1()之前,A1是否占用了内存?
2、调用到ClaaA.A1()后,A1是否占用了内存?
3、如果占用了内存,什么情况下回收内存,是不是在程序结束时,才回收内存?
{
public static A1()
{
ClassB b=new ClassB();
b.B1();
}
}问题如下:
1、不调用ClaaA.A1()之前,A1是否占用了内存?
2、调用到ClaaA.A1()后,A1是否占用了内存?
3、如果占用了内存,什么情况下回收内存,是不是在程序结束时,才回收内存?
解决方案 »
- DataSet中的同一个表,第二次被填充的时候,原先被填充的数据是不是就丢失了?
- 请教SQLHelper中的一些问题,急!!!!!
- (狂散200)是程序员不得不来...(我的不能给么多,一定补上)
- 如何把Dotnetfx制作到安装包里,请指教?
- C#中的问题
- 怎么将一些文本存成一个htm的文件并作为邮件的附件发送??急啊!!!
- 新手请教:c# c/s结构开发一个聊天工具,服务器端该怎么设计啊,步骤是什么,高手指教
- 那位知道Informix 和.Net的问题=====高分求教
- c#初学者的几个问题!先答先得分,答得好可加分
- VS2017,怎么设置成这样:关闭启动web调试后自动打开的浏览器不退出调试
- C#异步调用 WinForm进度条在执行时同时执行窗体中的用户控件中的方法
- C# 音频转换
4、调用后A1()后的,A1中的ClassB被实例化,b什么情况下回收内存?
lz其实没有说变量——或者对象,是说的A1方法。呵呵!
程序结束,是指整个程序结束,还是指一部分?什么情况下程序才会结束呢?如果不重启IIS,有什么方法可以让程序结束不?
当闭当前进程。。IIS如果不重启你可以针对某个网站停止然后再启动,如果配置了应用程序池的,可以直接回收应用程序池,或者结束w3wp.exe
实例类型,实例化之后,就已经占用内存了。
但是实例化,内存不会分配空间给你实例化的对象。
静态变量,比如 static int x =3,在编译的时候,x 这个变量名会被编译到 pe文件里去,运行的时候,通过文件偏移和内存偏移,相对映射,也就是说,编译的时候变量x已经以一个基址+内存偏移的方式存储了。但是静态变量开始初始化之前,地址是相对固定了,但是地址里面的值是无意义,也就是调用之前是存储的0。当你程序有方法第一次要调用的时候,需要调用该静态变量的时候,就初始化了,该变量就会一直存在内存中(这个有变量值个变量地址的概念)但是这个初始化的过程是在运行时的,其实早在编译时,你的静态方法和变量,已经有一个固定的偏移地址,只是没有值而已。这就是为什么实例方法,变量可以调用静态方法和变量的原因。
但是实力方法和变量,他的内存分配是在运行时的,所以地址无法固定,其实就是内存的偏移的固定,也就是说变量地址是动态的。所以同理,实例方法无法调用静态方法和静态变量的原因。
这个不得不说下常量,常量大家都知道定义的时候是必须赋值的,因为常量不是变量,不能再运行时去修改它,所以常量在编译时已经把上面提到的内存偏移地址和固定的具体存储的值也已经固定了。
其实楼主有兴趣去了解下,汇编里面函数调用如果利用堆栈平衡的,和PE文件格式。C里面的指针的概念,很多东西就可以帮助你去理解,以上的概念,我也是根据对这套知识理解,然后总结出来的。并一定正确,经供参考,估计八九不离十。有时间深入研究下.net pe的元数据才能给出更准确的答案。
打错了很多字,从新来过实例类型,实例化之后,就已经占用内存了。
但是在类实例化之前,内存不会分配空间给你实例化的对象。
静态变量,比如 static int x =3,在编译的时候,x 这个变量名会被编译到 pe文件里去,运行的时候,通过文件偏移和内存偏移,相对映射,也就是说,编译的时候变量x已经以一个基址+内存偏移的方式存储了。但是静态变量开始初始化之前,地址是相对固定了,但是地址里面的值是无意义,也就是调用之前是存储的0。当你程序有方法第一次要调用的时候,需要调用该静态变量的时候,就初始化了,该变量就会一直存在内存中(这个有变量值个变量地址的概念)但是这个初始化的过程是在运行时的,其实早在编译时,你的静态方法和变量,已经有一个固定的偏移地址,只是没有值而已。这就是为什么实例方法可以调用静态方法和变量的原因。但是实力方法和变量,他的内存分配是在运行时的,所以地址无法固定,其实就是内存的偏移的固定,也就是说变量地址是动态的。所以同理,静态方法无法调用实例方法和变量的原因。这个不得不说下常量,常量大家都知道定义的时候是必须赋值的,因为常量不是变量,他是在编译时就固定了。不能再运行时去修改它,所以常量在编译时已经把上面提到的内存偏移地址和固定的具体存储的值也已经固定了。其实楼主有兴趣去了解下,汇编里面函数调用如果利用堆栈平衡的,和PE文件格式。C里面的指针的概念,很多东西就可以帮助你去理解,以上的概念,我也是根据对这套知识理解,然后总结出来的。并一定正确,经供参考,估计八九不离十。有时间深入研究下.net pe的元数据才能给出更准确的答案。