问题标签 [memory-footprint]

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 投票
2 回答
3379 浏览

php - Laravel Queue Worker 内存占用太大:/

我正在运行一个连接到六个 MQ 的队列工作程序。启动时,它会消耗 25MB 的 RAM。那就是队列上的作业为零,即工作人员处于睡眠状态。我的所有项目都使用 Larvel,这个特定的项目纯粹是为队列工作者构建的(即没有 Web 访问的微服务)。

我想减少内存占用,但更重要的是我想知道内存在哪里被消耗。我正在使用 PHP 7.1,所以现在 xhprof 不再配置内存,我必须找出替代方案。

我知道 Lumen 是为了消耗更少的内存,至少 Lumen 似乎是Laravel的一个子集。是否可以“关闭”我的 Laravel 应用程序的某些部分以模仿 Lumen?我尝试从 config/app.php 数组中注释掉行$providers,但内存消耗似乎没有太大差异(根据我的测量约为 1MB)。

tl;博士; 如何“调整” Laravel 内存占用?如何将 Laravel 变成 Lumen?

谢谢

编辑:图片或它没有发生。AFAIK RES 列以千字节为单位,因此内存约为 39MB。

RES == 39MB

0 投票
1 回答
321 浏览

operating-system - 占用空间/核心操作系统为 400 字节是什么意思?

我正在为一项学校作业研究 TinyOS,并读到“核心操作系统为 400 字节”,另一个消息来源说“TinyOS 的占用空间为 400 字节”这到底是什么意思?它是它在硬盘驱动器上占用的实际空间吗?Windows 等“传统”操作系统有多大?

我发现“足迹”实际上意味着什么的答案也令人困惑。因为它似乎意味着实际的物理空间和内存/磁盘空间。

0 投票
1 回答
273 浏览

architecture - fo-dicom 内存占用和速度问题

到目前为止,我从未使用过 fo-dicom,所以我有更多问题想知道它是否可以帮助我们,或者我唯一的选择是长期开发低级 SDK 代码。我想使用托管 SDK,而 fo-dicom 似乎越来越广泛。

我的问题:

  1. 仅使用微不足道的内存进行发送时,是否可以即时编写大型实例或创建大型实例?我应该创建一个每帧组序列,其中包含数亿个项目和具有相同数量(小)帧的像素数据。所以我的意思是我们应该支持流媒体。
  2. 当实例只需要特定帧时,是否可以避免将大量序列加载到内存中?
  3. 是否可以通过在包含的像素数据中给出其序号而不将其他部分加载到内存中来压缩或未压缩一帧?
  4. 我需要一种机制来在写入或发送期间找出未定义长度序列的最终长度。我会将它存储在另一个实例的私有属性中,并且我想使用该长度来跳过阅读巨大的序列,从而为观众提供帧。
  5. 字符集处理是否已经可用?(我们也有亚洲、阿拉伯和其他客户)。我们的输出默认为 UTF8。

  6. 如果只考虑工作清单,是否有更易于用于工作清单开发的托管 SDK?

我什至很乐意为 fo-dicom 的开发做出贡献,但它的架构是否适合在不进行大量重构的情况下用这些功能补充它是一个问题。提前感谢您提供任何信息/帮助。

0 投票
0 回答
79 浏览

java - JVM 进程内存使用与 Yourkit 分析器不匹配

任何有用的建议将不胜感激,在此先感谢。

我的 java 应用程序必须有一个非常严格的 java 内存占用限制。

使用 Yourkit 分析我的 java 应用程序,该应用程序使用 -Xmx40M 堆限制在 MAC 上使用 Java 1.8 运行,它显示出相当稳定的内存使用情况:

  • ~40M 非堆
  • ~20M 的堆大小

每个 Yourkit 的内存使用情况如下所示

~

我试图弄清楚的谜团,为什么数据 MACtop命令显示与我通过 Yourkit 工具看到的不匹配。

在此处输入图像描述

事实上,我期待看到像 70M 这样的东西。

我知道JVM进程有一定的开销。有什么解释为什么它需要我的应用程序需要的两倍。有没有办法通过任何方式解决、最小化或控制它。

谢谢

0 投票
2 回答
99 浏览

c++ - 减少构建 BigInt 类的内存占用

我目前正在研究一个概念,并且在问这个问题时正在编写伪代码。我正在考虑制作一个相当简单易用的类接口来表示 BigInts。我正在考虑制作几个具有 BigInt 类将使用的基本属性和成员的简单结构。例如,它不是直接处理负值的 BigInt 类,而是包含一个 Sign 结构,并且这个结构基本上包含一个值 0 或 1,或者基本上是一个布尔类型来指定这个 BigInt 是正数还是负数。在构建时,我打算让该类默认生成一个正数。我还想有一个结构来表示有两个变体的数字。第一个变体具有数字 0-9,第二个变体将继承原始变体但也包括 AF。这样,作为模板类但只有两种有效类型的类将支持十进制和十六进制的使用。所有数学运算符都将在类之外定义,并且根据其推断类型,它将调用并执行适当版本的函数。然而,十六进制部分仍然只是概念,因为我想首先启动并运行十进制版本。这些帮助类可能看起来像这样:希望首先启动并运行十进制版本。这些帮助类可能看起来像这样:希望首先启动并运行十进制版本。这些帮助类可能看起来像这样:

两者之间的主要区别在于,第一个特化只允许 0-9 的数字值和 0-9 的数字本身,而第二个没有该限制,但也允许从 af 和或 AF 任何一种情况都有效。我还可以包含一个 const char* 来指定0x将附加到任何包含的值以进行显示的十六进制前缀。

我喜欢这种设计方法,因为我想将 BigInt 类的实际算术函数和运算符保留为单独的函数模板,因为 BigInt 类可以支持 Decimal 和 Hexadecimal 专用模板类型。如果一切顺利,我还想添加支持以使用复数。

BigInt 类将是这样的:

如上所述,这也适用于十进制和十六进制类型,但是如果有人创建了 BigInt<> myBigInt 的实例,则默认为十进制!

对于向量中包含的数据。我想以与阅读内容相反的顺序存储数字。因此,如果它们是345698BigInt 内部向量中的一个数字,它将存储为896543. 这样做的原因是,当我们在数学中进行算术运算时,我们从小数点左侧的右侧开始从最低有效位到最高有效位,这是无关紧要的,因为这是一个仅限 BigInt 的类,我们以自己的方式工作左边。但是,如果我们以正确的顺序在上述类的向量的每个元素中存储每个只能是 0-9 的数字,并且我们使用外部 operator+() 函数,这对于一个 BigInt 到另一个来说将是具有挑战性的......例如:

这里 <5> 和 <8> 的索引不重合,所以这使得很难弄清楚如何将一个有几个数字的值添加到一个有多个数字的值。我的方法是,如果我们以相反的顺序存储数字:

那么加法就变得简单了!我们所要做的就是将 BigInt 的两个向量中的每个数字加上相同的索引值。我们可以使用进位数字来结转到下一个字段。生成的 BigInt 返回的大小至少等于或大于两个 BigInt 中最大的一个。如果 carryDigit 有一个值,那么下一次迭代的加法运算将包括 3 个加法而不是 2 个。现在,当获取 BigInt 进行显示时,我们可以返回一个向量>,除了当用户获取它时,这不是“BigInt”,它是数字向量,并且它的顺序也是正确的。它甚至可以通过字符串表示形式返回。这个类可以由一个vector>构造,它在内部存储时会颠倒顺序。

这是我的 BigInt 类的总体概念,我只是想知道这是否是一个好的设计计划,是否会被认为是有效的,我想我的主要问题是关于使用什么来存储实际数字Digit 的类...是否适合保存内存占用空间,或者使用 a而不用担心额外的空间std::bitset<>会更好,因为 pro 更易于实现?char

0 投票
1 回答
44 浏览

performance - docker-compose 与相似的图像

我目前有一个在 PI3+ 上运行的 Docker 实例,并在不同的容器上包含以下图像:

  • lsioarmhf/声纳
  • lsioarmhf/雷达
  • lsioarmhf/夹克

由于这三个图像共享许多通用库(即单声道),我想知道是否有办法减少它们的内存和 CPU 使用量。

为了做到这一点,我考虑了两种可能性:
1)构建和维护我自己的图像(基于 lsioarmhf 在 github 上的图像)以包含三个图像

2)使用码头工人撰写

谁能告诉我 docker compose 是否会减少相似图像的常见元素的内存占用?
执行三个单独的容器是否相同?

谢谢,

0 投票
1 回答
147 浏览

java - What is the java.lang.Integer retained size?

I'm using Java Hotspot 1.8.0_191-b12 (64 bit, Xmx < 32 GB) and I'm looking at a jmap dump (hprof format) with various tools.

VisualVM (and NetBeans profiler based tools) reports differ a lot from Yourkit and Eclipse Memory Analyzer.

I looked at the most simple objects, and even those differ... for java.lang.Integer, VisualVm reports 20 bytes, instead of 16 as the others (that in my interpretation is because = 12 bytes header + 4 bytes int 'value' filed from the Integer class = 16, no padding needed).

Which one is correct and why?

0 投票
0 回答
43 浏览

memory-management - 垃圾收集是否需要更大的内存占用?

使用垃圾收集的语言是否一定比具有手动内存管理的语言(例如 C、C++ 或 Rust)具有更高的内存占用?

对于上下文,我正在考虑嵌入式系统,但问题是一般性的

0 投票
1 回答
543 浏览

spring-boot - 如何从 Spring Boot 应用程序中删除膨胀以减少内存占用和启动时间?

即使是简单的 Spring Boot 应用程序 jar 也包含许多您的应用程序永远不会使用的依赖项和功能。所有这些东西:

  • 应该加载它需要时间

  • 许多这些类应该被实例化、初始化并且会消耗内存和资源。

对于内存占用可能是代价(例如https://run.pivotal.io/pricing/)和/或启动时间很重要的微服务架构和云原生应用程序来说,这可能是至关重要的。

例如spring-boot-autoconfigure-2.1.6.RELEASE.jar (1.2Mb) 包含couchbasefreemakercassandra和许多其他的,有 99% 的可能性永远不会用于您的特定项目。或者spring-core-5.1.8.RELEASE.jar (1.2Mb) 包含KotlinDetector之类的类。严重地?在核心库中?我永远不会使用这种充满 OOP 反模式的丑陋语言。为什么我应该在我的应用程序中关注它?

我为什么要为所有这些无用的东西买单?

我试图使用 ProGuard 来摆脱所有未使用的类和方法。但是对于使用反射 API、AOP 甚至调试信息的 Spring Boot、Hibernate 等来说似乎没有办法!ProGuard 甚至无法在没有错误的情况下完成,抱怨缺少某些类。

使用jlinkGraalVM 原生镜像和原生构建的另一个想法。我发现了一堆关于那个的文章。据我了解,目前不可能将其用于 Spring Boot 应用程序。

Spring Boot 是构建应用程序的好工具。

问题:有没有办法从你最终的 Spring Boot jar/war 中删除所有未使用的东西?

0 投票
1 回答
191 浏览

kotlin - 如何以内存高效的方式使用 Kotlin 的序列和 lambda

所以我正在编写一些既需要内存效率又需要快速的代码。我已经在 java 中有一个工作参考,但正在用 kotlin 重写它。

我基本上需要加载很多 csv 文件并将它们加载到树中一次,然后在加载后重复遍历它们。

我最初使用序列编写了整个内容,但发现它会导致 GC 反复飙升。

我不能真正分享这段代码,但想知道你们是否知道会导致这种情况发生的原因。

我很乐意根据您的需要添加细节,但这是我的基本模式。

步骤1:inputStream -> csvLines: List<String>

第2步:csvLines.drop(x).fold(emptySequence()) -> callOtherFunctionWithFold -> callOtherFunctionWithFold -> Sequence<OutputObjects>

我将 csvLines 保留为单独的列表,因为我正在根据我需要的规则访问特定的行。

第三步:Sequence<OuputObjects> -> nodes

结果是功能性的,但是与仅使用数组列表并就地修改它们的 java 等效代码相比,此代码的内存效率和性能要低得多。

在查看了 visualvm 输出后,我创建了大量的 kotlin.*.ArrayIterators。看起来我每次使用 lamda 时都会创建一个。

那么我能做些什么来提高效率呢?我虽然序列应该减少对象创建的惰性,但看起来我正在做的事情破坏了它这样做的能力。

GC 运行或一般运行后是否会重新评估序列?如果是这样,那会使它们不适合在启动时加载的对象中使用,对吗?

视觉虚拟机运行