A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 王少岩 中级黑马   /  2012-8-8 11:04  /  2466 人查看  /  4 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

1、java文件是在编译后就会将.class文件加载到内存中吗?类中的静态成员也会一起加载到内存中?
2、加入代码中有Person t = new Person(),程序执行到这句的时候是才会在栈内存中开辟空间存放t,在堆内存中开辟空间存放new Person()吧,那假如Person类中还有类似的语句:Stutent s = new Student();在内存中的存放是啥样的
看视频中好像说变量存放到栈内存中,对象存放到堆内存中,然后变量是对象的引用,那int i=0在内存中是如何放的?
毕老师视频中提到了栈内存、堆内存,还有个方法区,那个方法区具体指的是啥?都放了些啥东西呢?


评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 加油!

查看全部评分

4 个回复

倒序浏览
1:会的!静态成员放在方法区的静态区!
2:这样就是在堆内存中开辟两个对象。person t在栈内存,new person在堆内存,person t指向堆内存。
你看下下面这副内存图就明白了!

评分

参与人数 1技术分 +1 收起 理由
杨志 + 1 还不错!

查看全部评分

回复 使用道具 举报
权跃杰 发表于 2012-8-8 11:20
1:会的!静态成员放在方法区的静态区!
2:这样就是在堆内存中开辟两个对象。person t在栈内存,new perso ...

还要请教一下,我看图中堆内存中存放了Person对象,然后这个对象中包括定义的变量和方法区的地址是这个意思吗?那我在main方法中写int i=0,i=0会放到堆还是栈啊?还有方法区应该也是指的内存吧,是堆内存?


回复 使用道具 举报
1、java文件是在编译后就会将.class文件加载到内存中吗?类中的静态成员也会一起加载到内存中?
不是,JVM从main函数开始执行,只有在用到某个class文件的时候才会加载。static修饰的静态成员是跟类有关的,随着类的加载而加载,随类的消失而消失。
2、加入代码中有Person t = new Person(),程序执行到这句的时候是才会在栈内存中开辟空间存放t,在堆内存中开辟空间存放new Person()吧,那假如Person类中还有类似的语句:Stutent s = new Student();在内存中的存放是啥样的?
加载Person类的时候,这个类里面需要用到Student类,那么也会跟着加载到内存中,它的执行过程同样是一个对象的实例化过程。s在栈,newStudent()在堆。

java在内存的存储区域分:
栈内存:存储局部变量,这些生命周期短的变量在栈内存中,提高运算效率,当数据使用完,所占空间会自动释放。
堆内存:new出来的东西都在这里
方法区:存储类中定义的方法。这里还有一个静态区,存储静态修饰的成员
本地方法区:貌似是windows用的
寄存器:这个应该是cpu运算才用的到

内存具体的你也不用死磕,只要知道有这几个区域,分别存储什么东西就行,能帮助你理解代码的执行过程就行。深层次的就不要再去深究了
回复 使用道具 举报
好的了解了
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马