- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我一直致力于生成分形轨道的 Java 程序已有一段时间了。就像照片一样,图像越大,缩小时效果越好。该程序使用二维对象(点)数组,在计算点值时写入该数组。也就是说Point是存储在它对应的值中的,即:
Point p = new Point(25,30);
histogram[25][30] = p;
当然,这是为简单起见而编辑的。我可以将点值写入 CSV,稍后将它们应用于栅格,但使用类似的方法会产生不良结果。我尝试了很长一段时间,因为我很高兴能够通过没有这个阵列释放的空间来制作更大的图像。它只是行不通。为清楚起见,我想补充一点,Point 对象还存储颜色数据。
下一个问题是 WriteableRaster,它将具有与数组相同的维度。两者结合占用大量内存。我已经开始接受这一点,在多次尝试改变它的完成方式之后,每次都获得较低质量的结果。
在尝试针对内存和时间进行优化后,我得出的结论是我确实受到 RAM 的限制。这就是我想改变的。我知道 -Xmx 开关(设置为 10GB)。有什么方法可以使用 Windows 的虚拟内存来存储栅格和/或数组?我很清楚这会导致显着的性能下降,但除了降低质量之外,似乎真的没有太多选择。
最佳答案
操作系统已经为您和每个进程将硬盘驱动器空间转换为 RAM —— 不需要任何魔法。这将是一场比您想象的更严重的性能灾难;它会太慢以至于无法有效工作。
您在寻找内存映射文件吗? http://docs.oracle.com/javase/6/docs/api/java/nio/MappedByteBuffer.html
如果这真的要在内存中完成,我敢打赌您可以通过一些优化来显着降低内存使用量。例如,您的 Point
对象主要是开销而不是数据。计算引用所需的字节数,然后计算 Object
开销,与两个 int
进行比较。
使用两个大的并行 int
数组作为 x 和 y 坐标,您可以将开销减少到零。当然,您必须封装它以便在您的代码中进行访问。但它可以将此数据结构的内存使用量减半。减少数百万个对象也加快了 GC 运行。
与其将 WritableRaster
放入内存,不如考虑自己直接以某种简单的图像格式写出图像文件。 BMP 可以很简单。然后也许使用外部工具来有效地转换它。
尝试 -XX:+UseCompressedOops
来减少对象开销。还可以尝试 -XX:NewRatio=20
或更高版本,让 JVM 为长期存在的对象保留几乎所有的堆。这实际上可以让您使用更多堆。
关于Java堆硬盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13834686/
我创建了一个具有高级非托管磁盘配置的 Azure RM VM。我有 1 个 127GB 的操作系统磁盘和一个大小为 56GB 的临时磁盘。我的操作系统磁盘还包含 SQL Server 和 ShareP
我正在开发一个目录树比较工具,它可以跨多台计算机工作,通过 TCP 与其他实例通信。 该工具运行良好,但到目前为止一直依赖于可由用户更改的驱动器号和标签。可移动驱动器是另一个问题。 我想通过某种唯一的
我正在使用硬盘 ID 为我的软件生成许可证 key 。在我的机器中,我得到 15 个字符长度的 ID。所有制造商的硬盘 ID 的这个长度是恒定的还是在它们之间变化? 是否有任何公认的方法来解释硬盘 I
本文实例讲述了java实现获取cpu、内存、硬盘、网络等信息的方法。分享给大家供大家参考,具体如下: 1. 下载安装sigar-1.6.4.zip 使用java自带的包获取系统数据,容易找不到包
我正在探索将 Aerospike 作为键值数据库,并将数据存储在磁盘上以确保安全。请确认,我理解正确: 如果在命名空间配置中我设置: 存储引擎设备 内存大小4G 文件/opt/aerospike/da
看着海藻,想换minio。主要原因 - 海藻可以很容易地用任意数量的节点/磁盘扩大。 但是对我的基础设施有几个问题。现在我有 2 个节点,每个节点有 100 个硬盘(HPE CL5800),它们被包含
我目前正在编写一个 CUDA 应用程序,并且遇到了一些“喂养野兽”的 IO 问题。 我想知道是否有任何方法可以直接从 RAID Controller 或 NIC 读取数据并将该数据直接发送到 GPU。
如何衡量文件(硬盘)I/O 的特性?例如,在具有硬盘(速度 X)和 cpu i7(或任何数量的内核)和 Y 数量的 ram(使用 Z Hz BIOS)的机器上(在 Windows 操作系统上): 可以
就像标题一样,我在裸机主机上安装了 RancherOS 并且想要 动态处理外部 USB 硬盘的添加/移除。它应该可以作为其他容器的绑定(bind)挂载访问。 最佳答案 你可以这样做: # udev_c
我想实现以下目标。 这样做的目的是让用户能够从他/她的硬盘驱动器中选择一个文件。 而没有上传的原因当然是传输成本和存储配额。没有理由保存文件。 这可能吗? 最佳答案 可以播放本地视频文件。 当
我想实现以下目标。 这样做的目的是让用户能够从他/她的硬盘驱动器中选择一个文件。 而没有上传的原因当然是传输成本和存储配额。没有理由保存文件。 这可能吗? 最佳答案 可以播放本地视频文件。 当
对于这些实例,在 C++ 运行时,有人可以大致说明什么是什么(硬盘、RAM、堆栈或堆): 局部/全局变量 类、方法和函数 指针 对象 堆栈/堆是否都位于物理 RAM 中? 如果有人可以在答案中包含硬件
我是 Synology 的新手。我想要访问我的 Synology NAS 驱动器。我遵循 Synology_Download_Station_Official_API。 我阅读了基本工作示例以获取 A
我想知道Linux(特别是树莓派)是否可以实现将我的有线电视接收器连接到我的树莓派(主/从?)有线电视接收器认为树莓派是硬盘但同时允许网络中的客户端获取录制的电影(当然不是正在录制的电影) 我猜 WD
由于我在本地主机上构建了许多虚拟网络,并且 htdocs 文件夹中的数据每天都在增加。 我想将 htdocs 文件夹移动到外部硬盘,可以这样做吗? 我尝试编辑 httpd.conf 文件。但是当我打开
我是一名优秀的程序员,十分优秀!