黑马程序员技术交流社区

标题: 堆内存中方法内局部变量的问题 [打印本页]

作者: 尹博    时间: 2012-4-8 02:21
标题: 堆内存中方法内局部变量的问题
请问一下,一个类的对象被实例化后,对象的方法存在于堆内存中,那方法中的局部变量是在栈内存中吗?静态方法中的局部变量呢?
作者: 刘宁    时间: 2012-4-8 02:37
方法中的局部变量是存在于栈内存中的,变量用完之后,内存自动释放。静态方法中的局部变量也是放在栈内存中的。但是如果是静态变量的话则是存在于堆内存中。
作者: 宋蕈    时间: 2012-4-8 08:18
类对象当然可以多次实例化,在NEW的时候,就已经分配内存了!
*******
当然是对NEW以后的类对象进分内存分配,而不是类定义本身!

JAVA的内存模型分为堆栈(stack)和堆(heap),堆栈是可以单向增加或减少的内存管理模型,而堆则是针对对象类型的内存堆表分配机制.对于内存管理,是由JAVA自动控制的,程序员本身无须过分关心!
在JAVA中,基本类型和对象类型的引用声明都是保存在堆栈之中(就是已经分配了堆栈内存空间),对于对象的引用,实际就是一个指针,当然JAVA取消了指针概念。如果对象引用,不实际指向某个堆内存中的对象,那它就是孤立的,当跳出方法或块之后,内存就会被回收.而在使用NEW关键字以后,对于对象类型的数据都是JAVA本身进行分配并保存在堆内存之中,而对于孤儿的堆内存对象,系统也会自动回收,或者代码释放.
由于JAVA的一切都是对象,包括类定义本身,如果没有定义或声明引用,没有NEW进行实例化,当然谈不上内存分配,纯是概念上的东西!
所以可以这样说,一个类对象可以多次实例化,对每个实例化的对象,JAVA都会同时分配相应的堆栈和堆内存(堆栈里的是对象引用,堆里的是对象数据)!
作者: 郑强强    时间: 2012-4-8 10:15
方法中的局部变量是在栈内存中的。只有在这个静态方法被调用时,在这个方法中申明的变量才有生命期,是局部变量,并且不可以在静态方法中定义静态变量。
作者: 文密    时间: 2012-4-8 11:17
在内存中开辟了一个空间,不过Java把内存划分成两种:栈内存和堆内存。
在方法中定义的一些基本类型的变量和对象的引用变量都是在方法的栈内存中分配的;而堆内存用来存放由new创建的对象,在堆中分配的内存。
局部变量,无论是静态方法还是动态方法,都是局部变量,都是在栈中创建
作者: 刘_浩    时间: 2012-4-8 11:34
对象中的成员都是在堆内存中的,这是实体。方法中的局部变量在栈中,静态方法中的变量在方法区中。
作者: pray    时间: 2014-4-26 05:01
切!(虽然仅仅一个字,却生动的表达了回复人的不屑于洒脱,反映出作者性格中的冷漠和无奈,以一种打酱油的心情冷眼旁观这世界,足以反应作者被社会冷漠氛围的影响,也反应了河蟹社会人们从敢怒不敢言的心情逐渐转变成不愿言,不想言知道无话可言的一种悲哀,深深的反映出现在网络审查之严厉,跨省之可怕,最后以感叹号结尾,点睛之笔,将文章升华为一切归于不言中,一切又有谁敢言的境界,用最精炼且安全的文字,表达了大家内心深处的抗争)




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2