Tag: 垃圾收集

Objective-C自动引用计数和垃圾收集有什么区别?

在Xcode 4.2中引入新的自动引用计数(ARC)后,我们不再需要在Objective-C中手动pipe理保留/释放。 这看起来很像垃圾收集,就像Mac上的Objective-C和其他语言一样。 ARC与垃圾收集有何不同?

哪个循环具有更好的性能? 为什么?

String s = ""; for(i=0;i<….){ s = some Assignment; } 要么 for(i=0;i<..){ String s = some Assignment; } 我再也不需要在循环之外使用's'了。 第一个选项可能更好,因为每次都没有初始化一个新的string。 然而第二个会导致variables的范围被限制在循环本身。 编辑:在回应Milhous的答案。 将String分配给一个循环内的常量是没有意义的。 不,在这里“一些分配”意味着从列表中获得的变化值被迭代。 另外,这个问题不是因为我担心内存pipe理。 只是想知道哪个更好。

如何避免Java游戏中的垃圾收集延迟? (最佳实践)

我是用于Android平台的Java性能调整互动游戏。 曾经有一段时间,垃圾收集的绘图和交互有一个呃逆。 通常不到十分之一秒,但有时在非常慢的设备上可能会达到200毫秒。 我使用ddms分析器(Android SDK的一部分)来search我的内存分配来自哪里,并从我的内部绘图和逻辑循环中消除它们。 最严重的罪犯是短循环, for(GameObject gob : interactiveObjects) gob.onDraw(canvas); 每执行一次循环,都会分配一个iterator 。 我现在使用数组( ArrayList )为我的对象。 如果我在内部循环中需要树或哈希,我知道我需要小心,甚至重新实现它们,而不是使用Java集合框架,因为我无法负担额外的垃圾回收。 当我看着优先级队列时,可能会出现这种情况。 我也有麻烦,我想使用Canvas.drawText显示分数和进度。 这不好, canvas.drawText("Your score is: " + Score.points, x, y, paint); 因为Strings , char数组和StringBuffers将被分配到所有的工作。 如果你有几个文本显示项目,并运行框架每秒60次开始累加,并会增加你的垃圾收集打嗝。 我认为这里的最佳select是保持char[]数组并将其手动解码为int或double ,并将string连接到开始和结束。 我想听听是否有更清洁的东西。 我知道那里一定有其他人在处理这件事。 你如何处理它,以及你发现在Java或Android上交互运行的陷阱和最佳实践? 这些gc问题足以让我错过手动内存pipe理,但不是很多。

在java中的垃圾收集器 – 设置对象为null

让我们假设,有一个Tree对象,有一个根节点TreeNode对象,每个TreeNode都有Left节点和Right节点对象(例如一个BinaryTree对象) 如果我打电话: myTree = null; 树中相关的TreeNode对象究竟发生了什么? 将被垃圾收集,或者我必须设置null对象树内的所有相关对象?

垃圾收集本地variables

我是一个进入Java世界的C ++程序员。 而且我不能摆脱让Java垃圾收集器清理我的不好的感觉。 例如,这个代码如何在Java中运行? public void myFunction() { myObject object = new myObject(); object.doSomething(); } 当myFunction()退出时,局部variables对象会被删除吗? 在退出之前是否必须将对象设置为null,还是会超出范围并被GC删除? 或者,最坏的情况下,它会像C ++一样泄漏吗?

Android Logcat中的GC_FOR_MALLOC,GC_EXPLICIT和其他GC_ *是什么意思?

如果你看到Android日志,你可能会看到很多这些东西。 他们是什么意思,知道这些可能会帮助我们做更好的内存分配。 例: 28470 dalvikvm D GC_FOR_MALLOC freed 665 objects / 239992 bytes in 71ms 28470 dalvikvm D GC_FOR_MALLOC freed 673 objects / 240288 bytes in 87ms 21940 dalvikvm D GC_EXPLICIT freed 4802 objects / 185320 bytes in 78ms 28470 dalvikvm D GC_FOR_MALLOC freed 666 objects / 240536 bytes in 63ms

C ++标准库和Boehm垃圾收集器

我想在Linux / AMD64 / Debian上用GCC 4.6开发一个multithreading的C ++应用程序(最终大部分的C ++代码将由应用程序本身生成,可以被视为一种高级的域特定语言)可能是最新的C ++ 11标准)。 我真的想用Boehm的保守的垃圾收集器来分配我所有的堆,因为我想用new(GC)分配,而且从不打扰delete 。 我假设Boehm的GC工作得很好。 使用C ++(而不是C)的主要动机是C ++标准库提供的所有algorithm和集合std::map … std::vector 。 Boehm的GC提供了一个gc_allocator<T>模板(在其文件gc / gc_allocator.h中)。 我应该重新定义operator ::new作为Boehm的吗? 或者我应该使用显式的分配器模板参数设置为一些gc_allocator所有集合模板? 我不明白第二个模板参数(分配器)对std :: vector的作用吗? 是用来分配vector内部数据还是分配每个单独的元素? 那么std::string -s呢? 如何使他们的数据GC分配? 我应该有我自己的string,使用basic_string模板与gc_allocator ? 有没有办法让GC_malloc_atomic而不是GC_malloc分配的char内部数组? 或者你build议不要使用Boehm GC与g ++编译的应用程序? 问候。

使用gc()命令强制垃圾收集在R中运行

我定期地编程。 好的,我一直在不停地编程,但是有时候,这会以内存不足的错误的方式跟上我的脚步。 我开始用rm()命令删除对象,并且事情变得更好。 我在网上看到有关是否应在删除大型数据对象后显式调用gc()的混合消息。 有人说,在R返回内存错误之前,它会运行gc(),而另外一些人说手动强制gc是一个好主意。 我应该在删除大对象后运行gc()以确保最大的内存可用性?

如何监视Java内存使用情况?

我们有一个运行在Jboss上的j2ee应用程序,我们要监视它的内存使用情况。 目前我们使用下面的代码 System.gc(); Runtime rt = Runtime.getRuntime(); long usedMB = (rt.totalMemory() – rt.freeMemory()) / 1024 / 1024; logger.information(this, "memory usage" + usedMB); 这段代码工作正常。 这意味着它显示出符合现实的记忆曲线。 当我们从一个数据库创build一个大的xml文件时,曲线就会上升,提取完成后就会停止。 一位顾问告诉我们,明确调用gc()是错误的,“让jvm决定何时运行gc”。 基本上他的论点和这里的讨论是一样的。 但我还是不明白: 我怎么能有我的记忆使用曲线? 显式的gc()有什么问题? 我不在意使用明确的gc()可能发生的小的性能问题,我估计这个问题在1-3%之内。 我需要的是内存和线程监视器,它可以帮助我分析我们的系统在客户现场。

Android中的垃圾收集器

我见过很多Android的答案,build议在某些情况下调用垃圾回收器。 在进行内存耗尽操作之前,在Android中请求垃圾收集器是否是一个好习惯? 如果不是,我是否应该只在出现OutOfMemory错误时调用它? 在使用垃圾收集器之前,我还有其他的事情吗?