在这两种情况之间,C#或其他语言如何处理内存分配(和内存解除分配):
1.)调用静态类的方法.
public Program {
Foo foo = Loader.load();
}
public static Loader {
public static Foo load() {
return new Foo();
}
}
Run Code Online (Sandbox Code Playgroud)
2.)在一个实例上调用一个方法,然后该方法超出范围.
public Program {
Foo foo = new Loader().load();
}
public Loader {
public Foo load() {
return new Foo();
}
}
Run Code Online (Sandbox Code Playgroud)
我想静态类在内存中被加载并保留; 而C#的闲暇时,类实例屈服于垃圾收集.这两种范式是否存在任何利弊?有没有时间你有一个永远不需要实例化的类(即某种资源加载器或工厂),但你还是使用第二种方法来利用垃圾收集?
我的问题的重要部分是,第一范式是否在某些情况下在概念上是正确的,可能会遭受不必要的记忆.
很长一段时间java程序员慢慢学习scala(顺便爱上它),我认为我的思想仍然围绕着功能性写东西的概念.现在我正在尝试为一些移动的2D纹理编写一个简单的可视化器.命令式方法很简单,我相信大多数人都会认识到这个相对无处不在的代码块(改变了东西以保护无辜者):
class MovingTexture(var position, var velocity) extends Renders with Advances {
def render : Unit = {...}
def advance(milliseconds : Float) : Unit = {
position = position + velocity * milliseconds
}
}
Run Code Online (Sandbox Code Playgroud)
这段代码可以正常工作,但它有大量的可变状态,其功能充满了副作用.我不能让自己逃脱这一点,必须有更好的方法!
有没有人对这个简单的问题有一个惊人,优雅,实用的解决方案?有谁知道我可以学到更多解决这些问题的来源?