2014-04-11 2 views
0

Java에서 참조 변수의 정확한 관리를 이해하고 싶습니다. 메모리 관리 방법은 무엇입니까? 참조 변수가 사용하는 메모리 자체의 양은 32 비트 또는 64 비트 운영 체제에서 발생합니다.Java 참조 변수 관리?

다음 코드 중 약 2 개는 무엇입니까? 위의 질문을 바탕으로 더 좋을 것입니다

참조 변수 하나를 생성하고 새로운 객체에 할당합니다 (플라이 웨이트 패턴을 추측하니 ??). 나는 프로파일에 의해 두 개의 코드 문 위의 정확한 효과를 볼 수있는

 for(int i = 0;i < 1000000; i ++) { 
      StringBuilder strReference = // assiging some object from somewhere say from DB list 
      // doing some operation on object with strReference 
     } 

의 참조 변수 매번 NowCreating

StringBuilder strReference = null; 
    for(int i = 0;i < 1000000; i ++) { 
     strReference = // assiging some object from somewhere say from DB list 
     // doing some operation on object with strReference 
    } 

?

+1

메모리에 저장되는 백만 개의 고유 한 문자열을 만들 때 둘 다 좋지 않습니다. 요구 사항에 따라 stringBuffer 또는 stringBuilder를 시도하십시오. – bgth

+0

예. 지금은 .. StringBuffer가 더 좋겠지 만 참조 변수에 관해 묻는 중입니다. – dhroove

+0

확인하십시오 .http : //www.javamex.com/tutorials/memory/string_memory_usage.shtml – bgth

답변

0

참조의 정확한 크기는 Java 사양에 의해 규정되지 않습니다 (위임 된 내용은 here 참조). 이 크기는 Java Virtual Machine 구현에 완전히 의존하므로 일부 시스템에서는 다른 64 비트에서 32 비트가 될 수 있습니다.

샘플 코드는 JVM의 경우 두 코드 모두 동일합니다 (각주 # 1 참조). 함수 내부에서 생성 된 변수의 공간은 Stack에 저장되므로 함수를 입력하기 전에 JVM이 해당 변수 (strReference)를위한 공간을 확보하게됩니다. 출처 : here.

그래서 어디서/어떻게 당신이 당신의 레퍼런스를 만드는 것이 아니라 당신이 당신의 레퍼런스 안에있을 데이터를 어디에서 생성하는지에 관한 것입니다.

자세한 내용을 보려면 코드를 컴파일 한 다음 javap을 사용하여 생성 된 바이트 코드를 확인하십시오. 그렇게하면 구현이 실제로 변경되는지 확인할 수 있습니다.


각주 # 1 : 처음 4 개 변수/매개 변수/각 방법이 바이트 코드 내부에 특별한 관리를, 그래서 일찍 코드에 대한 참조를 선언하는 경우이 경우에 차이가있을 수 있습니다. 이러한 차이는 바이트 코드의 크기와 속도에 관한 것입니다.이 4 개의 첫 번째 변수는 특별한 "opcode"를 가지고 있기 때문입니다.