2012-12-18 4 views
-3

두 컴퓨터에서 동일한 코드를 실행하고 있습니다. 한 (윈도우 7 64) 사용자바 호환성

java version "1.7.0" 
java<TM> SE Runtime Environment <build 1.7.0-b147> 
Java HotSpot<TM> 64-Bit Server VM <build 21.0-b17, mixed code> 

다른 (리눅스 64) 사용

java version "1.6.0_10" 
Java(TM) SE Runtime Environment (build 1.6.0_10-b33) 
Java HotSpot(TM) 64-Bit Server VM (build 11.0-b15, mixed mode) 

내가 다른 출력을 얻고있다. 나는 .class 파일을 복사하고 실행 시켰고 여전히 다른 출력을 가지고 있기 때문에 VM이라고 생각한다. 누군가이 문제의 원인을 알 수 있습니까?

편집 :

코드는 그 두 기계 사이에 그대로 출력으로 과감하게 실행 사이에 차이가 아직 안 http://pastebin.com/5EmYFkYn

이다. 기계의

+10

출력물을 보여줄 수 있습니까? 당신이 얻고있는 결과물과 기대했던 결과물은 무엇입니까? 코드? –

+0

@PradeepSimha 코드는 약 600 줄이며 지수 분포를 사용하여 서버/클라이언트를 시뮬레이트합니다. 여기에 붙여 넣어야합니까? – Shmoopy

+4

동일한 기계에서 코드를 두 번 실행하면 똑같은 출력을 얻게됩니까? 시뮬레이션은 약간의 랜덤 한면을 가지고있는 것처럼 들리므로 동일한 출력을 기대할 수는 없습니다. – jlordo

답변

2

동일한 Linux 상자에서 Java 6 업데이트 31에서 ~ 1.78, Java 7 업데이트 7에서 ~ 3.8이 나타납니다.

그러나 new Random(1) 또는 임의의 다른 숫자로 임의의 시드를 얻으면 동일한 결과를 얻습니다. 예 : 1은 세 번째 숫자에 대해 항상 ~ 0.79를 생성합니다.

랜덤 시드가 생성되는 코드를 보면 코드가 완전히 다르며 nextDouble()이 임의적이지 않은 것으로 의심됩니다. 예를 들어 값이 더 다양해야하며 너무 많이 달라야합니다. 씨앗이 설정되었습니다.


같은 버전의 Java를 사용하는 동일한 컴퓨터에서 실행할 때마다 결과가 달라집니다. 대부분 코드에 임의의 요소가 있기 때문입니다.

499470 0 3.7783771731449503 10000.355400975242 0.07565041858446288 42 
499430 0 3.8374792234448916 10001.384837656298 0.07684781955465791 53 
499604 0 3.868284648304009 10000.698947869778 0.07743242690681965 57 
499114 0 3.822480313596936 10001.023197561686 0.07659315164172079 46 
500030 0 3.8653339884104576 10000.112232176294 0.077302909223347 43 

동일한 컴퓨터에서 실행하는 경우에는 다르므로 서로 다른 컴퓨터와 다른 버전의 Java에서 다를 수 있습니다.

나는 여전히 Java 7의 최신 버전 인 "update nothing"또는 4 세인 Java 6의 버전을 심각하게 고려할 것입니다.

+0

테스트 해 주셔서 감사합니다. Linux의 세 번째 출력 (~ 3.77)은 1.15입니다. 이것은 매우 중요합니다. – Shmoopy

+0

동일한 Linux 상자에서 Java 6 업데이트 31 ~ 1.78, Java 7 업데이트 7 ~ 3.8을 얻을 수 있습니다. –

+0

두 버전 모두에서'새로운 랜덤 (1)'을 가진 시드를 얻으면 ~ 0.79가됩니다. 씨앗 계산 방법을 살펴 보겠습니다. –

0

하나는 자바 6 실행, 다른 자바 7. 이러한 버전 사이에 많은 변화가 있습니다

http://openjdk.java.net/projects/jdk7/features/

이 또한 가능성이 행동에 영향을 미칠 수있는 세부 많은 변화가있는 문서에 따라 설명되거나 정의되지 않았습니다.

이러한 차이점 중 어떤 것이 프로그램에 영향을 미칠 수 있는지는 소스 코드를 보거나 적어도 어떤 차이점이 무엇인지 알지 못하면 말할 수 없습니다.