|
|
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
Всем привет! Выношу на суд разработанный код. Возможно, велосипед, тем не менее интерес пока теоретический - разобраться что к чему и как. Насколько мне известно, в Java существует проблема, связанная с деструктором классов. Код: java 1. Он как бы есть, но размещать там "тяжёлый" код и, тем более, связанный с блокированием потока не рекомендуется, что понятно - GC должен заниматься не только этим объектом. Поэтому нужен способ изменить некое состояние, когда объект будет подобран GC, если разработчик забыл это сделать. Проблема решена с применением следующих абстракций: Код: java 1. 2. 3. 4. 5. 6. Код: java 1. 2. 3. 4. 5. 6. 7. Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Код: java 1. 2. 3. 4. 5. Иллюстрация использования: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. Пример использования, тесты и исходные коды в приложении. Собственно, интересует мнение тех, кто имеет опыт разработки многопоточного/высококонкурентного кода. Какие у меня bad practices получились и как делать правильней. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 12:06:36 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
Не совсем улавливаю смысл вашей разработки. Чего вы пытаетесь добиться? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 12:11:25 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
svenom, Если объект никем не используется нужно освободить ресурсы, занимаемые объектом. Это можно сделать либо вручную(риск забыть) через деструктор(не рекомендуется помещать в деструктор тяжёлую логику). Других способов я не знаю. Суть разработки - снизить риск по 1-му пункту и иметь возможность использовать "тяжёлую" логику по 2-му пункту. Как-то так... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 12:18:02 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
Ну, попробовали бы изучить вопрос прежде чем что-то делать. Материала валом. Вот, например. http://java.sun.com/developer/technicalArticles/javase/finalization/ http://www.javapractices.com/topic/TopicAction.do?Id=24 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 12:26:14 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, ну там же только декларируются концепции. А может и реализация этих концепций есть? Поискал в гугле, близко нашёл только вот это . Но мне там много чего не нравится. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 13:20:11 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
ну еще как вариант перейти на java7 и использовать AutoClosable ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 13:47:49 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
забыл никну еще как вариант перейти на java7 и использовать AutoClosable Ну, его же всё равно в try\catch надо оборачивать. А вдруг кто забудет? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 13:53:51 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
забыл ник, мне, всё-таки, кажется, что не всегда работа с объектом в интервале времени "выделил"---"освободил" умещается в рамки одного блока. По сути AutoCloseable + try-with-resources = упрощённый try-finally и имеет те же недостатки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 13:57:08 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
Miha_S7ну там же только декларируются концепции. А может и реализация этих концепций есть? Ну, если через пул, то вот готовый код, можно дополнить всем что нужно. http://commons.apache.org/pool/ finilize это не дестрктор. в вашем коде не используется finilize, поэтому вопрос что именно вы делаете остаётся открытым. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 14:00:19 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
Miha_S7забыл ник, мне, всё-таки, кажется, что не всегда работа с объектом в интервале времени "выделил"---"освободил" умещается в рамки одного блока. По сути AutoCloseable + try-with-resources = упрощённый try-finally и имеет те же недостатки. Точно так же как девелопер забывает закрывать ресурс, он забудет зерегистрировать его в вашем пуле. В чем бенефиты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 14:01:27 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, виноват, не деструктор. finalize не используется. Используются WeakReference и ReferenceQueue. Дополнить http://commons.apache.org/pool/ можно, но я пока не стал этим заниматься, так как хотелось для начала попрактиковаться. А лишний код будет в этом только мешать. Я не говорю, что подобный риск можно полностью устранить, но снизить можно. Например, используя фабрику для создания объектов. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 14:08:26 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
Miha_S7Используются WeakReference и ReferenceQueue. Тю. В первом посте про слабые ссылки ни слова. Тогда ОК. Правильно копаете, и - да, лучше через фабрику создавать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 14:16:32 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
А это смотрели? http://google-collections.googlecode.com/svn/trunk/javadoc/com/google/common/base/FinalizablePhantomReference.html ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 16:11:51 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
забыл ник, не смотрел, но судя по беглому взгляду, что-то похожее. Будем разбираться... спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 16:29:33 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
Miha_S7, да, это то, что нужно. И сделано грамотней, чем у меня. Ну что ж, хорошо, что есть где посмотреть и поучиться :-) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 16:57:42 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
Ну я считаю, что иногда очень полезно написать велосипед, чтобы понять как оно все работает и оценить преимущества библиотечного кода:) Кстати, посомтрел твой код - если это сделано на скорую руку - то впечатляет) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.01.2012, 18:39:32 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
com.google.common.base.FinalizableReference и др. сделаны по образу и подобию классов в пакете java.lang.ref из OpenJDK. Всем, кому интересно, чем же отличается PhantomReference от WeakReference и каким образом VM финализирует объекты, советую заглянуть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.01.2012, 14:27:39 |
|
||
|
bad pratices. Need help and advices
|
|||
|---|---|---|---|
|
#18+
Переделано. Устранены недостатки guava-вского метода, в котором существует возможность, что часть объектов не будет "финализировано" (не в смысле вызова метода finalize()). А также убран рефлекшн, который мне кажется лишним. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 09.02.2012, 15:31:53 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=37622103&tid=2132606]: |
0ms |
get settings: |
9ms |
get forum list: |
19ms |
check forum access: |
6ms |
check topic access: |
6ms |
track hit: |
40ms |
get topic data: |
14ms |
get forum data: |
4ms |
get page messages: |
89ms |
get tp. blocked users: |
2ms |
| others: | 322ms |
| total: | 511ms |

| 0 / 0 |
