
在C++中可以用new和malloc在堆上申请空间,并且必选相应地用delete和free进行释放空间,因为在C++编译器中,堆这部分存储空间是完全由程序员自己管理的,即由程序员自己分配和释放。如果在程序中用new和malloc申请了空间的话,但是在程序中没有手动用delete和free释放空间的话,在程序执行过程中以及程序执行完毕后,这段空间还是被占用,即无法再访问到这部分空间,事实上这就是所谓的“内存泄露”问题。但是在你电脑重启后,这部分空间会被释放的,不会一直被占用,在程序中可以重新访问到这部分存储空间。
把MenuItem newItem = new Menu("New");改成MenuItem newItem = new MenuItem("New");
把MenuItem openItem = new Menu("Open");改成MenuItem openItem = new MenuItem("Open");
就行了。
你这个问题提的很好, 说明你在学习过程中认真思考了
首先, 在回答你的问题之前, 不妨先问你几个问题:
1 对于一个文件读写, 例如 new FileOutputStream(fileName), 没有任何变量引用它, 为什么它仍然会锁住文件的访问
2 对于一个数据库连接, 例如DriverManagergetConnection(url, user, passwd), 也没有任何变量引用它, 那么它为什么还会一直保持着数据库的连接 如果你多次调用而没有显式释放它, 那么数据库的有限资源可能就会被耗竭
其实我想说, 你的问题与我前面提出的两个问题其实是一致的 这个时候, JVM的垃圾回收机制干什么了呢
JVM会回收那些从来不被引用的对象所占用的内存 也就是说, 如果有这么一段程序:
private void someMethod() {
JFrame frame = new JFrame(); //(建议使用javax版本的Swing API)
}
当执行someMethod时, new的一个JFrame对象被frame所引用, 那么JVM所管理的对象群里就会保留一个指向该JFrame对象的引用, 因此JFrame对象就不会被JVM回收 但是, 当方法执行完毕时, 由于frame是一个局部变量, 所以这个frame变量引用会被丢弃, 此时, 也就没有任何变量引用生成的JFrame对象了 对于这一点, JVM是心知肚明的, 所以此时, 垃圾回收机制就开始了
还记得我之前说过的吗 JVM会回收那些从来不被引用的对象所占用的"内存资源" 事实上, JFrame对象确实是回收了, 但是由于只是所谓的内存资源, 而且只是JFrame对象自己的, 所以真正的图形显示并没有消失 你看到的图形显示绝对不可能是JFrame对象所占用的内存资源(虽然它也绝对有其相关的内存资源), 所以垃圾回收是不会回收你看到的图形界面的 不要过分的赋予垃圾回收过多的责任, 它只是一个面向对象语言的特性处理罢了, 与系统资源是扯不上一点联系的
简单的说就是, 垃圾回收确实回收了JFRame对象, 但仅仅是回收了JFrame对象, 而不是图形界面-- 一个通过调用JFramesetVisible(true)所创建的系统资源
::new 是java8的新特性,在方法列表里作为参数的时候用;这个::是lambda表达式经过eta转换后的简写,静态方法的引用String::valueOf,比如构造器的引用,ArrayList::new。
一内存的重要性
(1)内存(Memory)是计算机的重要部件之一,也称内存储器和主存储器,它用于暂时存放CPU中的运算数据,与硬盘等外部存储器交换的数据。它是外存与CPU进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体发挥的水平。
(2)在计算机的组成结构中有一个很重要的部分是存储器。它是用来存储程序和数据的部件。对于计算机来说,有了存储器,才有记忆功能,才能保证正常工作。
二如何发展内存
(1)内存是个不太好的俗称,其主要用途是两个:作为程序运行的空间(DRAM等)和存储数据的空间(NAND等)。历史上DRAM为了增加带宽只能不断增加延时,那么把缓存加大如何呢?问题是,SRAM和CPU你中有我一样贵,而且六个晶体管才能存一个比特。
(2)由于DRAM本身的局限性,它的技术进步一直很痛苦。DDR3到DDR4的小进步花了五年;DDR4从2012年发布第一版到今天DDR5还没有发布(注:显存GDDR5只是DDR3的变种)。
以上就是关于c++编程中,用new动态分配内存后,不使用delete,被分配的内存会永远丢失吗全部的内容,包括:c++编程中,用new动态分配内存后,不使用delete,被分配的内存会永远丢失吗、我在Java里创建了一个菜单File,里面有两个选项new和open,我点了open之后,为什么没有反应呢、java中为什么frame一旦new出来,即便没有引用指向它也不会被回收等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)