Pull to refresh

Comments 30

Ты только что разрушил мой маленький безопасный мир Явы!
А может быть наоборот, он показал где стоит искать магию в чужом приложении, когда наблюдаемые баги начинают выходить за грани разумного и ты уже не понимаешь, где еще смотреть косяки?
UFO just landed and posted this here
Ага, интересная штука. Хотя применять не доводилось. А тебе? И внутри JDK, похоже, нигде не используется.
UFO just landed and posted this here
UFO just landed and posted this here
«Мы с Doug Lee...» звучит очень круто. Что, прямо на самом деле?
UFO just landed and posted this here
UFO just landed and posted this here
MappedByteBuffer — часть public API Java. Его использование документировано и поощряется. MagicAccessor таковым не является.
UFO just landed and posted this here
Гм. Нет, конечно. Причем тут безопасность? Каждый знает, что Яву можно пропатчить или посмотреть дебаггером. Класс отмечен как внутренний. Хотите — пользуйтесь, только не говорите потом, что команда Oracle виновата в том, что софт на вашем кластере за миллион долларов глюканул из-за неумелого использования вами недокументированных и даже явно отмеченных как внутренние классов Java.

А вот если MappedByteBuffer начнет работать некорректно при документированном, легитимном использовании, команда Oracle будет в этом виновата. Я уж не знаю про материальную ответственность, но с моральной точки зрения, в глазах сообщества — несомненно.
UFO just landed and posted this here
Если Alice знает про MagicAccessor и наследует он него свой класс...

Но ведь с таким же успехом Alice может использовать JNI в своем классе / jar'е и делать вообще все, что заблагорассудится. Ну или просто приватные поля можно через Reflection читать. Но при желании подобные вещи можно отловить верификатором. А вот некорректное использование функционала «размапливания» буфера будет не отловить. Поскольку сама операция будет легитимной. Опасны последствия.
В Java есть понятия политики безопасности и пермиссий. Когда вы запускаете java локально, SecurityManager выключен, поэтому вам и позволены все эти хаки. Теперь попробуйте запустить java с параметром -Djava.security.manager и тут же получите java.security.AccessControlException: access denied (java.lang.RuntimePermission accessClassInPackage.sun.misc). Java — безопасная платформа (для аплетов, например, SecurityManager всегда включен), но она не ограничивает возможности тех, кто знает, что делает.
ДА!

You made my day. Спасибо за этот пост!
Спасибо, уволок в избранное. Может пригодиться при отладке чужого кода.
Не могу понять чем использование sun.misc.Cleaner лучше «Finalizer Guardian idiom»?
Отвечу комментариями к исходникам:
Cleaners are a lightweight and more robust alternative to finalization. They are lightweight because they are not created by the VM and thus do not require a JNI upcall to be created, and because their cleanup code is invoked directly by the reference-handler thread rather than by the finalizer thread. They are more robust because they use phantom references, the weakest type of reference object, thereby avoiding the nasty ordering problems inherent to finalization.

Cleaners may also be invoked directly; they are thread safe and ensure that they run their thunks at most once.
Очень интересно и познавательно! Огромное спасибо!
О, неужто теперь в университетах появится (блекджек и шлюхи) порно?

А если серьезно, то домены можно было бы использовать и по назначению, т.е. и сексуального образования. А то абстрактным предметам, которые, возможно, никогда и не пригодятся, в университетах обучают, а тому, с чем каждый имеет дело каждый день — нет. В результате имеем лицемерие: с одной стороны тема заглатывается, с другой — пороки легкодоступны, и не только касаемо секса.

А еще серьезней — получается, каждый должен купить домен в зоне .ru, .com и .xxx, «чтобы какой-нибудь негодяй не опозорил мое имя и не обманул мою потенциальную аудиторию!»?
Вы вынесли мне моск, абсолютно! Перечитал два раза, пытасяь понять, как ваш комментарий относится к топику)
А сюда вот что скажу — спасибо, интересно, только жаль, что эти методы не надежны (могут не быть или исчезнуть) и не становятся частью public API, а было бы весьма полезно…
Инетересно. Еще встречал в проектах
sun.misc.BASE64Encoder

Один я не могу найти в JDK 6 класс sun.misc.MagicAccessorImpl?
Возможно вы имели ввиду sun.reflect.MagicAccessorImpl?
Конечно, sun.reflect. В примере указал правильно, а здесь на автомате не то написал. Спасибо, поправил.
Sign up to leave a comment.

Articles