当前位置: 首页 > 面试题库 >

指针-减少内存消耗

牟辰龙
2023-03-14
问题内容

我一直在为OpenGL练习编写Minecraft副本(据我估计很多),但是在编写了基本的渲染API之后,我注意到真正的Minecraft 占用了
大量 内存或内存-
大约800MB!我完全可以理解为什么它必须记住所有的块,以及生成器的小怪和地形数据……我问自己:“此块与该块完全相同。它们可以在代码中吗? ” 并记得C
++有指针,所以我试图用我能想到的唯一方法在Java中做同样的事情new,即为每个块创建一个静态实例而不使用关键字,这是最好的方法吗?似乎肯定有帮助。.如果可能的话,我仍然希望它会更好?
这是有问题的课程。

public abstract class Block {
    public static DirtBlock Dirt = new DirtBlock();
    public static GrassBlock Grass = new GrassBlock();
    public static RedstoneOreBlock RedstoneOre = new RedstoneOreBlock();
    public static TNTBlock TNT = new TNTBlock();
    public static MonsterSpawnerBlock Monserspawner = new MonsterSpawnerBlock();
    public static BedrockBlock Bedrock = new BedrockBlock();
    public static StoneBlock Stone = new StoneBlock();
    public static GlassBlock Glass = new GlassBlock();
    public static SandBlock Sand = new SandBlock();
    public static WaterBlock Water = new WaterBlock();
    public static SnowBlock Snow = new SnowBlock();
    public static SnowGrassBlock SnowyGrass = new SnowGrassBlock();
    public static IceBlock Ice  = new IceBlock();
    public static CoalBlock Coal = new CoalBlock();

对于100个块的世界,当前的内存使用量约为200MB,每个块由16个宽,64个高和16个深的块组成,总共1,638,400个块-每个块约128个字节。


问题答案:

是的 ,这是一个好方法。它被称为 轻量级
模式。但是,可以使用对象工厂代替静态字段。从长远来看,这将使您的代码更具可测试性。

计算机编程中,flyweight是一种软件设计模式。flyweight是通过与其他类似对象共享尽可能多的数据来最大程度减少内存使用的对象。当简单的重复表示将使用不可接受的内存量时,这是一种使用大量对象的方法。通常,对象状态的某些部分可以共享,通常的做法是将它们保存在外部数据结构中,并在使用它们时将它们临时传递给flyweight对象。

flyweight模式的一个经典示例用法是用于文字处理器中字符图形表示的数据结构。对于文档中的每个字符,可能希望有一个包含其字体轮廓,字体规格和其他格式数据的字形对象,但是每个字符总计达数百或数千个字节。相反,对于每个字符,可能都引用了文档中相同字符的每个实例共享的flyweight字形对象。只有每个字符的位置(在文档和/或页面中)都需要在内部存储。

从Wikipedia,http://en.wikipedia.org/wiki/Flyweight_pattern



 类似资料:
  • 本文向大家介绍详解如何减少python内存的消耗,包括了详解如何减少python内存的消耗的使用技巧和注意事项,需要的朋友参考一下 Python 打算删除大量涉及像C和C++语言那样的复杂内存管理。当对象离开范围,就会被自动垃圾收集器回收。然而,对于由 Python 开发的大型且长期运行的系统来说,内存管理是不容小觑的事情。 在这篇博客中,我将会分享关于减少 Python 内存消耗的方法和分析导致

  • 内存32位和64位的区别 ///01.Point.c #include <stdio.h> #include <stdlib.h> //01.指针变量所占用的内存尺寸由编译器进行直接决定 // 指针变量所占用的内存尺寸同时直接或间接与CPU-->操作系统-->编译器平台有关 // 综合决定:CPU-->操作系统-->编译器平台 // 直接决定:编译器

  • 我想知道何时或是否必须删除此对象。下面是一个基本类对象Object.cpp的构造函数: 我知道在分配内存时,你应该在某个时候删除它,但是我在构造函数中分配了内存,并且想再次使用变量1和2,我什么时候删除它们?

  • 问题内容: 我想问你如何减少Spring框架的RAM占用量。 我创建了一个简单的helloworld应用来演示该问题。只有两个类和context.xml文件: -主要方法课 -用于模拟某些“工作”的类(无穷循环中的printig Hello) 仅包含以下内容: 测试类仅包含称为的方法,构造后会调用: 我准备了两种情况,在这两种情况下,方法仅包含一行。 在第一种情况下,主要方法是这样做的: App在

  • 问题内容: 背景 我有一个Spring批处理程序,该程序读取一个文件(我正在使用的示例文件的大小约为4 GB),对该文件进行少量处理,然后将其写到Oracle数据库中。 我的程序使用1个线程读取文件,并使用12个工作线程进行处理和数据库推送。 我正在搅动很多年轻一代的记忆,这使我的程序运行得比我想象的要慢。 建立 JDK 1.6.18 春季批处理2.1.x 4核计算机,带16 GB内存 问题 使用

  • 问题内容: 我将Selenium和Firefox Webdriver与python配合使用,以从网站中抓取数据。 但是在代码中,我需要访问该网站超过10k次,并且这样做要消耗大量RAM。 通常,当脚本访问该站点2500次时,它已经消耗了4GB或更多的RAM,并且停止工作。 是否可以在不关闭浏览器会话的情况下减少内存RAM的消耗? 我问这是因为,当我启动脚本时,需要手动登录该站点(两因素加成,下面未