问题标签 [memory-pool]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
10623 浏览

tomcat - 我在哪里设置伊甸园空间?

问题摘要:

PS Eden Space附近显示的内存大小为 639.5 MB,而 JAVA_OPTS包含-Xms2558m -Xmx2558m (2.5G) 。


细节 :

创建 seten.sh 文件后,我添加了这一行:

然后,我监视应用程序服务器的 UI 以检查内存的增加是为了什么

在此处输入图像描述

我很奇怪:为什么当我浏览我的应用程序时,为什么PS Old Gen保持稳定而PS Eden Space快速消耗内存。但是,PS Eden Space附近显示的内存大小为 639.5 MB。

如何增加PS伊甸园空间?我应该使用什么选项知道我们使用 Java8 ?

当我设置-Xms2558m:我的应用程序是一个 grails 应用程序(包括 spring 框架、spring 安全性......)

0 投票
0 回答
359 浏览

c++ - 通用内存池 - 如何?- 设计问题

我正在为小型且非常常用的对象创建自己的内存池。我对分配和 d 分配本身很满意。

这是我的游泳池的布局

我希望每个班级都有自己的游泳池。现在,如果某个类需要使用这个池,则需要

  1. 他们CreatePool()用 size 和 no_of_objects调用
  2. 他们要么调用参数化new&delete或重载运算符,然后调用这些运算符AllocateDeAllocate函数。
  3. 调用'DestroyPool()'

我更担心像Derived *derObj = new (poolObj)Derived();. 在这里用户可能会忘记poolObj,并且该对象根本不会在我的堆上。当然,为此,我具有全局功能,例如

所以我想问一些具体的问题:

  1. 如何重新设计我的池类,以便如果客户调用 Derived *derObj = new Derived();我有机会从我的池中分配内存。甚至可能吗?

  2. 有没有办法识别type物体?那么,CreatePoolDestroyPool可以从客户端代码中删除?但我需要非常小心,每种“类型”只有一个池。

我也准备好使用模板化代码,但我不确定要模板化什么。请建议。

0 投票
2 回答
1351 浏览

c++ - 是否存在不将元数据存储在其分配中的自定义内存分配器设计模式?

基本上,我需要一个内存池来快速分配小对象。理想情况下,我想用 cudaMalloc 替换主机上的分配,以及 GPU 上分配的内存。我可以自己写,如果必须的话我会写,但我不介意换一个可靠的开源实现。

唯一的问题是,使用 cudaMalloc,内存池无法触及分配的内存。我的理解是,许多(全部?)常见的内存分配器,如标题中的那些,在分配的数据中存储少量元数据。因此他们不会工作。

有谁知道不是这种情况的内存分配器?

0 投票
2 回答
1511 浏览

c++ - 智能指针内存池

我正在开发一个大型的旧代码库,该代码库使用内存池来获得极大的速度优势。但是,问题在于通过内存池分配和释放内存很复杂。我想尝试使用智能指针,但有人建议我,性能损失将是一个问题。

似乎出现的解决方案是一个智能指针实现,它继续使用引擎盖下的原始内存池。我找不到任何正在使用的智能指针/内存池组合。谁能指出我的示例实现?在尝试之前,我应该注意什么问题/注意事项?

0 投票
2 回答
1414 浏览

python - 垃圾收集时如何确保Python“归零”内存?

我在与bytesPython3.2 相关的内存管理方面遇到了一些麻烦。在某些情况下,ob_sval缓冲区似乎包含我无法解释的内存。

对于特定的安全应用程序,我需要能够确保内存“归零”并在不再使用后尽快返回操作系统。由于重新编译 Python 并不是一个真正的选择,我正在编写一个可与​​ LD_PRELOAD一起使用的模块:

  • PyObject_Malloc通过用PyMem_MallocPyObject_ReallocwithPyMem_ReallocPyObject_Freewith替换来禁用内存池PyMem_Free(例如:如果你编译时不使用 ,你会得到什么WITH_PYMALLOC)。我真的不在乎内存是否被池化,但这似乎是最简单的方法。
  • 包装malloc, realloc, 等free以跟踪请求的内存量以及memset释放0的时间。

粗略一看,这种方法似乎效果很好:

最后的错误\x13很奇怪,但不是来自我的原始值,所以起初我认为它没问题。我很快找到了一些不太好的例子:

这里最后三个字节ous, 幸存下来。

所以,我的问题:

对象的剩余字节是怎么回事bytes,为什么在del调用它们时它们不被删除?

我猜我的方法缺少类似于 a 的东西realloc,但我看不出那会是什么bytesobject.c

我试图量化垃圾收集后剩余的“剩余”字节数,它在某种程度上似乎是可预测的。

编辑 1

我最初表示担心如果bytes对象在函数中使用它根本不会被清理:

事实证明,这是我的要求未涵盖的人为问题。您可以查看对此问题的评论以获取详细信息,但问题来自hello_forever.__code__.co_consts元组将包含对Hello, World!即使 afteralocals.

在实际代码中,“安全”值将来自外部源,永远不会被硬编码,以后也不会像这样被删除。

编辑 2

我还对strings. 有人指出,它们也可能会遇到与bytes在函数中硬编码它们相同的问题(例如:我的测试代码的工件)。它们还有另外两个风险,我无法证明这是一个问题,但会继续调查:

  • 字符串实习是由 Python 在各个点完成的,以加快访问速度。这应该不是问题,因为当最后一个引用丢失时,应该删除实习字符串。如果它被证明是一个问题,它应该可以更换PyUnicode_InternInPlace,这样它就不会做任何事情。
  • Python 中的字符串和其他“原始”对象类型通常保留一个“空闲列表”,以便更快地为新对象获取内存。如果这被证明是一个问题,则可以替换*_dealloc中的方法。Objects/*.c

我还相信我看到了类实例没有正确归零的问题,但我现在认为这是我的错误。

谢谢

非常感谢@Dunes 和@Kevin 指出了混淆我最初问题的问题。这些问题已留在上面的“编辑”部分以供参考。

0 投票
1 回答
356 浏览

c++ - boost::pool 实际内存分配

我正在尝试使用boost::pool来自#include "boost/pool/pool.hpp".
我想检查分配了多少内存,boost::pool所以我运行system("ps aux | grep myProgramExe | grep -v grep | awk '{print $5}'");给我的命令(来自ps手册页)VSZ - virtual memory size of the process in KiB (1024-byte units). Device mappings are currently excluded; this is subject to change. (alias vsize).

我得到了一些奇怪的东西:

  1. 代码(代码缩进 4 个空格,再加上 4 个空格,因为它嵌入在列表中

    /li>

输出是:

这很奇怪,因为:
a。我只想分配 4 个字节(next allocation应该只有 1 个实例)。
湾。当块结束并且pool死亡时,内存没有被释放。

  1. 现在我想分配大小为 128 的实例,我想在下一次分配中像这样分配 1024:

    /li>

输出:

这很好,因为:

一个。我想分配128 * 1024 = 131072字节,并得到19040 - 18908 = 132KB = 135168字节。135168 - 131072 = 4096字节(我认为这只是头顶的池)。
湾。当块结束时,内存被释放。

  1. 析构函数

    /li>

输出:

这很奇怪,
一个。由于某种原因,已经分配了大小(在我调用 .b 之前)。大小没有pool.malloc()在.
delete

这可以解释吗?
我是否需要使用其他工具而不是ps查看程序使用的内存?

0 投票
3 回答
16665 浏览

c++ - 内存池背后的常见实现细节是什么?

我试图了解使用内存池进行内存管理,但我找不到太多关于它的信息,即使它似乎是一种非常常见的机制。

我所知道的只是每个维基百科的“内存池,也称为固定大小的块分配”,我可以使用这些块为我的对象分配内存。

有没有关于内存池的标准规范?

我想知道这在堆上是如何工作的,它是如何实现的,以及应该如何使用它?

这个关于 C++11 内存池设计模式的问题中,我读到:

如果您还没有,请熟悉 Boost.Pool。来自 Boost 文档:

什么是池?

池分配是一种内存分配方案,速度非常快,但使用受限。有关池分配(也称为简单隔离存储)的更多信息,请参阅概念概念和简单隔离存储。

我可以理解他的意思,但这并不能帮助我理解如何使用它们以及内存池如何帮助我的应用程序,以及如何实际使用它们。

一个显示如何使用内存池的简单示例将不胜感激。

0 投票
1 回答
162 浏览

c - Windows 应用程序的 C 中的内存池(对 C++ 不感兴趣)

我试图理解 C 中的内存池概念。我理解内存池是一个具有固定大小的预分配内存空间。但我想知道是否有任何标准库或 API 可以帮助在 C 中实现内存池?

我不想在 C 中实现我自己的内存池,我正在为我的 C 程序寻找一些可以执行内存池操作的标准 API 或 LIB

0 投票
2 回答
24660 浏览

c++ - HEAP 错误 指定给 RtlValidateHeap 的地址无效

我有记忆问题。我以这种方式使用结构:

包.h 文件

包.cpp

在方法中:

在括号结束后它会抛出错误:"HEAP[zad2.exe]: Invalid address specified to RtlValidateHeap( 00000056FEFE0000, 00000056FEFF3B20 )" 我不知道我做错了什么。请帮忙,迈克尔。

编辑:现在它正在为循环的第一次迭代工作。帮助我将析构函数更改为:

但是现在析构函数在循环的第二次迭代中对同一个结构对象执行了两次。

0 投票
1 回答
543 浏览

c++ - 内存池的初始块大小

我正在使用 C++ 模板实现一个内存池类,我想知道块的大小可能是多少。例如:

在上面的示例中,块大小实际上取决于T要创建的元素数量的类型和默认值。这样做的最佳(或常见)做法是什么?我应该在这里考虑块大小的内存对齐吗?