- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有 .hgt 文件,其中包含 (1201x1201) 个 16 位整数。我将此文件存储在最高级别为 5 的四叉树中。在级别 5 的叶子中,我有点数组列表:
public class Point {
short x,y,v;
}
x,y - 坐标,v - 海拔。
一切正常,但它需要太多内存,因为我正在创建 1201x1201= cca 1.44M 的对象。我在移动应用程序 (Android) 上工作,所以这是个问题,因为插入所有点需要超过 20 秒,它会“吃掉”所有内存。有什么办法可以减少这种情况吗?
堆大小:49.258 MB
已分配:44.733 MB
数据对象:(计数:1 477 454),(总大小:34.081 MB)
最佳答案
我不是 JVM 专家,但上次我检查了一个 Java 对象有 8 字节(64 位)的元数据,它似乎同样需要 64 位对齐。这在 32 位 Android 设备上可能有所不同,但根据我的发现,您的 Point
对象需要 16 个字节而不是 6 个字节,如下所示:
public class Point {
// 8 byte metadata
// 6 bytes of data.
short x,y,v;
// 2 bytes of padding for alignment of metadata.
}
...类似的东西。因此,这比 3 个 16 位 shorts
最佳所需的内存使用量多 2.67 倍。因此,将点的内存减少到一半以下并改善引用局部性的一种解决方案是将所有内容存储在一个或多个巨大的 short
数组中,例如:
short xyz[num_points * 3];
这将需要非常、非常、非常接近最佳内存量(只需一点点开销,在这种情况下绝对微不足道,以存储数组的一些元数据,例如其长度)。
也就是说,假设 Point
是 16 字节,这只能解释大约一半的爆炸性内存使用(点约 23 兆字节)。另一个很可能是您的四叉树节点本身。不过,如果使用上述技术,您可以将其从 23 兆字节减少到 ~8.6 兆字节。
对于剩余的内存使用,我的第一个建议是避免为每个叶节点存储一个单独的 ArrayList
。例如,您可以只存储一个大数组列表中第一个点的索引(整棵树只存储一个),并且可能还有一个整数表示该叶子中存储的元素数。这是一个 C-ish 伪代码示例,但您应该能够使您的四叉树节点至少像这样:
struct QuadTreeNode
{
// Stores AABB.
float x1, x2, y1, y2;
// Stores first child or -1 if empty.
int first_child;
// Stores first element or -1 if this is not a leaf.
int first_element;
};
struct QuadTree
{
// Stores all the nodes in the quad tree. The 4
// children of a node are stored contiguously.
QuadTreeNode nodes[];
// Stores all the elements in the quad tree. The
// elements at the leaves are stored contiguously.
Element elements[];
};
这甚至不是很紧凑,但它相当紧凑。
关于java - 如何在内存方面为四叉树叶的 "organize"数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28732780/
有两个资源组织,但配置文件不同,配置文件将如何产生差异? 它与 r4.organization 有什么不同? @ResourceDef(name="Organization", profile="h
我想知道你们中有谁可以在同一天处理多个项目,而每个项目只花很短的时间。或者,如果您能够在同一小时内同时进行两个或三个或更多项目。我有很多事情要做,我开始想知道我怎么能做到这一点?我考虑过使用多个工作区
在我的 C 项目中,我有一个相当大的 utils.c 文件。它真的充满了许多不同种类的实用程序。只是在里面塞了不同的杂项功能,我觉得有点顽皮。例如,它有一些与低级内容相关的实用程序,例如小写()函数,
Closed. This question is off-topic 。它目前不接受答案。 想改善这个问题吗? Update the question 所以它是堆栈溢出的 on-topic。 9年前关
您如何为您的主文件夹中的代码项目组织您的个人工作区?您如何保持工作空间高效地同时处理多个项目? 我的问题最重要的方面在上面。除非您想解决该主题的特定子部分,否则您可以停止阅读。以下是有关工作空间组织的
将开发项目(例如 ASP.NET MVC 应用程序)拆分为多个项目的常见原因是什么?代码组织也可以通过文件夹来完成。多个项目往往会产生循环引用冲突,并通过管理/解决这些冲突来增加复杂性。 所以为什么?
我今天想知道人们在决定将一个源文件拆分成多个较小的文件之前通常在一个源文件中有多少代码。 就我个人而言,我倾向于保持我的文件相当小(在使用 C/C++ 时尤其是头文件)。也就是说,我通常在给定文件中只
我在文件夹组织方面遇到了一些困难,无法组织我正在处理的许多项目。我在 OS X 上工作 - 现在我使用 ~/Development/作为根文件夹,并且我有很多类型的项目。例如,我的 iPhone 应用
它与编程无关,但肯定与开发有关。 我需要一份人类口语列表(通常我们会在其他所有网站上看到可供选择), 在我们的一个项目中需要。如果还包含语言代码信息,并且在 中,那就太好了.txt 格式或任何其他可提
我在 Unix 系统上得到了这个文件路径: Folder1/Folder2/text.txt Folder1 仅包含Folder2,Folder2 包含该文件。所以文件test.txt的路径可以更短-
我想在我的网站上放置一个 Schema.org Organization 项。 我应该只将 JSON-LD 放在联系页面上,还是可以将它添加到网站的每个页面上?什么是最好的解决方案? 最佳答案 使用
您如何到达XCode Provisioning Organizer? 最佳答案 在Xcode中,从“窗口”菜单中选择“管理器”,您将获得一个窗口,该窗口为您提供有关设备和置备配置文件的各种信息。另外,
我正在设置一些用于网站开发的服务器。我希望它以一种相当标准的方式组织起来。你如何组织你的服务器来开发相对较小的网站,每个网站都有一点独特的代码? 我关注的一些细节包括(但不限于): 在开发过程中存在哪
我正在制作我自己的方便函数的小库,并且我正在尝试遵循 Phobos 的命名约定,但我真的很困惑。我怎么知道东西适合哪里? 例子: 如果有像 foldRight 这样的函数在 Phobos 中(基本上是
我在我的 Mac 上设置了多个开发者帐户,现在需要退出我的帐户才能访问其他人的资源。我在任何地方都找不到这样的选择。 知道如何退出 Xcode Organizer 吗? 最佳答案 在最新的 xcode
我目前正在尝试了解 AngularJS 涉及的所有概念,它非常大。我理解了大部分内容,但我仍然不知道如何组织你的应用程序。 让我们举个例子:在主页上,我有几个 block :每个 block 都是简单
查看 matplotlib 文档,我发现了这个示例: http://matplotlib.org/users/tight_layout_guide.html import matplotlib.pyp
我有 .hgt 文件,其中包含 (1201x1201) 个 16 位整数。我将此文件存储在最高级别为 5 的四叉树中。在级别 5 的叶子中,我有点数组列表: public class Point {
我正在为我的应用查看来自 Xcode Organizer 的崩溃报告。 我在下面的屏幕截图中看到了“+ 92”。什么意思? 最佳答案 这应该是方法内部发生错误的位置。如果您使用调试信息格式 dwarf
我可以拥有多个分发证书吗?我正在开发一个应用程序,但当前证书不是我创建的,而是用于另一个应用程序的。该应用程序和证书是由不再在这里的其他人完成的。 我下载了 vert,但在管理器中它告诉我,找不到有效
我是一名优秀的程序员,十分优秀!