Я хочу написать прокси-сервер, чтобы гарантировать, что конкретный объект используется только в конкретном потоке, поэтому мне нужно сохранить ссылку на объект Thread
(так как JavaDoc говорит, что идентификатор можно использовать повторно). Будет ли эта ссылка заставлять поток (а не объект Thread) не полностью собирать мусор, когда он завершается?Будет ли ссылка на объект Thread вызывать утечку памяти?
ответ
Я хочу написать прокси-сервер для обеспечения определенного объекта только когда-либо использовал на конкретную тему, так что мне нужно хранить ссылку на объект Thread
Вы не делаете. Вы можете использовать ThreadLocal<Boolean>
, который устанавливается только в конкретном потоке.
Будет ли эта ссылка заставлять поток (а не объект Thread) не полностью собирать мусор, когда он завершается?
Ваша ссылка приведет к утечке Thread
, но, как писал @superbob, неуказано, что происходит с потоком ОС. Мне было бы безразлично, если бы вы знали, что это единственная нить.
Хотя ThreadLocal
может leak тоже простой ThreadLocal<Boolean>
без подклассов (особенно без использования initialValue()
) не просачивается ничего.
Внешняя библиотека Я использую имеет объектную бассейн, но где-то в код базовых объектов возвращаются в пул преждевременно в результате не-поточно-объект используется в нескольких потоках. Я хочу написать прокси-сервер для обнаружения такого случая. Прокси-сервер должен хранить ссылку на currentThread, когда объект был выведен из пула и бросать, если вызывающий поток отличается от сохраненного Thread.
Это звучит совсем не так, как ваш вопрос, и кажется, что мой ответ выше недействителен. Я написал такую вещь некоторые давным-давно:
import com.google.common.collect.MapMaker;
public static synchronized boolean singleThreaded(Object o) {
final Thread neu = Thread.currentThread();
final Thread old = threadMap.put(o, neu);
return old==null || old==neu;
}
private final static Map<Object, Thread> threadMap =
new MapMaker().weakKeys().weakValues().makeMap();
и использовать его при отладке для обеспечения того, чтобы someObject
привыкает в одном потоке с помощью
assert singleThreaded(someObject)
Из-за все ссылки являются слабыми, я могу надеяться, нет утечки
Да, я пошел слабый ссылочный путь в конце концов, как хорошо. –
- 1. Будет ли QProcess :: startDetached() вызывать утечку памяти?
- 2. Будет ли эта страница вызывать утечку памяти?
- 3. Будет ли эта программа вызывать утечку памяти?
- 4. Будет ли ByteBuffer.wrap (byte []) вызывать утечку памяти для долгосрочных приложений?
- 5. Может ли ссылка элемента в директиве AngularJS вызывать утечку памяти?
- 6. Может ли жесткая ссылка на объект WeakReference.get() вызвать утечку памяти?
- 7. Будет ли ExecutorService.newFixedThreadPool.submit (новый класс()) вызывать утечку памяти?
- 8. Может ли следующая структура вызывать утечку памяти
- 9. Будет ли этот объект Objective-C вложенным NSArray вызывать утечку памяти на iPhone?
- 10. Будут ли эти реализации вызывать утечку памяти?
- 11. Почему ссылка на Контекст на утечку памяти?
- 12. Может ли статическая ссылка на контейнер IoC в MVCApplication вызывать утечку памяти?
- 13. Будет ли освобождение массива = [] вызвать утечку памяти?
- 14. Частично используемый объект вызывает утечку памяти?
- 15. Имеет ли новый объект утечку памяти?
- 16. Будет ли этот код клиента на стороне WCF вызывать утечку памяти?
- 17. Может ли локальная переменная вызывать утечку памяти с помощью ARC?
- 18. Не имеет ли ссылка на задачу может вызвать утечку памяти?
- 19. PHP: Будет ли этот код вызывать утечки памяти?
- 20. Никогда не разрешали обещания вызывать утечку памяти?
- 21. Будет ли совместимость класса класса с базовым классом вызывать утечку памяти?
- 22. PDF объект создает утечку памяти
- 23. Имеет ли ссылка Android View.postDelayed на утечку?
- 24. Будет ли соединение клиента TCP Socket Server fd вызывать утечку памяти?
- 25. Android - может ли последняя статическая ссылка на объект класса вызвать утечку памяти?
- 26. QThread создает утечку памяти
- 27. Содержит ли ссылка ссылку на объект в памяти, если ссылка никогда не будет использоваться?
- 28. Выполняет ли обработка событий jQuery утечку памяти?
- 29. Вызывает утечку памяти?
- 30. Имеет ли Express.js на Node.js утечку памяти?
Это приведет к тому, что 'Thread' не будет собрано мусором, и все объекты будут доступны из него. * Thread * является объектом операционной системы и вообще не подлежит сборке мусора. Ваш вопрос не имеет смысла. – EJP
Я думаю, что я уже настолько ясен, насколько могу: есть экземпляр класса «Thread» (т. Е. Объект «Thread»), который мой собственный экземпляр хочет удержать, и есть поток JVM (как концепция планирования). Первый из них раскрывает методы управления последним, но неясно, будут ли удерживать ссылки на первые, чтобы последний был полностью собран в мусор (учитывая ThreadLocals и опыт по утечкам потоков). –
Не только ваш вопрос звучит странно, но и весь дизайн. Почему именно вам кажется, что только одному конкретному потоку должно быть разрешено обновлять (читать, писать?) Конкретный объект? Я имею в виду: есть ли время жизни этого объекта и что поток «манипуляции» отличается? – GhostCat