问题标签 [allocation]

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 投票
5 回答
601 浏览

java - 分配延迟似乎很高,为什么?

我有一个在低延迟环境中运行的(java)应用程序,它通常处理约 600 微秒(+/- 100)的指令。自然地,随着我们进一步进入微秒空间,您会看到成本延迟发生变化的事情,现在我们注意到 2/3 的时间花在了 2 个核心域对象的分配上。

基准测试已将有问题的代码部分从现有引用中分离出来,即从字面上构建对象,即基本上是大量引用(每个类中约 15 个)和几个新列表,尽管请参阅下面的注释以了解准确测量的内容这里。

每个人始终需要〜100micros,这对我来说是莫名其妙的,我正试图找出原因。一个快速的基准测试表明,一个类似大小的充满字符串的对象大约需要 2-3 微秒才能新建,显然这种基准测试充满了困难,但认为它可能作为基准有用。

这里有2个Q

  • 如何调查这种行为?
  • 分配缓慢有什么解释?

请注意,所涉及的硬件是 Sun X4600 上的 Solaris 10 x86,具有 8 个双核 opterons @ 3.2GHz

我们看过的东西包括

  • 检查 PrintTLAB 统计信息,显示 v 几个缓慢的分配,所以那里不应该有争用。
  • PrintCompilation 表明其中一段代码不是 JIT 友好的,尽管 Solaris 在这里似乎有一些不寻常的行为(即与现代 linux 相比,现在没有与 solaris10 类似的老式 linux 可供使用)
  • 日志编译...至少可以说有点难以解析,所以这是一项持续的工作,到目前为止还没有什么明显的
  • JVM 版本... 6u6 和 6u14 一致,尚未尝试 6u18 或最新 7

任何和所有想法表示赞赏

对各种帖子的评论摘要,以尝试使事情更清晰

  • 我正在测量的成本是创建通过 Builder(如其中之一)构建的对象的总成本,私有构造函数调用 new ArrayList 几次以及设置对现有对象的引用。测量的成本包括设置构建器和将构建器转换为域对象的成本
  • 编译(通过热点)有显着的影响,但它仍然相对较慢(在这种情况下,编译将其从 100 微秒降至约 60 微秒)
  • 在我的幼稚基准上编译(通过热点)将分配时间从 ~2micros 减少到 ~300ns
  • 延迟不随年轻一代收集算法(ParNew 或并行清除)而变化
0 投票
6 回答
2822 浏览

c++ - 在所有 '_atexit()' 函数完成后,如何安排一些代码运行

我正在编写一个内存跟踪系统,我实际遇到的唯一问题是,当应用程序退出时,任何未在其构造函数中分配但在其解构函数中释放的静态/全局类在我的内存之后释放跟踪的东西已将分配的数据报告为泄漏。

据我所知,我正确解决此问题的唯一方法是强制将内存跟踪器的 _atexit 回调放置在堆栈的头部(以便最后调用它)或让它在整个_atexit 堆栈已展开。实际上是否可以实现这些解决方案中的任何一个,或者是否有另一个我忽略的解决方案。

编辑:我正在为 Windows XP 开发/开发并使用 VS2005 进行编译。

0 投票
5 回答
24208 浏览

c++ - 在 C++ 中传递固定大小的数组?

基本上我想做这样的事情:

但这在 C++ 中似乎不合法。我知道我可以使用向量,但由于我知道数组的大小是一个常数,因此似乎很可能会出现性能损失。如果可以的话,我也想避免new,因为在堆栈上分配东西更容易,也可能提高性能。

这里有什么解决方案?

0 投票
9 回答
64914 浏览

c++ - 如何在 C++ 中分配一个二维指针数组

我正在尝试使指针指向二维指针数组。语法是什么,我将如何访问元素?

0 投票
1 回答
477 浏览

memory-management - JVM 和 CLR 分配优化

JVM 和 .NET VM 是否在运行时很明显对象的生命周期被限制在某个范围内时会在堆栈上分配对象?

0 投票
5 回答
1790 浏览

c++ - C++ 动态分配数组

我正在做一些作业,但在这里被卡住了。我正在尝试编写一个 list_add() 函数。它的第一个功能是向数组添加值。它的第二个功能是增加数组的大小。所以它的工作原理很像矢量。我不知道我是否做对了。我尝试的是创建一个比旧数组更大的新动态分配数组,然后将所有值复制到新数组中。

这是正确的方法吗?

这里是主体

这是功能

0 投票
3 回答
1474 浏览

c++ - 如何为静态多维数组分配内存?

全部,

这一直困扰着我一段时间。在 C\C++(我猜 java 和 .NET 也是如此)中,我们不必在多维数组中指定行索引。因此,例如,我可以这样声明一个整数数组:

整数数组[][100];

我认为静态数组通常表示为堆栈上的连续内存。那么,以列为主表示,编译器如何知道在上述情况下要分配多少内存,因为它缺少一个维度?

0 投票
5 回答
13035 浏览

memory-management - CUDA 分配数组数组

我在 CUDA 中分配数组时遇到了一些麻烦。

我做错了什么?

0 投票
2 回答
708 浏览

objective-c - alloc/init 和实例变量的设置

我的理解是,除了分配内存之外,alloc将所有实例变量(isa变量除外)设置为零或为零的等效类型,例如nil,NULL0.0.

但我最近阅读了以下关于init:

初始化将对象的实例变量设置为合理且有用的初始值。

我对“合理且有用的初始值”的含义有点困惑......

如果alloc已经将值设置为零,是否init以任何方式更改这些值?

0 投票
8 回答
14281 浏览

c - 在免费调用之前检查 NULL

许多 C 代码释放指针调用:

但为什么?我认为 C 标准说该free函数在给定 NULL 指针的情况下不做任何事情。那么为什么要进行另一个明确的检查呢?