几个疑问

adsds 2007-06-13 10:49:21
请大虾们指点,
1.类的静态变量,字符数据池,这些数据放到哪?是放到数据段吗?
2.类被加载加载到代码段吗?那么一旦类被加载后是不是一直存在于代码段,还是等CPU执行
完就被清除,等到下次用时,再被载入,
3.代码段使用来放程序的源代码吧,如果是,那代码段放多少源代码?
4.cpu在处理写入文件的指令(入write())时,是如何处理的?cpu如何实现控制作用?
5.变量名是写给人看的,那么计算机要找到这个变量是不是在内存中有个“变量名=地址”这种映射关系?
...全文
275 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
kender1129 2007-06-15
  • 打赏
  • 举报
回复
去看下操作系统概念这本书就知道是怎么回事了。。。
adsds 2007-06-15
  • 打赏
  • 举报
回复
缓冲区的问题解决,不用回答
adsds 2007-06-15
  • 打赏
  • 举报
回复
好像得看JVM规范吧,不过我没看懂,所以问问
tomkai 2007-06-14
  • 打赏
  • 举报
回复
1.
JAVA内存划分为堆区和栈区.两部分,栈内存:为基本类型变量 和 对象的引用变量分配空间;堆内存:存放由new创建的对象和数组;静态变量放在栈内存中。孙卫琴老师的解释是,静态放在方法区中,供所有实例方法调用,感觉她说的方法区就是栈的意思。

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


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


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

5.
一般声明一个变量是在内存中开辟两个空间,一个用来存放变量名以及值的地址,另一个就是具体值的,基本上可以理解为你说的一对一的映射
adsds 2007-06-14
  • 打赏
  • 举报
回复
缓冲区的内容被cpu一次写入硬盘,是不是cpu只要访问硬盘一次,这些缓冲区中的数据会按一个字节一个字节的顺序,一个个自动写入到内存而不需要cpu控制?这里面的关系还不明白。
adsds 2007-06-14
  • 打赏
  • 举报
回复
方法存在于方法区,那一个进程要调用1000个方法,这些方法都事先存放到了内存中?那内存吃得消?还是在调用的时候才把方法加载进来,用完后再释放掉方法占用的空间,要调用就再载入,如果是这样的话,那实例空间中指向这个方法的指针不得经常变化?还有如果是这种情况的话,那好像也没必要在实例空间中加一个指向方法的指针了啊。这两种情况怎么好像都有点矛盾?类被加载进来内存中指的是加载类的代码?那使用完类,是不是还要释放类所占用的空间?实例空间存放方法的地址的话,那方法必须得在进程的生命周期内一直存在于内存中,不然那实例空间的地址指向谁呢?大虾指点
weihthchk 2007-06-14
  • 打赏
  • 举报
回复
从纯理论上说,因为往外设传数据的调用也是封装过的,因此你一次写入1000个字节,相当于使用了一个缓冲区,这个缓冲区显然至少1000个字节。如果你真的每字节一个调用……老天保佑你的整机系统够快……

java的类和c++是不同的,它的类信息也是一个对象,存在于载入它的那个类载入器的类列表中。不过相同的是,一个类有两大类成员:变量和方法。
变量存在于实例所在的空间——也就是new操作符为实例在堆上分配的空间中,而方法存在于方法区,实例所在的空间中有一个方法指针。
根据沙发所说的来看,静态成员变量存在于方法区,这和C++也是一样的;静态成员方法也存在于方法区,静态成员和实例成员的区别就是实例中不存在指向这些静态成员的指针,这“指针”存在于编译前的类信息中,编译后实际就和全域公有变量、方法没有区别了(java中不存在全域公有这个概念,所有方法、变量都应该属于一个类或者方法)。
实例方法中可以引用到的this,实际就是编译器在方法调用时加入的一个指向实例的指针。
adsds 2007-06-14
  • 打赏
  • 举报
回复
代码段的含义是:我们在运行程序时,CPU不可能每次去外设访问,因为cpu和外设之间的传输速度非常慢,这样就会影响cpu执行程序的效率,这也是计算机为什么引入内存的原因,所以当我们运行程序时,JVM会调用CPU在内存中分配一块区域用来存放该进程的部分代码,这样cpu直接访问内存中的代码,执行效率不就大大提高了吗。
大虾们多多指点小弟啊,我还想补充个缓冲区的问题,其实以前我也问过,但是细想起来还是觉的不是很清楚里面的细节,想请大虾们教下:
问题是,缓冲区可以避免cpu频繁访问外设,从而达到提效的作用。如果我不使用缓冲,难道往外设传1000个字节的数据cpu要访问1000次?想弄清楚下cpu到底怎么负责将数据写入外设的?

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧