나는 지금 Project Euler에서 작업을 해결하기 위해 JS를 사용하고 있습니다. 작업 중 하나에 대해 6000 억 개의 연속 번호를 반복해야했습니다. 놀랍게도 NodeJS에서 약 14 시간이 걸렸습니다. , 내 컴퓨터에 약 200 밀리 초를 실행하는 자바로, 비교를 위해(var i = 0; i <600000000000; i ++) {}가 JavaScript에서 너무 오래 실행되는 이유
console.time('t')
for (var i = 0; i < 600851475143; i++) {}
console.timeEnd('t')
:
그냥 아래의 미리보기를 실행하고 브라우저가 시간 동안 갇혀 (내가 크롬과 파이어 폭스를 시도) 각 i
의 제곱근을 계산하면 4 초입니다.
무슨 일입니까?
업데이트 : 모든 숫자를 반복하면이 particluar PE 문제를 해결하는 올바른 방법이 아니라는 것을 알고 있습니다. 문제는 그것에 관한 것이 아닙니다.
업데이트 2 : 나는 자바에 관해서 착각했다. 사람들이 올바르게 지적했듯이, 물리적으로는 빨리 실행할 수 없습니다. 나는 잘못된 번호를 사용하고있었습니다. 죄송합니다.
그것이 생산하지 않기 때문에 JVM이 완전히 전체'for' 문을 제거 가능성이 높습니다 :
그리고도 재현 할 수는 다음과 같은 상황이 예상대로 실행 영원히 소요 부작용. 그리고 V8은 그렇게 똑똑하지 않습니다. (아직) – zerkms
@zerkms는주의 깊게 읽었습니다. 모든 반복에서 전류 i의 제곱근을 계산하면 JVM이 4 초 실행됩니다. –
예를 신중하게 작성하십시오. 예를 들어 비어있는 본문 루프입니다. – zerkms