다른 사람들이 java에서 문자열 클래스의 인스턴스 주소를 얻는 방법을 설명하고 싶습니다.이 방법을 사용할 수 있습니까? 문제는 해결할 수 없지만 문제를 해결할 방법이 없습니까?어떻게 자바를 사용하여 문자열 클래스의 인스턴스 주소를 얻을 수 있습니까? 이걸 얻을 수있는 방법이 있습니까?
답변
메모리의 실제 주소를 의미합니까? 그렇다면 no - Java는 메모리를 추상화합니다.
(달성하려는 목표는 무엇입니까? Java에서이 작업을 수행하는 관용적 인 방법이 많으므로 직접 메모리 주소가 필요하지 않아야합니다. 논리적 인 의미에서 문자열은 해당 객체의 "주소"입니다.
런타임은 모든 메모리 관리를 수행하므로 Java 언어는 메모리 주소 개념을 지원하지 않습니다.
JNI로 몇 가지 속임수를 쓸 수도 있지만 개체의 주소가 임의로 변경되지 않는다는 보장이 없기 때문에 JNI가 신뢰할 수 있다고 생각하지 않습니다. 쓰레기 수집기 청소.
순수한 Java로 개체의 메모리 주소를 가져올 수 없습니다.
가능한 경우에도 신뢰할 수있는 방법으로 사용할 수 없습니다. GC는 언제든지 실행될 수 있으며 포인터를 빈 공간, 다른 객체의 가운데 또는 다른 유형의 객체로 향하게하여 객체를 이동시킬 수 있습니다.
(개념적으로) 불투명 한 JNI 유형에 대한 내부 지식이있는 경우 주소를 추출 할 수 있어야합니다. 그리고 나는 또한 이것을 할 수있는 sun.java.Unsafe
클래스가 있다고 믿습니다 ... 클래스 로더를 사용하기 위해서는 그것을 조율해야하지만.
.. 문자열 클래스의 인스턴스의 논리 주소를 어떻게 얻을 수 있습니까 아니면 반사를 사용하여 안전하지 않은 것을 사용할 수 있습니다. ;) –
Farmer가 게시 한 링크에서 적절하게 명명 된 Unsafe
클래스를 사용하여 하나의 기술을 제공하지만 실제로는 일반적으로 객체의 주소를 신뢰할 수있는 것으로 받아 들일 수 있을지 의심 스럽습니다.
또한 API Javadoc에서 설명한대로 System.identityHashCode
을 사용하면 지정된 객체의 클래스가 hashCode()를 재정의하는지 여부와 상관없이 기본 메소드 hashCode()가 반환하는 것과 동일한 지정된 해시 코드를 가져올 수 있습니다. . 이것은 "일반적으로 객체의 내부 주소를 정수로 변환하여 구현되지만이 구현 기술은 Java (TM) 프로그래밍 언어에서 필요하지 않습니다."
+1'System.identityHashCode'에 +1 –
JNI를 사용하거나 안전하지 않은 클래스를 사용하여 절대 주소를 얻을 수 있습니다.
그러나 둘 모두 쓸데없는 주소이기 때문에 모두 나쁜 아이디어입니다. 멀티 스레드 GC는 언제든지 객체를 이동할 수 있습니다. 즉, 귀하가 얻는 즉시 무효화 될 수 있습니다.
주소를 복사/변경할 수는 있지만 추적 할 수없는 방식으로 임의의 지점에서 JVM이 충돌하는 좋은 방법입니다. 즉 GC는 그것을보고 JVM은 임의의 시점에 죽습니다.
나는 "주소가 쓸모가 없다는 이유로 두 가지 모두 나쁜 아이디어이다."멀티 스레드 GC는 언제든지 객체를 이동할 수 있습니다. 즉, 이 될 수 있습니다. 유효하면 즉시 유효합니다. " – emory
@emory, 고맙습니다. 고쳐 주셨습니다. –
- 1. 이걸 어떻게 빨리 얻을 수 있습니까?
- 2. gvim : 문자열 배열을 얻을 수있는 방법이 있습니까?
- 3. Ruby 클래스의 이름은 어떻게 얻을 수 있습니까?
- 4. Silverlight/ASP.NET에서 MAC 주소를 얻을 수 있습니까?
- 5. pydev에서 REPL을 얻을 수있는 방법이 있습니까?
- 6. 특정 UIImageView 속성을 얻을 수있는 방법이 있습니까?
- 7. JFrame없이 키보드 이벤트를 얻을 수있는 방법이 있습니까?
- 8. XUL에서 프로세스의 피드백을 얻을 수있는 방법이 있습니까?
- 9. 어떻게 onChangeEvent_sooner_를 얻을 수 있습니까?
- 10. 어떻게 CurrentWindow를 얻을 수 있습니까?
- 11. 어떻게 출력을 얻을 수 있습니까?
- 12. 대의원을 어떻게 얻을 수 있습니까?
- 13. 어떻게 얻을 수 있습니까? UI_USER_INTERFACE_IDIOM
- 14. HttpPostedFile 클래스를 사용하여 업로드 진행률을 얻을 수있는 방법이 있습니까?
- 15. 리퍼러를 얻을 수 있습니까?
- 16. 어떻게 facebook 로그인을 통해 이메일 주소를 얻을 수 있습니까?
- 17. 어떻게 전자 메일 보낸 사람 주소를 얻을 수 있습니까?
- 18. AudioInputStream의 재생 시간을 어떻게 얻을 수 있습니까?
- 19. WCF 연결을 사용하여 연결 IP 주소를 얻을 수 있습니까?
- 20. 변수의 이름은 어떻게 얻을 수 있습니까?
- 21. jQuery로 오프너의 요소를 어떻게 얻을 수 있습니까?
- 22. iPhone 용 이동 통신사 정보를 얻을 수있는 방법이 있습니까?
- 23. 문자열의 특정 부분을 어떻게 얻을 수 있습니까?
- 24. PHP는 어떻게 URL에서 키워드를 얻을 수 있습니까?
- 25. 리스트의 다른 값의 문자열 []을 어떻게 얻을 수 있습니까?
- 26. 요청마다 컴파일 된 자산을 얻을 수있는 방법이 있습니까?
- 27. 클라이언트의 IPv4 주소는 어떻게 얻을 수 있습니까?
- 28. pcrecpp에서 PREMATCH ($`)와 POSTMATCH ($ ')를 얻을 수있는 방법이 있습니까?
- 29. MySQL에서 n 행마다 어떻게 얻을 수 있습니까?
- 30. JSONLib을 사용하여 getString에서 null을 얻을 수 있습니까?
관심이 없으신가요? –
자바가 당신을 위해이 물건을 처리하기 때문에 왜 실제 메모리 주소가 필요한지 잘 모르겠습니다. 정확히 여기서 뭘 하려구? –