Java 为什么instanceof在android上进行内存分配?
我试图在我的游戏中消除所有的内存分配,我坚持使用一些我过去从未见过的奇怪的东西,出于某种原因,instanceof的使用在android上进行内存分配,为什么 以下是OrangeFollower.java的完整代码:Java 为什么instanceof在android上进行内存分配?,java,android,Java,Android,我试图在我的游戏中消除所有的内存分配,我坚持使用一些我过去从未见过的奇怪的东西,出于某种原因,instanceof的使用在android上进行内存分配,为什么 以下是OrangeFollower.java的完整代码: package enemies; import game.ConcreteBodySystem; import game.Tags; import main.MainGame; import player.Player; import tools.Director; impor
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上发生的事情是另一回事,但幸运的是,谷歌仍然保持着接近官方JVM的处理模式
从@VinceEmigh、@SteveL、@fge.的评论中摘录。我认为他指的是类加载器加载
生成器。这是这种类型的第一次出现吗?请注意,Android运行时不是“官方”Java运行时;因此,您之前对后者的任何了解都不适用。这确实是一个特定于Android的问题。@JoopEggen,是的,这个类似乎是第一次被推荐,我没有想到需要一个简单的检查实例来加载这个类(我很天真:)。如果你愿意,请发布一个答案。