相关疑难解决方法(0)

在for循环中声明变量的优点和缺点?

在for循环中声明变量的优点和缺点是什么?我想改变我的讲师思想,或改变我的思想:讲师强迫我使用:

// Declare variables
int i;
...

for(i = 0; boolen expesion; update)   // Note i not declared here
Run Code Online (Sandbox Code Playgroud)

我喜欢做:

for(int i = 0; boolean expesion; update)   // Note i is declared here
Run Code Online (Sandbox Code Playgroud)

在考试中,这是我的方式的惩罚点..我试图通过告诉他说服他:

  • 我没有看到代码完成他的方式.
  • 它不是那么重要的变量,所以让它本地化是有意义的.
  • 在for循环中可能需要使用类型long变量.

他的答案是:"如果这里有很少的循环,你不需要反复宣布同一个变量".很难与讲师一起争论那么特别是你是一个来自foreng国家的一年级学生.但是int没有占用那么多内存加上java有一个垃圾收集器来清理内存..

所以,请帮助我说服他或我,并提出一个很好的论据.

java variables for-loop

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

在循环中定义数据类型

这似乎是一个简单的问题,但对我来说并不直观.

假设你有一个这样的循环:

int i;
for(i=0;i<10;i++){
float b = 25.2;
float c;
c=b+i;
}
Run Code Online (Sandbox Code Playgroud)

在每个循环中将b定义为float是否会产生任何负面影响?我认为它会有,但我不太确定,因为我看到的代码适用于此...

谢谢...

c

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

如何在无限循环中使用更少的堆空间?

我的java应用程序的内存使用有问题.具有堆空间和非堆空间.现在我专注于我的堆空间.

我的应用程序是一个SocketServer,它通过DataInputStream获取Input.我正在读取信息作为字节数组.我每秒得到一个不规则的输入量,但我们说的是每秒400字节到1.000字节的空间,峰值可以更高.

由于我的程序是一个服务器,它在无限循环中等待输入.现在我遇到了问题,我的堆空间随着时间的推移而攀升,所有5-10分钟它会上升0.5MB.

我使用了多个监视器应用程序,如jconsole和YourProfiler.之后,我试图在Heap Dumps的帮助下弄清楚,我用jmap进行了解析并使用Eclipse Memory Analyzer进行分析.

现在我的问题是,在这个示例代码中,哪个选项更好或更少使用更少的堆空间1或2?

选项1:

while (true){
byte [] one= new byte [21]; 
do something with one;
byte [] two= new byte [50];
do something with two;
byte [] three= new byte [30];
do something with three;
}
Run Code Online (Sandbox Code Playgroud)

选项2:

byte [] one;
byte [] two;
byte [] three;
while (true){
one= new byte [21]; 
do something with one;
two= new byte [50];
do something with two;
three= new byte [30];
do something with three;
}
Run Code Online (Sandbox Code Playgroud)

我不知道在循环中创建的三个对象会发生什么.这些应该是局部变量,只能在循环中可见和访问.但是在一个循环圈之后,JVM会删除它们并在下一个循环中创建一个新循环.所以我猜应该没有内存泄漏? …

java memory-leaks loops heap-memory heap-dump

0
推荐指数
1
解决办法
443
查看次数

Java关于性能的变量声明之间的区别

这两种声明之间的区别在哪里String s:

1)

public static void main(String[] args) {
    String s;

    for (int i = 0; i < 1000000; i++) {
        s = "String" + i;
        System.out.println(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

2)

public static void main(String[] args) {
    for (int i = 0; i < 1000000; i++) {
        String s = "String" + i;
        System.out.println(s);
    }
}
Run Code Online (Sandbox Code Playgroud)

我的任务经理说第一个不需要CPU和第二个.那么Java以两种不同的方式编译这两个样本?但是怎么样.

谢谢您的帮助!

java

-3
推荐指数
1
解决办法
56
查看次数

标签 统计

java ×3

c ×1

for-loop ×1

heap-dump ×1

heap-memory ×1

loops ×1

memory-leaks ×1

variables ×1