社区
C#
帖子详情
当new了一个class,我们的内存发生了哪些变化?
AKULAKK
2007-09-27 02:47:24
如果class内容成员很多public private static 一大堆,操作系统是否在new的时候就为每个成员分配了内存入口?
...全文
316
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)
Java 在
new
一个
新对象的时候
内存
中
发生
了什么
本文详细解析Java中
new
操作符创建对象的过程,包括JVM编译
class
文件、执行创建代码、分配引用与对象
内存
,以及引用指向对象的全过程。同时,深入探讨堆、栈、方法区等
内存
区域的作用与管理机制。
Java中
new
一个
对象
内存
区域如何
变化
?顺序是什么?
本文详细解释了Java中
new
一个
对象时,从加载
Class
文件到分配
内存
的过程,包括类加载到方法区、栈中分配引用和堆中分配对象
内存
的顺序。
new
一个
对象到底占了多少
内存
本文详细探讨了Java对象的创建过程,包括空间分配的指针碰撞与空闲列表策略,以及TLAB的使用。此外,介绍了对象的
内存
布局,如对象头、实例数据和对齐填充。同时,讲解了对象的访问定位方式、
内存
分配与回收策略,如Minor GC、对象年龄判定和空间分配担保。最后,提到了对象
内存
回收的可达性分析算法以及Java的四种引用类型。
频繁的
new
同
一个
类型对象_别再问我
new
字符串创建了几个对象了!我来证明给你看!...
探讨
new
String创建对象的数量,解析字符串常量池的作用及其在JDK不同版本中的
变化
,揭秘
new
String对象创建背后的真相。
java
new
对象时 在
内存
中的流程_java创建
一个
对象时,
内存
中
发生
了什么
本文围绕Java面向对象编程展开,介绍了封装、继承、多态特性。阐述了对象在
内存
中的创建流程,分析了this和static关键字的用法及特点。还讲解了继承中的构造方法调用、方法重写,以及多态、抽象类、接口等概念,并比较了抽象类与接口的异同。
C#
111,129
社区成员
642,540
社区内容
发帖
与我相关
我的任务
C#
.NET技术 C#
复制链接
扫一扫
分享
社区描述
.NET技术 C#
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
让您成为最强悍的C#开发者
试试用AI创作助手写篇文章吧
+ 用AI写文章