안녕하세요. 저는 캐나다에서 개발자로 일하고 있습니다. 여러 외국인들과 일을 하고 있는데요. 너무 기본적이면서도 중요한것에 대해서 너무 다양한의견이 있어서요.
아래의 변수들이 JVM에 어디에 존재하게 되느냐?
public class MemoryTest {
final String fs = "final String"; //A
final int fi = 1; //A
String s = "Member String"; //A
int i = 2; / /A
final static String fss = "final static String"; //B
final static int fsi = 3; //B
static String ss = "static String"; //C
static int si = 4; //C
public static void main(String args[]){
MemoryTest m = new MemoryTest();
}
}
위의 코드를 byte code 분석을 통해서 답을 구했는데요. 전문가 여러분들 검증을 부탁드려도 될까요?
[제가 찾은 답입니다.]
//A : 객체생성시 Method Area의 constant pool에서 객체로 복사되고, 객체에서 실제값이 할당됨.
//B : Method Area의 constant pool에 존재, 객체로 복사되지 않음
// C : static {} 이 호출되어 질때 Method Area의 constalnt pool의 값을 참조하여 Class Variable에 값을 할당.
부탁드립니다. 감사합니다.
0개의 의견 from SLiPP
의견을 남기기 위해서는 SLiPP 계정이 필요합니다.
안심하세요! 회원가입/로그인 후에도 작성하시던 내용은 안전하게 보존됩니다.
SLiPP 계정으로 로그인하세요.
또는, SNS 계정으로 로그인하세요.