You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
스프링, 네티, 모키토 등 여러 라이브러리에서 sun.misc.Unsafe라는 클래스를 사용했다고 한다.
자신이 생각한 답변은 무엇인가?
Unsafe는 개발자가 Java 언어의 안전성 및 보안 모델을 우회하여 시스템 수준의 프로그래밍 작업을 수행할 수 있게 해준다.
Unsafe를 사용하여 성능을 극대화하거나 JVM의 일부 기능에 직접 접근해야할때 사용한다.
(메모리 관리, 객체 조작, 스레드 관리)
하지만 sun.misc.Unsafe는 잘못 사용하면 프로그램의 안전성과 안정성을 해칠 수 있다.
→ Java는 Unsafe 클래스의 인스턴스를 직접 생성하는 것을 막고 있다.
Unsafe 클래스는 private 생성자를 갖고 있어서 직접 인스턴스를 생성할 수 없다.
대신, getUnsafe()라는 정적 메소드를 제공하여 인스턴스를 반환한다.
그런데 getUnsafe() 메소드를 직접 호출하려고 하면 SecurityException이 발생한다. Unsafe 객체가 신뢰할 수 있는 코드에서만 사용되도록 하기 위해서
문제가 무엇인가?
sun.misc.Unsafe 는 무엇일까?
왜 이런 문제를 선정하였는가?
스프링, 네티, 모키토 등 여러 라이브러리에서 sun.misc.Unsafe라는 클래스를 사용했다고 한다.
자신이 생각한 답변은 무엇인가?
Unsafe는 개발자가 Java 언어의 안전성 및 보안 모델을 우회하여 시스템 수준의 프로그래밍 작업을 수행할 수 있게 해준다.
Unsafe를 사용하여 성능을 극대화하거나 JVM의 일부 기능에 직접 접근해야할때 사용한다.
(메모리 관리, 객체 조작, 스레드 관리)
하지만 sun.misc.Unsafe는 잘못 사용하면 프로그램의 안전성과 안정성을 해칠 수 있다.
→ Java는
Unsafe
클래스의 인스턴스를 직접 생성하는 것을 막고 있다.Unsafe 클래스는 private 생성자를 갖고 있어서 직접 인스턴스를 생성할 수 없다.
대신, getUnsafe()라는 정적 메소드를 제공하여 인스턴스를 반환한다.
그런데 getUnsafe() 메소드를 직접 호출하려고 하면 SecurityException이 발생한다. Unsafe 객체가 신뢰할 수 있는 코드에서만 사용되도록 하기 위해서
호출한 코드가 신뢰할 수 있는 코드인지 확인하는 과정을 거친다.
Java9부터는 Unsafe 클래스를 대신할 API들이 도입되었다 → Variable Handles, ByteBuffer
Variable Handles
compareAndSet
,getAndSet
,getAndAdd
와 같은 원자적 연산을 제공한다.ByteBuffer
IntBuffer
,LongBuffer
등 다양한 기본 타입 버퍼로 변환할 수 있다.The text was updated successfully, but these errors were encountered: