저는 (간단한!) 선형 대수학 라이브러리를 작성하고 있습니다.왜이 방법이 핫 스폿입니까?
public double next() {
double result;
if(hasNext())
result = vis[i++].next();
else
throw new IllegalStateException("No next value");
return result;
}
:
matrix multiplication의 구현에서,
VisualVM 성능 샘플 큰 행렬 (5K X 120K)를 승산 할 때, 알고리즘은 다음과 같은 방법으로 (즉, "자체 시간")의 시간의 85 %를 소비하는 것을 말해되고
너무 자세히 설명하지 않고 (죄송합니다. 더 많은 코드를 공유 할 수 없습니다.)이 메서드는 next()
행렬에 대한 "반복기"메서드입니다. (여러분은이 메소드가 vis
에 저장되어있는 개별 열 반복자로 구성된 행 반복자로 생각할 수있는 클래스를 생각할 수 있습니다.) 반복자이므로이 메소드가 많이 호출되는 것은 놀랍지 않지만 입니다.이 프로그램은 많은 시간을 에 보내는데이 방법은입니다. 이 방법은 너무 많은 것을하지 않으므로 여기에 시간을 보내는 이유는 무엇입니까?
- 내가 치는거야 "잡았다"VisualVM과 일부 있습니까 : 여기 특정 질문에 내가 부탁 해요입니까? 예를 들어, JIT가 VisualVM을 어떤 방식 으로든 혼란스럽게 만들면 VisualVM이 시간을 잘못된 방법으로 지정하게됩니다.
- 왜 프로그램이 여기에 시간을 보내고 있습니까? 이 방법은 너무 많이하지 않습니다. 특히,
vis
배열은 곱셈되는 행렬의 데이터보다 훨씬 작기 때문에 캐시 효과가이 문제를 설명한다고 생각하지 않습니다. 경우
는 여기 유용 내가 위에서 붙여 넣기 방법의 jad 분해입니다 :
public double next()
{
double result;
if(hasNext())
//* 0 0:aload_0
//* 1 1:invokevirtual #88 <Method boolean hasNext()>
//* 2 4:ifeq 32
result = vis[i++].next();
// 3 7:aload_0
// 4 8:getfield #42 <Field VectorIterator[] vis>
// 5 11:aload_0
// 6 12:dup
// 7 13:getfield #28 <Field int i>
// 8 16:dup_x1
// 9 17:iconst_1
// 10 18:iadd
// 11 19:putfield #28 <Field int i>
// 12 22:aaload
// 13 23:invokeinterface #72 <Method double VectorIterator.next()>
// 14 28:dstore_1
else
//* 15 29:goto 42
throw new IllegalStateException("No next value");
// 16 32:new #89 <Class IllegalStateException>
// 17 35:dup
// 18 36:ldc1 #91 <String "No next value">
// 19 38:invokespecial #93 <Method void IllegalStateException(String)>
// 20 41:athrow
return result;
// 21 42:dload_1
// 22 43:dreturn
}
감사합니다 사전에 당신의 도움들에 대해!
나는 hasNext()와 next() 호출에 의존한다고 생각한다. 왜냐하면 우리는 기본 객체를 모르기 때문에 O (1)이고 메소드는 꽤 빠르다 고 가정한다. 우리가 알고있는 모든 것에 대해 태양을 1000 배나 돌아간다. – RuntimeError
@RuntimeError, "self time"*은 메소드 자체에 소비 된 시간만을 포함해야한다. 그러므로 hasNext()와 sub -next() 내가 아는 한이 방법에 기인 한 자아 시간과 관련이 없습니다. (다르게 알고 계시면 교정 해주십시오.) – sigpwned
'next'가 스스로를 호출합니까 (재귀 적입니까?)? 그것은 재귀가 깊다면 시간이 걸리는 이유가 될 것입니다. – assylias