内存回收机制到底是怎么回事 为什么有这些的程序占用内存反而多呢

软件和网站开发以及相关技术探讨
头像
paulcross
帖子: 484
注册时间: 2006-07-23 20:27

内存回收机制到底是怎么回事 为什么有这些的程序占用内存反而多呢

#1

帖子 paulcross » 2008-05-16 7:59

我一知半解的
c 和c++似乎是没有内存回收机制的 有人说落后了 该淘汰了
应该用有内存回收机制的java .net


但是为什么用c和c++的程序内存占用很少 而java .net的程序占用很多呢
速度上就更没法比了c程序跑起来 比.net java快10倍

这个内存回收机制到底管不管用? 用有它的语言好 还是没它的语言好
头像
yaoms
帖子: 4952
注册时间: 2007-10-19 14:51
来自: 深圳

#2

帖子 yaoms » 2008-05-16 8:03

好的C程序和烂的java程序比较吧。你要是把C写好,内存一样管的好,C的内存是靠程序员管理的。
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
头像
paulcross
帖子: 484
注册时间: 2006-07-23 20:27

#3

帖子 paulcross » 2008-05-16 13:42

不是觉得c垃圾 是觉得这个内存回收机制垃圾

感觉有这个机制的语言写的程序 内存利用反而高
头像
yiding_he
帖子: 2677
注册时间: 2006-10-25 18:10
来自: 长沙
联系:

Re: 内存回收机制到底是怎么回事 为什么有这些的程序占用内存反而多呢

#4

帖子 yiding_he » 2008-05-16 13:50

内存回收机制(Garbage Collection)的出现并不是为了减少程序使用的内存。它是为了提高开发效率,由运行时自动回收那些不再被访问的内存区段,而不需要开发人员自己写语句来释放。GC 本身是要占用一些内存的,所以使用 GC 的语言编写出来的程序占用内存会更多。
你是自由的。别人也是。
头像
paulcross
帖子: 484
注册时间: 2006-07-23 20:27

#5

帖子 paulcross » 2008-05-16 13:54

感觉现在的程序是越来越慢啊
是进步还是倒退呢

开发效率重要 还是运行效率重要呢

反正我从用户的角度肯定是希望运行效率重要了
头像
yaoms
帖子: 4952
注册时间: 2007-10-19 14:51
来自: 深圳

#6

帖子 yaoms » 2008-05-16 14:05

但是开发者较看中开发时效率,特别是商业开发者
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'
sirxenofex
帖子: 204
注册时间: 2008-01-07 16:39

#7

帖子 sirxenofex » 2008-05-16 14:13

参考Thinking in Java。

──正因为硬件提升,所以大家才把精力从“速度”上面移走了一部分。硬件的提升给程序员带来了更多的选择,很多场合,运行速度不是主要矛盾。牺牲一些速度,换取开发效率。程序开发更容易,程序员更高产。虽然Java运行效率比C++低,但Java的代码写的可以比C++好。无数C++工程都坏在检查不出来的错误上。

两者无所谓好坏,谁也不能轻易取代谁。在强调运行速度的场合,肯定不会用Java的。
头像
stlxv
论坛版主
帖子: 8275
注册时间: 2006-05-03 0:39
来自: المريخ

Re: 内存回收机制到底是怎么回事 为什么有这些的程序占用内存反而多呢

#8

帖子 stlxv » 2008-05-16 14:20

paulcross 写了:我一知半解的
c 和c++似乎是没有内存回收机制的 有人说落后了 该淘汰了
应该用有内存回收机制的java .net


但是为什么用c和c++的程序内存占用很少 而java .net的程序占用很多呢
速度上就更没法比了c程序跑起来 比.net java快10倍

这个内存回收机制到底管不管用? 用有它的语言好 还是没它的语言好
那个叫“垃圾回收”,C++是有的。

例如下面的C++程序:

代码: 全选

#include <iostream>
using namespace std;

class a { 
public:
    ~a() { cout << "自动回收a的一个实例" << endl; };
};

void gc_show() {
    a x;
} // <-- 这里,在返回的时候,会自动回收x

int main() {
    gc_show();
    cout << "END" << endl;
}
有了垃圾回收机制,你就可以不用再像“delete x;”这样显示回收垃圾。这和速度关联不大。有垃圾回收机制的语言非常多,特别是在非命令式语言中(例如各种函数式语言等等),垃圾回收是很常见的。例如下面的函数式语言OCaml的程序段,你在new了之后就不用再显示的删除:

代码: 全选

class a = object end;;

let x = new a;;   (* <-- 你不需要再写代码来删除这个对象了 *)
再例如下面的Java程序段也是如此:

代码: 全选

public class a {
    public static void main(String [] args) {
        new a(); /* <-- 你不需要再写代码来删除这个对象了 */
    }
}
PHP是最好的语言!不服来战!
头像
paulcross
帖子: 484
注册时间: 2006-07-23 20:27

#9

帖子 paulcross » 2008-05-16 14:51

感觉现在的硬件还没有到那种可以少考虑运行效率的水平

你看现在的ubuntu vista osx
哪个运行的流畅?
哪个不是被用户骂蜗牛
头像
matri
帖子: 1140
注册时间: 2006-10-27 11:14
来自: 悉尼

#10

帖子 matri » 2008-05-16 19:26

java还拖着一个虚拟机,你不能拿它和c、c++什么的比吧。。。而且java的垃圾收集机制很大程度上减轻了程序员的负担,起码在很多情况下你不用去想内存分配的问题,c和c++写完,常见的bug就是内存漏洞,这玩意改起来可是头痛得很。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#11

帖子 eexpress » 2008-05-16 19:47

软件的内存回收,和系统的进程使用的内存回收,意义不同的。
哪里有申请了内存,不能回收的语言啊。你相信?
● 鸣学
头像
paulcross
帖子: 484
注册时间: 2006-07-23 20:27

#12

帖子 paulcross » 2008-05-16 20:52

我只是想知道为什么有内存回收机制的语言 为什么比c和c++慢那么多

为什么还要继续发展这些慢的语言

我想解释执行 java虚拟机这些都是拖速度的 那有没有一种不用这些东西的“高级”语言
头像
stlxv
论坛版主
帖子: 8275
注册时间: 2006-05-03 0:39
来自: المريخ

#13

帖子 stlxv » 2008-05-16 21:41

paulcross 写了:我只是想知道为什么有内存回收机制的语言 为什么比c和c++慢那么多

为什么还要继续发展这些慢的语言

我想解释执行 java虚拟机这些都是拖速度的 那有没有一种不用这些东西的“高级”语言
如果你使用同样的编译器使用同样纯C库同样代码,那么C和C++应该是同样的速度。
但是当你使用了面向对象特性之后,其它的开销就多了。

在速度方面,够用就行;只有在不够用的情况下,你才需要更快的速度。
PHP是最好的语言!不服来战!
头像
paulcross
帖子: 484
注册时间: 2006-07-23 20:27

#14

帖子 paulcross » 2008-05-17 17:51

我觉得c++是挺快的 但是它和c一样老

可是现在的新语言python .net java 都是用解释的或者是虚拟机的 太慢了

有没有新的不用虚拟机和解释执行的 但是有00和内存回收机制的高速语言

为什么新语言比老语言慢这个规律就破不掉呢 我觉得语言应该比老的快才是进步啊
头像
stlxv
论坛版主
帖子: 8275
注册时间: 2006-05-03 0:39
来自: المريخ

#15

帖子 stlxv » 2008-05-17 18:56

paulcross 写了:我觉得c++是挺快的 但是它和c一样老

可是现在的新语言python .net java 都是用解释的或者是虚拟机的 太慢了

有没有新的不用虚拟机和解释执行的 但是有00和内存回收机制的高速语言

为什么新语言比老语言慢这个规律就破不掉呢 我觉得语言应该比老的快才是进步啊
C是70年代的语言,C++是85年的语言,可以算是非常年轻的语言了。
有没有新的不用虚拟机和解释执行的 但是有00和内存回收机制的高速语言
这个太多了。你说的“新”是指从什么时间算起?
PHP是最好的语言!不服来战!
回复