社区
C#
帖子详情
当new了一个class,我们的内存发生了哪些变化?
AKULAKK
2007-09-27 02:47:24
如果class内容成员很多public private static 一大堆,操作系统是否在new的时候就为每个成员分配了内存入口?
...全文
282
21
打赏
收藏
当new了一个class,我们的内存发生了哪些变化?
如果class内容成员很多public private static 一大堆,操作系统是否在new的时候就为每个成员分配了内存入口?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
21 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
kellynt
2007-09-29
打赏
举报
回复
1.a和b是两上不同的对象,之后的b和前面的a没有关系,当然是分别分配空间
2.如果方法是非静态的,用到的时候才会分配空间
AKULAKK
2007-09-29
打赏
举报
回复
回楼上的:
1.就像我前面所说的 a b 都是建立与DemoClass的对象 那么前后分别为a 和 b分配了heap空间么?抑或是后面的b沿用前面a所使用过的heap空间?
2.比如DemoClass里有成员 something1() something2() something3()
在语句 DemoClass a = new DemoClass();
a。something1();
在这个过程中会不会为something2() something3()这些没有使用过的成员对象分配heap空间呢?
kellynt
2007-09-29
打赏
举报
回复
非静态的DemoClass只是一个对象的抽象,a和b才是具体的对象
bumm
2007-09-29
打赏
举报
回复
定
AKULAKK
2007-09-29
打赏
举报
回复
....
kkun_3yue3
2007-09-29
打赏
举报
回复
楼主抢了我的注册名...还以为我发的贴呢...
AKULAKK
2007-09-28
打赏
举报
回复
但是是相同的对象啊 都是DemoClass这个类
virusswb
2007-09-27
打赏
举报
回复
不同的对象,当然要不同的内存了,new一个对象的时候做了两件事情,第一,在堆栈中存放地址的引用;第二,在托管堆中分配内存,存放对象
AKULAKK
2007-09-27
打赏
举报
回复
杂不能修改回帖啊?
【除非是静态类...系统不会为DemoClass分配内存...它只会为a和b分配内存...而a和b并没有直接的关系...】
不好意思 上面我思路有点混乱
楼上的意思是 a = new DemoClass() 分配了一段内存空间,然后 b = new DemoClass() 又重新分配了一段内存空间?2段?那不是冗余了?
vrhero
2007-09-27
打赏
举报
回复
我无语了...lz好好看看书吧...
AKULAKK
2007-09-27
打赏
举报
回复
【除非是静态类...系统不会为DemoClass分配内存...它只会为a和b分配内存...而a和b并没有直接的关系...】
不为DemoClass分配内存 只会为a和b分配内存 ? 此话当真?
AKULAKK
2007-09-27
打赏
举报
回复
DemoClass a = new DemoClass();
都new了DemoClass
那么DemoClass不就是个实例了么?
我的意思不是管GC。。。我的意思是有概率在GC之前执行的这种情况。。。
vrhero
2007-09-27
打赏
举报
回复
除非是静态类...系统不会为DemoClass分配内存...它只会为a和b分配内存...而a和b并没有直接的关系...
要搞清楚类和实例的区别...
vrhero
2007-09-27
打赏
举报
回复
显然 method1执行完之后 heap 中已经为整个DemoClass分配了内存空间
那么我如果很快又执行method2()(也就是说抢在GC之前执行)那么在heap中会不会又为DemoClass重新分配空间呢?疑惑是使用之前method1()创建好了的那段DemoClass内存空间呢?
----------------------------
概念错误...此DemoClass非彼DemoClass...只有实例才分配内存...
GC是你管不了的...它的地盘它做主...
redflanker
2007-09-27
打赏
举报
回复
抢在GC之前?=。=!
AKULAKK
2007-09-27
打赏
举报
回复
参考2楼的图示,new 的这个class是放在heap中,那么就是说占用了内存的哦。。。明白了。
第二个问题:
程序中有2行代码
public void method1(){
DemoClass a = new DemoClass();
a.somejob();
}
public void method2(){
DemoClass b = new DemoClass();
b.somejob();
}
然后我们执行
method1();
method2();
显然 method1执行完之后 heap 中已经为整个DemoClass分配了内存空间
那么我如果很快又执行method2()(也就是说抢在GC之前执行)那么在heap中会不会又为DemoClass重新分配空间呢?疑惑是使用之前method1()创建好了的那段DemoClass内存空间呢?
我想应该是第二种,是么?
ahone
2007-09-27
打赏
举报
回复
我记得.netframe框架程序设计里有详细说明
vrhero
2007-09-27
打赏
举报
回复
操作系统是否在new的时候就为每个成员分配了内存入口?
-----------------------
这是你的问题...标题的问题太泛了...
AKULAKK
2007-09-27
打赏
举报
回复
re1楼:看标题
楼上的这个资料很形象嘛 收藏了
bumm
2007-09-27
打赏
举报
回复
看看下面的文章你就会全清楚了
http://agassi001.cnblogs.com/archive/2006/05/10/396574.html
加载更多回复(1)
彻底搞懂python元类meta
class
彻底了解python元类meta
class
:如何用type创建类什么是元类及元类如何定义案例:wtforms源码分析案例:元类实现单例模式
Java 在
new
一个
新对象的时候
内存
中
发生
了什么
Java 在
new
一个
新对象的时候
内存
中
发生
了什么 java在
new
一个
对象的时候,是经过了以下的步骤的 ①首先是JVM虚拟机编译对象所在的
class
文件,将
class
文件放入方法区中 ②JVM虚拟机读取main方法的入口,将main方法入栈,执行创建对象的代码,如Person p =
new
Person(); ③在main方法所在的栈
内存
中分配引用 p ④在堆中分配
内存
,将创建的Person对象放入堆
内存
⑤将栈中的引用p, 指向Person对象 以上就是创建
一个
对象是,
内存
发生
了什么的具体介绍,接
我们简单的
new
了
一个
对象,JVM都做了哪些贡献?
我们简单的
new
了
一个
对象,JVM都为我们做了哪些贡献?
C++——
new
和delete之后
发生
了什么?
众所周知,如果我们使用
new
向系统申请了
内存
,我们应该使用指针指向这一块
内存
,俾能我们使用结束后,通过delete该指针释放此
内存
资源。如果理解只达到这种程度,在
内存
管理稍微复杂一点时便一定会束手无策。总有一些事情比其他事情更基本一点,现在我来谈谈当我们
new
和delete之后到底
发生
了什么。C++中的五种
内存
在C++中
内存
分为五个区:堆、栈、自由存储区、全局/静态存储区和常量存储区。 堆区:用户使
new
一个
对象到底占了多少
内存
一.对象的创建 当Java虚拟机遇到一条字节码
new
指令时,首先将去检查这个指令的参数是否能在常量池中定位到
一个
类的符号引用,并且检查这个符号引用代表的类是否已被加载、解析和初始化过。如果没有,那必须先执行相应的类加载过程。 1.空间分配 指针碰撞 假设Java堆中
内存
是绝对规整的,所有被使用过的
内存
都被放在一 边,空闲的
内存
被放在另一边,中间放着
一个
指针作为分界点的指示器,那所分配
内存
就仅仅是把那 个指针向空闲空间方向挪动一段与对象大小相等的距离(Serial、Par
New
使用) 空间列表 但如果Jav
C#
110,533
社区成员
642,574
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章