스프링 풀에 대해 정리하기

String[] str1 = {"자바", "오라클", "스프링", "파이썬", "텐스플로우"}; //String[] str2 = new String[]{"자바", "오라클", "스프링", "파이썬", "텐스플로우"}; String[] str2 = new String[]{new String("자바"), new String("오라클").intern(), "스프링", "파이썬", "텐스플로우"}; System.out.println("str1 == str2?" + (str1==str2)); for(int i=0; i<str1.length; i++) { System.out.println(str1[i] == str2[i]); }

-스프링 풀과 상수 풀의 차이

-어떤 메모리 영역에 존재하는지

클래스(.class) 파일이 클래스 로더에 의해 메모리에 로딩 될 때 벌어지는 일

자바 프로그램이 실행되면 JVM은 os로부터 메모리를 할당 받는다. 이 할당 받은 영역을 “Runtime Area”라고 부른다. 이렇게 메모리를 할당 받으면 JVM의 클래스 로더는 클래스 파일을 로딩한다.

자바의 버전과 JVM의 종류에 따라 파일을 로딩하는 방식과 저장하는 공간이 조금씩 상이하다. 일단 내가 이해한 부분은 이렇다. 클래스로더는 클래스에 대한 정보 바이트 코드(바이트코드는 나중에 Excution engine가 기계어로 해석한다)로 Method Area에 저장한다. 저장되는 내용은 상수풀에 들어갈 데이터, 필드 데이터, 메서드 데이터, 메서드 코드, 생성자 코드이다. 그리고 이 클래스에 대한 정보를 Class 클래스 객체를 이용해 heap 메모리에 저장한다. (Object클래스의 getClass함수로 이 Class 클래스 객체에 접근할 수 있다.) 위에서 말하는 필드데이터, 메서드데이터는 클래스의 메타(class-level data)를 의미하는 것 같다.

참조형 변수의 크기는???

참조형 변수의 크기는 일반적으로 32비트 JVM에서는 4byte, 64비트 JVM에서는 8byte 이다. 하지만 이 크기는 이론적인거다. JVM이 어떻게 동작하는지, heap 메모리 사이즈 등이 영향을 준다. 어떤 블로그에서는 4byte 참조변수의 최대값은 40억 정도이므로 4byte의 참조변수로 40억byte, 즉 4GB의 메모리를 다룰 수 있다고 써있다. 하지만 또 os와 jvm에서 사용하는 부분이 있기 때문에 2GB정도의 메모리를 사용할 수 있다 써있다..(숫자에 대응하는 메모리공간의 크기가 1byte라고 생각했을 때 얘기인것 같은데 무슨말인지 모르겠다 슈발 ㅋㅋㅋ)

//파이썬 입문하기 좋은 홈페이지(수업자료)