首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何降低java程序的内存消耗

如何降低java程序的内存消耗
EN

Stack Overflow用户
提问于 2012-06-17 02:13:38
回答 3查看 2K关注 0票数 0

我有一个Java 3D程序,其中使用了许多(数百)的3D模型(3ds和obj)。我使用的模型越多(我真的,真的必须这样做,这是一种真实世界物体的3D模型),程序就会变得越繁重,直到任何一项操作都需要很长时间才能完成。

CPU消耗很少达到50%,大部分在10%-30%之间移动,但内存消耗随着每个添加的3D模型而(明显)增长。

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

我用GCViewer检查了GC日志,没有发现任何可疑的东西。

我知道在SO上有一些非常相似的问题,但没有一个确切地回答了我的问题。

我的集成开发环境是IntelliJ 11。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-06-17 02:27:51

有两种简单的方法可以减少正在创建的对象的数量,其中一种或两种都可以满足您的目的,尽管没有规范,我不能确定。

1)使用高度可变的对象。如果您需要模拟大量具有极大相似性但不必彼此交互的事物(例如,对十几个粒子相互作用的十万次模拟,每次的粒子略有不同),则反复使用相同的十几个对象,并利用mutator函数将负担转移到CPU。但是,考虑到Java已经有内置的垃圾收集,我怀疑按顺序使用许多对象对您来说是一个问题。

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

代码语言:javascript
复制
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字段所需的内存量的四分之一,否则将为每个苹果复制这些字段。

票数 4
EN

Stack Overflow用户

发布于 2012-06-17 02:30:15

我可以想到两种不同的方法来处理你的问题:

垃圾收集器的

  • 控制:here是一篇完整的文章,描述了如何控制垃圾收集器以及用于清理内存的不同算法。我发现当应用程序立即创建成千上万的DTO时,这种方法非常有用。

  • 如果您的应用程序没有创建太多很快被丢弃的对象,那么我建议您查看一下您的模型,并提高它的效率。请记住,在处理3D可视化时,最重要的是如何构建场景图。

顺便说一句,当使用基于OpenGL的解决方案时,3D可视化不会占用那么多CPU。这主要是因为渲染场景图时涉及的是GPU,而不是CPU。

票数 1
EN

Stack Overflow用户

发布于 2012-06-17 02:33:25

在我看来,你有两个选择:

  1. 通过使对象不可变来减少创建新对象,如果对象不变则重用它们
  2. 使用flywieght模式-重用创建的对象并使用其上的setter,而不是一次又一次地创建新的对象-这是一个很好的实现示例,它可能恰好适合您的需要http://www.javacamp.org/designPattern/flyweight.html -它是关于创建颜色圆。在不使用flywieght的情况下,运行时间增加了2.5倍,内存消耗增加了约200倍。试试吧。
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11065905

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档