java - 为什么instanceof在android上进行内存分配?

标签 java android

我试图消除游戏过程中的所有内存分配,但我坚持了一些我过去从未见过的奇怪的事情,出于某种原因,instanceof 的使用在 android 上进行内存分配,为什么会这样?

enter image description here

这是OrangeFollower.java的完整代码:

package enemies;

import game.ConcreteBodySystem;
import game.Tags;
import main.MainGame;
import player.Player;
import tools.Director;
import tools.FastMath;
import tools.Vector;
import tools.gColor;
import worldsystem.BlockCollitionSystem;
import worldsystem.Entity;
import worldsystem.IntervalSystem;
import worldsystem.SoundSystem;
import worldsystem.SpriteSystem;
import worldsystem.gWorld;

import com.badlogic.gdx.Gdx;

public class OrangeFollower extends Enemy {

public static int TAG=gWorld.getNextTag();
public OrangeFollower(final gWorld world) {
    super(world);
    this.tag =TAG;

    initScale(0.8f,0.8f);
    initColor(1,0.6f,0, 1);
    initColScale(0.4f, 0.4f);
    initSpeed(0.018f);
    setGroups(Tags.GROUP_CONCRETE_ENEMIES,Tags.GROUP_DESTRACTABLE,Tags.GROUP_ENEMIE,Tags.GROUP_GREEN_ENEMIES,Tags.GROUP_MOVING);

    SpriteSystem sm=(SpriteSystem) addSystem(new SpriteSystem(this, "sprites/sprites2.png",896,256,1,128,128,pos,scale,rotation,new gColor(1,1,1,1)));

    addSystem(new ConcreteBodySystem(this));

    addSystem(new EnemieSystem(this,2,20,false,true,false,false,Tags.GROUP_GREEN_ENEMIES){{multis=2;}});
    addSystem(new BlockCollitionSystem(this,256,true){
        @Override
        public void colliding(Entity e) {
            super.colliding(e);
            if(e instanceof Generator)return;
            Vector.vector.set(e.pos.x-pos.x, e.pos.y-pos.y);
            float length = FastMath.sqrtBlazingFast(Vector.vector.x*Vector.vector.x  + Vector.vector.y*Vector.vector.y);
            if (length != 0) {
                Vector.vector.x = Vector.vector.x / length;
                Vector.vector.y = Vector.vector.y / length;

                vel.x-=Vector.vector.x;
                vel.y-=Vector.vector.y;
            }
        }
    });
}
@Override
public void init() {
    super.init();
    speed=realSpeed;
}
@Override
public void update() {
    super.update();
    pos.x += (vel.x * speed) * Director.delta;
    pos.y += (vel.y * speed) * Director.delta;
}

}

最佳答案

该类首次初始化。

  • 内部类不一定在外部类初始化时也被初始化。 java 引用文献再次指出:首先使用。
  • 内存分配不仅发生在对象实例化时的 new 中,而且还发生在类加载器中。
  • Android 上的情况又是另一回事了,但幸运的是 Google 仍然与官方 JVM 的处理模型保持密切联系。

摘自 @VinceEmigh、@SteveL、@fge 的评论。

关于java - 为什么instanceof在android上进行内存分配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31826027/

相关文章:

android - 使用 Firebase 进行应用链接跟踪

android - 从 Firebase DataSnapshot 中提取单个值

android - 在 Android NDK 中构建图形 UI

java - 我想查看 GWT 变量 (JavaScriptObjects) 的内部值。

java - 关于Java中的绿色线程

java - 无法运行 Grinder Java 测试框架

JavaFX Spinner 抛出 IllegalArgumentException : The start must be <= the end

java - 安卓工作室 : app not saving to/reading from database

android - 以编程方式从 Android 的内置 Gallery 应用程序中获取/选择图像

java - 在非交互式应用程序中处理 150GB 堆