gpt4 book ai didi

java - 如何减少java程序的内存消耗

转载 作者:行者123 更新时间:2023-12-01 16:34:18 25 4
gpt4 key购买 nike

我有一个 Java 3D 程序,它使用大量(数百个)3D 模型(3ds 和 obj)。我使用的模型越多(我真的非常需要,它是现实世界对象的 3D 模型),程序就会变得越重,直到任何单个操作都需要很长时间才能完成。

CPU 消耗很少达到 50%,大多数在 10%-30% 之间变化,但内存消耗随着每个添加的 3D 模型而增长(显然)。

我知道如何最小化 c++/c 程序的内存印记,但是对于 Java 的 GC,除了使用 -Xmx 增加 JVM 的内存之外,我还能做些什么吗?我已经使用 -xMx512Mb 运行。

我使用 GCViewer 检查了 GC 日志,没有发现任何可疑内容。

我知道 SO 上有一些非常相似的问题,但没有一个能准确回答我的问题。

我的 IDE 是 IntelliJ 11。

最佳答案

有两种简单的方法可以减少您创建的对象数量,其中一种或两种都可以满足您的目的,但如果没有规范,我无法确定。

1) 使用高度可变的对象。如果您需要模拟大量具有大量相似性的事物,但它们不必彼此相互作用(例如,十万次模拟十几个粒子相互作用,每次粒子都略有不同),然后一遍又一遍地使用相同的十几个对象,并利用变异函数将负担转移给CPU。不过,我怀疑按顺序使用多个对象对您来说是个问题,因为 Java 已经具有内置的垃圾收集功能。

2) 将相似对象之间的相似性划分为自己的类。例如,如果您需要大量对象,并且您注意到其中很大一部分共享许多内存密集型特征,请将这些特征存储在它们自己的类中,并在每个对象中引用该类的单个实例。具有完全相同字段值的对象。例如,考虑一组 Apple 对象。您可以为 GrannySmithApples、MackintoshApples、RedDeliciousApples 创建不同的类,并使用它们自己的静态字段来表示跨类共享的特征(例如,RedDeliciousApples 在抽象类 Apple 中声明了一个静态 String 字段并设置为“red”),或者(以允许更多运行时的灵 active )每个类都可以有一个 CoreCharacteristic 实例。如果多个对象共享相同的核心特征,则代码:

CoreCharacteristic c = new CoreCharacteristic(<some parameters>);
Apple apple1 = new Apple(c);
Apple apple2 = new Apple(c);
Apple apple3 = new Apple(c);
Apple apple4 = new Apple(c);

将为所有四个苹果仅使用一个 CoreCharacteristic,将存储 CoreCharacteristic 字段所需的内存量四分之一,否则这些字段将为每个 Apple 进行复制。

关于java - 如何减少java程序的内存消耗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11065905/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com