日期:2014-05-20  浏览次数:20888 次

几个疑问
请大虾们指点,
1.类的静态变量,字符数据池,这些数据放到哪?是放到数据段吗?
2.类被加载加载到代码段吗?那么一旦类被加载后是不是一直存在于代码段,还是等CPU执行
完就被清除,等到下次用时,再被载入,
3.代码段使用来放程序的源代码吧,如果是,那代码段放多少源代码?
4.cpu在处理写入文件的指令(入write())时,是如何处理的?cpu如何实现控制作用?
5.变量名是写给人看的,那么计算机要找到这个变量是不是在内存中有个“变量名=地址”这种映射关系?


------解决方案--------------------
1.
JAVA内存划分为堆区和栈区.两部分,栈内存:为基本类型变量 和 对象的引用变量分配空间;堆内存:存放由new创建的对象和数组;静态变量放在栈内存中。孙卫琴老师的解释是,静态放在方法区中,供所有实例方法调用,感觉她说的方法区就是栈的意思。

2.
不知道有没有代码段这个概念,还是楼主自创的,建议去看看类的生命周期,一般类在调用之前可能会被类加载器预加载到堆区,如果首次被调用,对类进行初始化,然后将其存放在栈区里,同时在堆区创建一个对象


3.
你这个代码段是什么意思呀?是指class文件吗?不明白你关心这个干什么?难道你想把所有代码写在一个类里吗?


4.JAVA中处理文件的读写一般是通过I/O系统来实现的,将所有的数据组成一个数据序列,称之为流

5.
一般声明一个变量是在内存中开辟两个空间,一个用来存放变量名以及值的地址,另一个就是具体值的,基本上可以理解为你说的一对一的映射

------解决方案--------------------
从纯理论上说,因为往外设传数据的调用也是封装过的,因此你一次写入1000个字节,相当于使用了一个缓冲区,这个缓冲区显然至少1000个字节。如果你真的每字节一个调用……老天保佑你的整机系统够快……

java的类和c++是不同的,它的类信息也是一个对象,存在于载入它的那个类载入器的类列表中。不过相同的是,一个类有两大类成员:变量和方法。
变量存在于实例所在的空间——也就是new操作符为实例在堆上分配的空间中,而方法存在于方法区,实例所在的空间中有一个方法指针。
根据沙发所说的来看,静态成员变量存在于方法区,这和C++也是一样的;静态成员方法也存在于方法区,静态成员和实例成员的区别就是实例中不存在指向这些静态成员的指针,这“指针”存在于编译前的类信息中,编译后实际就和全域公有变量、方法没有区别了(java中不存在全域公有这个概念,所有方法、变量都应该属于一个类或者方法)。
实例方法中可以引用到的this,实际就是编译器在方法调用时加入的一个指向实例的指针。