Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/141.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java GC与其他两种内存管理方法的比较_Java_C++_C_Memory Management_Garbage Collection - Fatal编程技术网

Java GC与其他两种内存管理方法的比较

Java GC与其他两种内存管理方法的比较,java,c++,c,memory-management,garbage-collection,Java,C++,C,Memory Management,Garbage Collection,我只是想更多地了解当前流行的垃圾收集、malloc/free和counter 据我所知,GC是最受欢迎的,因为它减轻了开发人员手动管理内存的负担,而且它更加防弹。malloc/free很容易出错并导致内存泄漏 发件人: 为什么垃圾收集比显式内存分配更快 和C一样?人们通常认为免费电话不需要任何费用。事实上 “免费”是一项昂贵的操作,它需要在网络上导航 内存分配器使用的复杂数据结构。如果你的程序 间歇性地释放调用,那么所有的代码和数据都需要被释放 加载到缓存中,替换程序代码和数据,每个 释放单个内

我只是想更多地了解当前流行的垃圾收集、malloc/free和counter

据我所知,GC是最受欢迎的,因为它减轻了开发人员手动管理内存的负担,而且它更加防弹。malloc/free很容易出错并导致内存泄漏

发件人:

为什么垃圾收集比显式内存分配更快 和C一样?人们通常认为免费电话不需要任何费用。事实上 “免费”是一项昂贵的操作,它需要在网络上导航 内存分配器使用的复杂数据结构。如果你的程序 间歇性地释放调用,那么所有的代码和数据都需要被释放 加载到缓存中,替换程序代码和数据,每个 释放单个内存分配的时间。收集策略 一次性释放多个内存区域(例如池分配器 或GC)只为多次分配支付一次罚款(因此 每次分配的成本大大降低)

GC比malloc/free快是真的吗

另外,如果计数器样式的内存管理(objective-c正在使用它)加入该团队会怎么样

我希望有人能以更深刻的见解总结这些比较

GC比malloc/free快是真的吗

可能是。这取决于内存使用模式。这还取决于你如何衡量“更快”。(例如,您是否在测量总体内存管理效率、对malloc/free的单个调用或…暂停时间。)

但相反,malloc/free通常比现代的复制GC更好地利用内存。。。前提是不会遇到堆碎片问题。当编程语言不能提供足够的信息使GC能够区分堆指针和其他值时,malloc/free“起作用”

另外,如果计数器样式的内存管理(objective-c正在使用它)加入该团队会怎么样

引用计数的开销使得指针分配更加昂贵,您必须以某种方式处理引用周期

另一方面,引用计数确实提供了一种控制内存管理暂停的方法。。。这可能是交互式游戏/应用程序的一个重要问题。内存使用也更好;见上文


FWIW,你引用的资料中的观点是正确的。但这并不是全部


问题是整个画面是。。。太复杂了,无法在StackOverflow答案中正确涵盖。

对于Java,当对象小到足以放入线程本地分配缓冲区时,没有任何锁竞争

这是一个内部设计,它已经被证明是非常好的工作。根据我的理解,分配一个新对象只是一个指针碰撞


这相当快

这类问题的问题是,“GC”包含了一个巨大的设计空间,其中包含了许许多多的变体,这些变体做出了非常不同的权衡,甚至比malloc/free还要多。