① 类是一个数据类型,类存在内存中的什么地方
类在定义的时候是没有为它分配空间的,仅仅将类所定义的数据结构信息保存下来;因为类也是一种数据类型,就像int,我们没有定义该类型的变量的时候它是不会占用内存的。当我们声明一个类的对象(或其引用)的时候,计算机才会分配存储空间出来。
② C++类编译好后,成员变量存储在什么位置代码区
内存被他为栈区和堆区,程序的全局变量和局部变量这些数据是存放在栈中,因为一个子程序或函数调用结束后,函数或子程序使用的内存全被回收,这人实现的方法就是栈。函数在调用编译器会在栈中分配足够的空间,然后将数据全部压入栈中,等调用结束会自动清空栈,这样函数所使用的内存就消失了。
但我们知道动态内存是可以夸函数使用的,这是因为动态内存是分配在堆中,不受栈这个条件的限制,所以动态内存需要我们自己去释放,如果我们自己不释放就会造成内存泄漏,但操作系统会在程序结束后回收程序使用的所有内存。
至于代码区,数据区,栈区,这些在8086中是很重要的,这是因为8086CPU的问题。现在的32位CPU和16位CPU在对这些区的定义不一样。32位CPU可以不用去管这些区,但在进行32汇编时还是要需要,不同区会有不同的属性,但对程序的整体影响不大。
建议你去看罗云彬的win32汇编,这本书对这些说得很清楚,只是书有点厚,难懂。
③ java中 static变量和方法到底是存在内存什么区域
JVM内存总体一共分为了
4个部分(stack segment、heap segment、code segment、data segment)
当我们在程序中,申明一个局部变量的时候,此变量就存放在了 stack segment(栈)当中;
当new 一个对象的时候,此对象放在了heap segment(堆)当中;
而static 的变量或者字符串常量 则存在在 data segment(数据区)中;
那么类中方法的话,是存在在 code segment(代码区)中了。
④ 在java里一个方法内部定义的变量比如说方法的参数还有方法体内定义的变量是不是放在栈内存中
是的,在栈中。如果是类成员变量放在堆中
⑤ java语言中,类的成员变量分配在哪个内存区
成员变量有静态和非静态,静态成员变量是共享数据,在共享区中,也叫方法区中。
非静态成员变量在堆内存中,作用于整个类中。
而局部变量在栈内存中,定义在函数中,函数结束内存释放。
⑥ JAVA中类中的方法存储在什么地方
类的实例方法在内存中是只有一份,不过肯定不会是第一个对象中,如果是第一个对象的话,那么当第一个对象被销毁的时候,那么后面的对象就永远无法调用了...
类的实例方法存在一个专门的区叫方法区,事实上类刚装载的时候就被装载好了,不过它们在"睡眠",只是这些方法必须当有对象产生的时候才会"苏醒".(比如,一个输出类的成员变量的方法,如果连对象都没有,何来的输出成员变量).所以,方法在装载的时候就有了,但是不可用,因为它没有指象任何一个对象。
⑦ Java的类成员变量和类成员方法是不是可以随便放到哪里的
根据面向对象的思维,一个方法必须放在其对应类,其他的类如果调用该方法,应该用自己实例化的对象在外部函数或者主函数去调用。
根据你意思:
public static Vector cards = new Vector();
这句话应该写在外部类中,这样所有内部类都认识cards了!
public static void post()
这句话是你定义的一个方法,在HelpDialog这个类里!因此要使用这个方法你必须在用到post()
方法的类里继承HelpDialog这个父类,并且把post()方法实例化 ( public static void post(){}
)
⑧ java的成员变量是存在于哪里如果是堆中该如何回收呢,能用system.gc吗
Java成员变量存储在堆中:创建出来的对象只包含属于各自的成员变量,并不包含成员方法。同一个类对象拥有各自的成员变量,存储在各自的堆中,但是他们共享该类的方法,并不是创建一个对象就把成员变量复制一次。
当一个对象(包括对象中的成员变量)没有对象引用指向原先分配给某个对象的内存时,该内存便成为垃圾。JVM的一个系统级线程会自动释放该内存块,可以使用system.gc
⑨ JAVA中的类成员变量是存在堆还是栈里面呀
类的成员变量都在堆上,只有方法里面定义的基础变量,在方法里面定义的引用
其他对象的引用放在栈上(这个时候被引用的对象和它的成员变量还是在堆上)
也就是说,线程上下文的东西在栈上,其他统统在堆上。