相关疑难解决方法(0)

哪个循环有更好的性能?为什么?

String s = "";
for(i=0;i<....){
    s = some Assignment;
}
Run Code Online (Sandbox Code Playgroud)

要么

for(i=0;i<..){
    String s = some Assignment;
}
Run Code Online (Sandbox Code Playgroud)

我不需要再次在循环外使用's'了.第一个选项可能更好,因为每次都不会初始化新的String.然而,第二个将导致变量的范围限于循环本身.

编辑:回应Milhous的回答.将String分配给循环中的常量是没有意义的吗?不,这里'一些分配'意味着从迭代的列表中获得的变化值.

此外,问题不是因为我担心内存管理.只是想知道哪个更好.

java string performance garbage-collection

50
推荐指数
4
解决办法
8134
查看次数

如何破坏java对象?

好吧,我开发了一个使用多个对象关系的java应用程序,这使得内存使用过于昂贵.我没有管理java内存的经验,因为应用程序设计很难破坏对象并重新利用先前清除的空间.例如,我正在使用Observer和MVC模式.

所以,理论说......

如果从任何活动线程或任何静态引用无法访问对象,则该对象符合垃圾收集或GC的条件

换句话说,如果对象的所有引用都为null,则可以说对象符合垃圾回收的条件.

但是,在我的短暂经历中,当我有一个像我一样的场景,你不知道如何销毁我想要从内存中删除的对象(例如,当一个框架关闭时)时,我很难破坏所有引用存在许多对类的引用.

根据这个上下文,当有多个引用时,如何处理对象破坏?或者当你有一个复杂的参考对象时,我怎么需要管理内存?

java memory garbage-collection memory-management

7
推荐指数
2
解决办法
2万
查看次数

如何改进应用程序以避免堆空间问题

我有一个应用程序,它与许多在方法中创建的自定义对象一起工作,并且从不需要在它们之外.整个结构(在我看来)非常好的面向对象,并使用服务,实用程序和DI模型.

现在,当我运行我的第一个"大型"测试时,我很快遇到了OutOfMemoryExceptions.现在,我不只是想增加堆空间并完成它,因为我可以想象这不会解决问题,而是延迟它直到我的应用程序增长更多并遇到同样的问题.

我正在寻找一些简单易用的解决方案,技巧和片段,它们可以帮助应用程序处理垃圾收集和堆空间,尤其是涉及许多使用对象创建操作的循环时.

像"不要在循环中创建对象,在循环之前创建它们并在其中覆盖它"之类的东西.

java memory heap object

6
推荐指数
2
解决办法
2614
查看次数

是否有Java的编码标准?

我可以开发一个应用程序/项目.但这不符合正确的编码标准.需要大量内存而其他人无法轻易理解.编码的通用标准是什么.我有一个问题,比如如何命名变量方法以及打包类的最佳方法是什么.像那样?

为此,是否有任何教程或示例请分享.

提前致谢.

java coding-style

4
推荐指数
2
解决办法
1400
查看次数

Java中的内存管理

如何在Java中手动删除对象?有没有像obj.delete()或的方法obj.kill()

java memory-management

2
推荐指数
1
解决办法
2993
查看次数

在Java中为for循环声明数组有多糟糕?

我来自C背景,所以我承认在用Java编写时我仍然在努力放弃内存管理.这个问题出现了几次,我很乐意对此进行详细阐述.以下是编写相同例程的两种方法,唯一的区别是何时double[] array声明:

代码示例1:

double[] array;
for (int i=0; i<n; ++i) {
    array = calculateSomethingAndReturnAnArray(i);
    if (someFunctionOnArrays(array)) {
        // DO ONE THING
    } else {
        // DO SOME OTHER THING
    }
}
Run Code Online (Sandbox Code Playgroud)

代码示例2:

for (int i=0; i<n; ++i) {
    double[] array = calculateSomethingAndReturnAnArray(i);
    if (someFunctionOnArrays(array)) {
        // DO ONE THING
    } else {
        // DO SOME OTHER THING
    }
}
Run Code Online (Sandbox Code Playgroud)

在这里,private double[] calculateSomethingAndReturnAnArray(int i)始终返回相同长度的数组.我强烈厌恶代码示例2,因为它只能覆盖现有数组时为每次迭代创建一个新数组.但是,我认为这可能是我应该坐下来让Java为我处理这种情况的时候之一.

偏好其中一种方式或者它们在Java中真正相同的原因是什么?

java memory-management

2
推荐指数
1
解决办法
1528
查看次数