java中的main方法中,如果我去实例化自己本身,会不会内存泄露,求高手!

如题所述

main方法是静态的,在你的类被JVA加载时就已经存在了,而且方法并不会随着你的对象的产生而增加,方法是类的而不是对象的,只有非静态的成员才属于对象。
如果你的 main方法里面new自己他会为你这个对象分配空间,但是你的对象中的所有方法在内存中的代码区,并不会随着你的对象增加而增加,和静态成员一样,有且仅有一份,为所有对象所共用。追问

但是你的对象中的所有方法在内存中的代码区,并不会随着你的对象增加而增加,
我说的是对象本身,没有说他的方法,你说的好像所有对象都是指向同一块内存一样,好像单例,
我说的是静态方法中实例化本身这个对象,这个对象的内存空间会不会泄露。

追答

静态的永远只会有一个,就像静态成员一样,它会被这个类里面的成员所共用也能通过类名.成员名使用。就算你通过这个方法去实例化这个类所在对象本身也一样只会有一个这样的方法。只有一个一直存在的,而且你在里面产生对象也只会产生一个本实例的对象因为方法只有一个而且一直存在着不会释放里面的对象也不会在你第二次调用的时候去产生新的这个对象除非你在方法内部将其进行处理使其变成没有指向的对象这样才会被JVM回收否则则不会被回收掉,如果按照你的那种思维,是不是觉得递归也会内存泄漏呢,当然这个和递归不同,只是感觉有些类似?

温馨提示:内容为网友见解,仅供参考
第1个回答  2011-07-21
不会,main函数是,static的 ,不会因为实例类,而开辟空间,你多虑了。欢迎追问。追问

我在main里面new自己本身不会开辟空间?

追答

不会,
static 的 变量和函数 是属于 类的,和对象没关系,
当你new 的时候只会 开辟空间存储类 中的非静态 数据。

第2个回答  2011-07-21
不会,static的怎么能实例化出来呢追问

你的意思是实例化他自己本身是不可能的?

java会内存泄露么?
会的。java中的内存泄露的情况:长生命周期的对象持有短生命周期对象的引用就很可能发生内存泄露,尽管短生命周期对象已经不再需要,但是因为长生命周期对象持有它的引用而导致不能被回收,这就是java中内存泄露的发生场景,通俗地说,就是程序员可能创建了一个对象,以后一直不再使用这个对象,这个对象却一...

java程序会发生内存泄露的问题吗?请简单说说你的观点
答案:会。Java内存管理是通过垃圾收集器(Garbage Collection,GC)自动管理内存的回收的,java程序员不需要通过调用函数来释放内存。因此,很多人错误地认为Java不存在内存泄漏问题,或者认为即使有内存泄漏也不是程序的责任,而是GC或JVM的问题。其实Java也存在内存泄露,但它的表现与C++语言有些不同。java...

java知道释放内存会不会误把有用的内存释放了?
有可能,但是没有什么影响 首先,根本不存在有用的内存这个说法。简单来说,可以把内存看成一个巨大的缓存(相较于真正的cache而言),内存中的一切数据都是暂时的,程序在运行时成为进程,占用内存空间,进程生命周期结束后是大多是会释放内存空间的。为了提高运行速度,少数进程会较长时间的占用内存。ja...

内存泄漏的原因及解决办法是什么
在Java中,非静态内部类和匿名类内部类都会潜在持有它们所属的外部类的引用,但是静态内部类却不会。对上述的示例进行分析,当MainActivity结束时,未处理的消息持有handler的引用,而handler又持有它所属的外部类也就是MainActivity的引用。这条引用关系会一直保持直到消息得到处理,这样阻止了MainActivity被...

常见的内存泄漏原因及解决方法
2、 Java角度 在Java中,非静态内部类和匿名类内部类都会潜在持有它们所属的外部类的引用,但是静态内部类却不会。对上述的示例进行分析,当MainActivity结束时,未处理的消息持有handler的引用,而handler又持有它所属的外部类也就是MainActivity的引用。这条引用关系会一直保持直到消息得到处理,这样...

java面试题大全(java面试题精选)
static变量在Java中是属于类的,它在所有的实例中的值是一样的。当类被Java虚拟机载入的时候,会对static变量进行初始化。如果你的代码尝试不用实例来访问非static的变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。 5.Java支持的数据类型有哪些?什么是自动拆装箱? Java语言支持的8中基本...

java中为什么实型变量在运算中不会产生溢出的问题 ?
JVM内存设置小了或者一次性读的数据过大例如listvertor一、内存溢出类型1、java.lang.OutOfMemoryError:PermGenspaceJVM管理两种类型的内存,堆和非堆。堆是给开发人员用的上面说的就是,是在JVM启动时创建;非堆是留给JVM自己用的,用来存放类的信息的。它和堆不同,运行期内GC不会释放空间。如果webapp用了大量的第三...

java初级面试题目?
回答:是,因为java方法中传递的是引用,就ok。如果回答中,将引用说明了自己的理解,加分。 面向对象基础类 1.重载和重写的区别? 回答:这个看个人理解,理解没有什么大的偏差就ok;回答出多态相关的,加分。 2.构造方法能不能重载? 回答:可以重载,ok;回答构造方法时不能继承的,所以如果要调用指定父类构造器就必须重...

java面试题?
回答:是,因为java方法中传递的是引用,就ok。如果回答中,将引用说明了自己的理解,加分。 面向对象基础类 1.重载和重写的区别? 回答:这个看个人理解,理解没有什么大的偏差就ok;回答出多态相关的,加分。 2.构造方法能不能重载? 回答:可以重载,ok;回答构造方法时不能继承的,所以如果要调用指定父类构造器就必须重...

JAVA 查询数据库 out of memory报错问题
Tomcat本身不能直接在计算机上运行,需要依赖于硬件基础之上的操作系统和一个java虚拟机。您可以选择自己的需要选择不同的操作系统和对应的JDK的版本(只要是符合Sun发布的Java规范的),但我们推荐您使用Sun公司发布的JDK。确保您所使用的版本是最新的,因为Sun公司和其它一些公司一直在为提高性能而对java虚拟机做一些升级改...

相似回答
大家正在搜