有关变量空间开辟 ,垃圾回收怎么回事? 1.不知你问什么。两个对象,两份变量。2.两个对象,两份函数(除非是static的)。3.垃圾收集时机是由实现者来调用的,不定时(由算法来决定),除非你自己调用system.gc. 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 height,weight都是static的。不管你创建多少个人物,这两个变量都只存一处地方。这里不存在指针问题,也没有指针。speak()有两个,连里面的东西都有两个。至于garbage collector,不好说。不同jvm有不同的机制。一般在发现memory不够的时候,自己(不是你自己哦)去执行,也可以由你自己通过finalize()去建议执行。 1. 每次使用new关键字时,jvm就会从内存中一个叫做heap的地方分配出一块内存,并将其地址返回, 并指派给所声明的变量。代码中连续使用了两个new关键字,当然是分配出了两块内存,reference zhubajie 指向一块,而 reference lin 指向另一块。(附:Java中用术语reference 而不用术语“指针”) 2. 程序运行时内存划分为代码区(code area)和数据区(data area),而数据区又分为静态存储区(static area),栈(stack)和堆(heap)。当一个类被载入内存时,它的代码就被放到了代码区,只有一份。而当你调用 new XXX() 产生一个XXX类型的对象时,只从heap上给类中的数据成员(fields)分配空间,而不给类中的成员函数(methods)分配空间。对象里面只包含数据成员,不包含成员函数,你应该把对象和成员函数分开对待,并不是说产生一个对象,就往这个对象里塞入一份成员函数,对象只是和成员函数存在这一种关联而已。至于在调用函数过程当中所涉及的调用栈的问题,并不是三言两语可以说清楚,建议找本编译原理的书看一看,一切自然明朗。 3. 垃圾回收的发生是不确定的,当jvm认为有需要时它才调用垃圾收集器。比如,用new XXX()产生一个对象: XXX oneObject = new XXX();然后将oneObject置空: oneObject = null;这时,由new XXX()所产生的对象已经没有任何reference指向它了,也就是说它可以被垃圾收集器收集了,但并不保证垃圾收集马上发生,该对象只是符合被收集的条件罢了。 hao ,thanks!and some other question i will ask you.give me seconds to research it. 我建议楼主去看看C++代码后的汇编,那样会很清楚的,函数只有一份,里面的局部变量是跟堆栈相关的,所以不存在几份的问题静态变量跟全局变量一样(java中没有)都是在程序静态区中的,就是说在exe中的一个节里面有空间,只有一份,垃圾回收嘛不是我们的事了,它会用很好的算法在我们不需要的时候,系统发觉内存不够的时候收集的, 关于java io奇怪问题 使用1-9 这9 个数字填充一个3X3 的数组,要求输出所有可能的情况。 有高手来一下,可能是个简单的问题,可我看不出来 用最简单的方法实现这个问题 大家看这几道题选什么?谢谢! 高分请教一个向上转型的问题 swing组件高手请进,JPopupMenu问题 关于applet的一个问题?求救! java小问题 有关数据类型的转换的问题 在看JAVA2核心技术(第6版)的上册(机械工业出版社)的朋友请进来 请教关于函数的默认值基本语法问题:
比如,用new XXX()产生一个对象:
XXX oneObject = new XXX();
然后将oneObject置空:
oneObject = null;
这时,由new XXX()所产生的对象已经没有任何reference指向它了,也就是说它可以被垃圾收集器收集了,但并不保证垃圾收集马上发生,该对象只是符合被收集的条件罢了。
函数只有一份,里面的局部变量是跟堆栈相关的,所以不存在几份的问题
静态变量跟全局变量一样(java中没有)都是在程序静态区中的,就是说在exe中的一个节里面有空间,只有一份,
垃圾回收嘛不是我们的事了,它会用很好的算法在我们不需要的时候,系统发觉内存不够的时候收集的,