Questions tagged «memory»

使用此标签进行内存管理或编程问题。有关内存硬件问题或通用软件中的错误的问题,请访问https://superuser.com或https://serverfault.com(如果这与企业级硬件或软件有关)。


5
Java 8中的默认Xmxsize(最大堆大小)
在oracle文档中,我发现: -Xmxsize以字节为单位指定内存分配池的最大大小(以字节为单位)...默认值是在运行时根据系统配置选择的。 这是什么系统配置是什么意思?
80 java  memory 

4
如何分析golang记忆?
我编写了一个golang程序,该程序在运行时使用1.2GB的内存。 调用将go tool pprof http://10.10.58.118:8601/debug/pprof/heap导致转储仅使用323.4MB的堆。 其余的内存使用情况又如何呢? 有没有更好的工具来解释golang运行时内存? 使用gcvis我得到这个: ..和此堆表单配置文件: 这是我的代码:https : //github.com/sharewind/push-server/blob/v3/broker

9
Java获取可用内存
有什么好方法可以在运行时将剩余的内存提供给JVM?这种情况的用例是使Web服务在接近内存限制时通过拒绝一个新的错误消息“太多的人使用此,请稍后再试”,而不是因OutOfMemory错误而突然死亡而接近失败,从而优雅地失败。 。 注意,这与事先计算/估算每个对象的成本无关。原则上,我可以根据该估算值估算对象占用并拒绝新连接的内存量,但这似乎有点hacky /脆弱。

1
此Valgrind警告是什么意思?-警告设置地址范围权限
在针对valgrind运行程序时,遇到以下警告。 Warning: set address range perms: large range [0x4d59d040, 0x6159d040) (undefined) Warning: set address range perms: large range [0x194f7030, 0x2d4f7050) (noaccess) Warning: set address range perms: large range [0x3959d030, 0x6159d050) (noaccess) 经过一番谷歌搜索后,我在这里发现它是一个Diagnostic message, mostly for benefit of the Valgrind developers, to do with memory permissions,告诉我的并不多。 我的程序确实在堆上分配了大量内存。(一整串后可以达到2-3 GB的内存realloc) 但是,尽管所有分配均未失败,但仍出现警告。 因此,我想知道此消息的真正含义是什么?我没有某种存储权限?(但分配成功)
77 c  memory  valgrind 


4
Python内存zip库
是否有一个Python库,可以在不使用实际磁盘文件的情况下操纵内存中的zip存档? ZipFile库不允许您更新存档。唯一的方法似乎是将其提取到目录中,进行更改,然后从该目录中创建新的zip。我想修改没有磁盘访问权限的zip归档文件,因为我将下载它们,进行更改并再次上传它们,因此没有理由存储它们。 尽管几乎没有任何接口可以避免磁盘访问,但类似于Java的ZipInputStream / ZipOutputStream的方法可以解决问题。
77 python  memory  zip  archive 

24
“内存不足”是否是可恢复的错误?
我已经进行了很长时间的编程,并且看到的程序在内存不足时会尝试清理并退出,即正常失败。我不记得上一次看到一个实际尝试恢复并继续正常运行的情况了。 如此多的处理取决于能否成功分配内存,尤其是在垃圾回收语言中,似乎内存不足错误应归类为不可恢复。(不可恢复的错误包括堆栈溢出之类的东西。) 使它成为可恢复的错误的有力论据是什么?

8
SQLite Android数据库游标窗口分配2048 kb失败
我有一个例程,每秒对SQLite数据库运行多次不同的查询。过一会儿我会得到错误 "android.database.CursorWindowAllocationException: - Cursor window allocation of 2048 kb failed. # Open Cursors = " 出现在LogCat中。 我有应用日志内存的使用情况,确实,当使用情况达到一定限制时,我会收到此错误,暗示它用完了。我的直觉告诉我,每次运行查询时,数据库引擎都会创建一个NEW缓冲区(CursorWindow),即使我将游标标记为.close(),垃圾回收器和SQLiteDatabase.releaseMemory()释放内存的速度够快。我认为解决方案可能在于“强制”数据库始终写入同一缓冲区,而不创建新缓冲区,但是我一直无法找到一种方法来做到这一点。我尝试实例化自己的CursorWindow,并尝试将其设置为和SQLiteCursor无济于事。 有任何想法吗? 编辑:从@GrahamBorland重新示例代码请求: public static CursorWindow cursorWindow = new CursorWindow("cursorWindow"); public static SQLiteCursor sqlCursor; public static void getItemsVisibleArea(GeoPoint mapCenter, int latSpan, int lonSpan) { query = "SELECT * FROM Items"; //would be more complex …

3
参考利益薄弱
有人可以解释C#中不同类型的引用的主要好处吗? 参考文献薄弱 软参考 幻影参考 有力的参考。 我们有一个消耗大量内存的应用程序,我们正在尝试确定这是否是一个需要重点关注的领域。

4
当片段被替换并放回堆栈(或取出)时,它是否保留在内存中?
行为是否类似于“活动”的工作方式?例如,使用活动,它的工作方式如下: 活性的启动活动B,而乙是在屏幕上,该系统能够以除去甲从存储器如果它是由系统所需的。按BACK后,将重新创建A到内存中,就好像它从未放在第一位一样。 我一直在寻找对Fragments在内存方面会发生什么的清晰解释,但没有发现任何东西。是否以相同的方式工作?例如: 活动C在其布局中具有片段F。然后,在某个点F被Fragment G替换,但是F保留在其后堆栈中。 威尔˚F留在内存中,直到ç被杀害或者可以在由系统根据需要被删除? 我真正要问的是,如果我在一个Activity中有复杂的片段后退堆栈,是否会出现内存不足的风险?

3
如何明智地使用StringBuilder?
首先,我对使用StringBuilder类不太困惑: 一个string对象串联操作总是从现有的创建一个新的对象string和新的数据。甲StringBuilder对象维护一个缓冲器,以适应新的数据的串联。如果有可用空间,则将新数据附加到缓冲区的末尾;否则,将分配一个更大的新缓冲区,将原始缓冲区中的数据复制到新缓冲区中,然后将新数据附加到新缓冲区中。 但是创建StringBuilder实例以避免创建新实例的目的在String哪里呢?听起来像“一对一”交易。 static void Main(string[] args) { String foo = "123"; using (StringBuilder sb = new StringBuilder(foo)) // also sb isn't disposable, so there will be error { sb.Append("456"); foo = sb.ToString(); } Console.WriteLine(foo); Console.ReadKey(); } 为什么我不应该只使用 += 编辑:好的,我现在知道如何重用一个实例StringBuilder(仍然不知道这对代码标准是否正确),但是仅使用一个实例是不值得的string,不是吗?

2
建议为类型化的内存视图分配内存的方法是什么?
有关类型化内存视图的Cython文档列出了分配给类型化内存视图的三种方式: 从原始的C指针, 从一个 np.ndarray和 从cython.view.array。 假设我没有从外部将数据传递到cython函数中,而是想分配内存并将其返回为np.ndarray,那么我选择了哪些选项?还假设该缓冲区的大小不是编译时常量,即我无法在堆栈上分配,但需要malloc为选项1。 因此,这三个选项看起来像这样: from libc.stdlib cimport malloc, free cimport numpy as np from cython cimport view np.import_array() def memview_malloc(int N): cdef int * m = <int *>malloc(N * sizeof(int)) cdef int[::1] b = <int[:N]>m free(<void *>m) def memview_ndarray(int N): cdef int[::1] b = np.empty(N, dtype=np.int32) def …

8
在C中使用strict关键字的规则?
我试图了解何时以及何时不使用 restrictC中关键字,以及在什么情况下它提供了明显的好处。 阅读了“ Demystifying The Restrict Keyword ”(提供了一些使用经验的规则)后,我得到的印象是,当函数传递指针时,它必须考虑所指向的数据可能重叠的可能性(别名)并将任何其他参数传递到函数中。给定一个功能: foo(int *a, int *b, int *c, int n) { for (int i = 0; i<n; ++i) { b[i] = b[i] + c[i]; a[i] = a[i] + b[i] * c[i]; } } 编译器必须c在第二个表达式中重新加载,因为也许b并c指向同一位置。由于相同的原因,它还必须等待b存储后才能加载a。然后,它必须等待a存储和必须重新加载b,并c在下一循环的开始。如果您像这样调用函数: int a[N]; foo(a, a, a, N); 然后您会看到编译器为什么必须这样做。restrict有效使用会告诉编译器您永远都不会这样做,因此它可以删除存储的冗余负载c和a之前的负载b。 在另一篇SO文章中,Nils Pipenbrinck提供了此方案的一个有效示例,展示了性能优势。 到目前为止,我已经收集到,使用它是一个好主意 …
69 c  optimization  memory 

4
安全地捕获PHP中的“允许的内存大小用尽”错误
我有一个网关脚本,它将JSON返回给客户端。在脚本中,我使用set_error_handler捕获错误,并且仍然具有格式化的返回值。 它受到“允许的内存大小用尽”错误的影响,但是与其使用ini_set('memory_limit','19T')之类的方法来增加内存限制,我只是想返回用户应该尝试其他方法的原因,因为它过去经常记忆。 有什么好的方法可以捕获致命错误?
69 php  memory 

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.