当前时区为 UTC + 8 小时



发表新帖 回复这个主题  [ 27 篇帖子 ]  前往页数 1, 2  下一页
作者 内容
1 楼 
 文章标题 : 内存回收机制到底是怎么回事 为什么有这些的程序占用内存反而多呢
帖子发表于 : 2008-05-16 7:59 
头像

注册: 2006-07-23 20:27
帖子: 484
送出感谢: 0 次
接收感谢: 0 次
我一知半解的
c 和c++似乎是没有内存回收机制的 有人说落后了 该淘汰了
应该用有内存回收机制的java .net


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

这个内存回收机制到底管不管用? 用有它的语言好 还是没它的语言好


页首
 用户资料  
 
2 楼 
 文章标题 :
帖子发表于 : 2008-05-16 8:03 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
好的C程序和烂的java程序比较吧。你要是把C写好,内存一样管的好,C的内存是靠程序员管理的。


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


页首
 用户资料  
 
3 楼 
 文章标题 :
帖子发表于 : 2008-05-16 13:42 
头像

注册: 2006-07-23 20:27
帖子: 484
送出感谢: 0 次
接收感谢: 0 次
不是觉得c垃圾 是觉得这个内存回收机制垃圾

感觉有这个机制的语言写的程序 内存利用反而高


页首
 用户资料  
 
4 楼 
 文章标题 : Re: 内存回收机制到底是怎么回事 为什么有这些的程序占用内存反而多呢
帖子发表于 : 2008-05-16 13:50 
头像

注册: 2006-10-25 18:10
帖子: 2677
地址: 长沙
送出感谢: 0 次
接收感谢: 0 次
内存回收机制(Garbage Collection)的出现并不是为了减少程序使用的内存。它是为了提高开发效率,由运行时自动回收那些不再被访问的内存区段,而不需要开发人员自己写语句来释放。GC 本身是要占用一些内存的,所以使用 GC 的语言编写出来的程序占用内存会更多。


_________________
你是自由的。别人也是。


页首
 用户资料  
 
5 楼 
 文章标题 :
帖子发表于 : 2008-05-16 13:54 
头像

注册: 2006-07-23 20:27
帖子: 484
送出感谢: 0 次
接收感谢: 0 次
感觉现在的程序是越来越慢啊
是进步还是倒退呢

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

反正我从用户的角度肯定是希望运行效率重要了


页首
 用户资料  
 
6 楼 
 文章标题 :
帖子发表于 : 2008-05-16 14:05 
头像

注册: 2007-10-19 14:51
帖子: 4953
地址: 深圳
送出感谢: 0 次
接收感谢: 2
但是开发者较看中开发时效率,特别是商业开发者


_________________
Nothing 有事请发邮件到 yms541 AT gmail.com
alias 爱慕颇雷尔='mplayer'


页首
 用户资料  
 
7 楼 
 文章标题 :
帖子发表于 : 2008-05-16 14:13 

注册: 2008-01-07 16:39
帖子: 204
送出感谢: 0 次
接收感谢: 0 次
参考Thinking in Java。

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

两者无所谓好坏,谁也不能轻易取代谁。在强调运行速度的场合,肯定不会用Java的。


页首
 用户资料  
 
8 楼 
 文章标题 : Re: 内存回收机制到底是怎么回事 为什么有这些的程序占用内存反而多呢
帖子发表于 : 2008-05-16 14:20 
头像

注册: 2006-05-03 0:39
帖子: 8273
地址: المريخ
送出感谢: 0 次
接收感谢: 1
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是最好的语言!不服来战!


页首
 用户资料  
 
9 楼 
 文章标题 :
帖子发表于 : 2008-05-16 14:51 
头像

注册: 2006-07-23 20:27
帖子: 484
送出感谢: 0 次
接收感谢: 0 次
感觉现在的硬件还没有到那种可以少考虑运行效率的水平

你看现在的ubuntu vista osx
哪个运行的流畅?
哪个不是被用户骂蜗牛


页首
 用户资料  
 
10 楼 
 文章标题 :
帖子发表于 : 2008-05-16 19:26 
头像

注册: 2006-10-27 11:14
帖子: 1140
地址: 悉尼
送出感谢: 0 次
接收感谢: 0 次
java还拖着一个虚拟机,你不能拿它和c、c++什么的比吧。。。而且java的垃圾收集机制很大程度上减轻了程序员的负担,起码在很多情况下你不用去想内存分配的问题,c和c++写完,常见的bug就是内存漏洞,这玩意改起来可是头痛得很。


页首
 用户资料  
 
11 楼 
 文章标题 :
帖子发表于 : 2008-05-16 19:47 
头像

注册: 2005-08-14 21:55
帖子: 58428
地址: 长沙
送出感谢: 4
接收感谢: 272
软件的内存回收,和系统的进程使用的内存回收,意义不同的。
哪里有申请了内存,不能回收的语言啊。你相信?


_________________
● 鸣学


页首
 用户资料  
 
12 楼 
 文章标题 :
帖子发表于 : 2008-05-16 20:52 
头像

注册: 2006-07-23 20:27
帖子: 484
送出感谢: 0 次
接收感谢: 0 次
我只是想知道为什么有内存回收机制的语言 为什么比c和c++慢那么多

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

我想解释执行 java虚拟机这些都是拖速度的 那有没有一种不用这些东西的“高级”语言


页首
 用户资料  
 
13 楼 
 文章标题 :
帖子发表于 : 2008-05-16 21:41 
头像

注册: 2006-05-03 0:39
帖子: 8273
地址: المريخ
送出感谢: 0 次
接收感谢: 1
paulcross 写道:
我只是想知道为什么有内存回收机制的语言 为什么比c和c++慢那么多

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

我想解释执行 java虚拟机这些都是拖速度的 那有没有一种不用这些东西的“高级”语言

如果你使用同样的编译器使用同样纯C库同样代码,那么C和C++应该是同样的速度。
但是当你使用了面向对象特性之后,其它的开销就多了。

在速度方面,够用就行;只有在不够用的情况下,你才需要更快的速度。


_________________
PHP是最好的语言!不服来战!


页首
 用户资料  
 
14 楼 
 文章标题 :
帖子发表于 : 2008-05-17 17:51 
头像

注册: 2006-07-23 20:27
帖子: 484
送出感谢: 0 次
接收感谢: 0 次
我觉得c++是挺快的 但是它和c一样老

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

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

为什么新语言比老语言慢这个规律就破不掉呢 我觉得语言应该比老的快才是进步啊


页首
 用户资料  
 
15 楼 
 文章标题 :
帖子发表于 : 2008-05-17 18:56 
头像

注册: 2006-05-03 0:39
帖子: 8273
地址: المريخ
送出感谢: 0 次
接收感谢: 1
paulcross 写道:
我觉得c++是挺快的 但是它和c一样老

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

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

为什么新语言比老语言慢这个规律就破不掉呢 我觉得语言应该比老的快才是进步啊


C是70年代的语言,C++是85年的语言,可以算是非常年轻的语言了。

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

这个太多了。你说的“新”是指从什么时间算起?


_________________
PHP是最好的语言!不服来战!


页首
 用户资料  
 
显示帖子 :  排序  
发表新帖 回复这个主题  [ 27 篇帖子 ]  前往页数 1, 2  下一页

当前时区为 UTC + 8 小时


在线用户

正在浏览此版面的用户:没有注册用户 和 2 位游客


不能 在这个版面发表主题
不能 在这个版面回复主题
不能 在这个版面编辑帖子
不能 在这个版面删除帖子
不能 在这个版面提交附件

前往 :  
本站点为公益性站点,用于推广开源自由软件,由 DiaHosting VPSBudgetVM VPS 提供服务。
我们认为:软件应可免费取得,软件工具在各种语言环境下皆可使用,且不会有任何功能上的差异;
人们应有定制和修改软件的自由,且方式不受限制,只要他们自认为合适。

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
简体中文语系由 王笑宇 翻译