|
|
|
GC and mutex
|
|||
|---|---|---|---|
|
#18+
Что произойдет, если захваченный мутекс не будет освобожден по каким либо причинам? GC корректно уничтожит его с освобождением ресурса или все повисшие мутексы останутся в памяти? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 12:50 |
|
||
|
GC and mutex
|
|||
|---|---|---|---|
|
#18+
Нужно код смотреть. Рискну предположить что если вы синхронизируете по объектам то очистка объекта из кучи приведет к чисте и мутекса. В альтернативном варианте нужно еще раз смотреть код, потому-как синхронизация может быть реализована по разному. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 13:09 |
|
||
|
GC and mutex
|
|||
|---|---|---|---|
|
#18+
publexus, Спящий поток полюбому держит через фреймы стэка всё что ему нужно для работы после пробуждения. Соответсвтенно и мьютекс тоже. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 13:13 |
|
||
|
GC and mutex
|
|||
|---|---|---|---|
|
#18+
Ну и плюс не стоит забывать, что "сборшик мусора" != "очистка ресурсов" в Java У нас, после корректной настройки подсистемы памяти, на промышленном сервере Full GC проходил 1-2 раза за весь рабочий день. Система с >200-400 одновременных пользователей, Java 32 бит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 22.09.2014, 15:34 |
|
||
|
GC and mutex
|
|||
|---|---|---|---|
|
#18+
Чтобы синхронизироваться по объекту, нужно иметь на этот объект сильную ссылку. А если на объект есть ссылка, то gc его не уберет. По крайней мере, не должен. а если будет что-то вроде volatile Object obj = new Object(); synchronized(obj){...} И потом в другом потоке: obj = null; То по идее, ссылка останется только где-то внутри кода synchronized. Всегда ли увидит ли ее сборщик - вопрос. Надо будет попробовать это воспроизвести ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 10:56 |
|
||
|
GC and mutex
|
|||
|---|---|---|---|
|
#18+
chabapok , Ну вы просто порассуждайте, что будет, если GC эту ссылку соберет. Вот у вас тред, внутри него где-то в стэке сидит ссылка на монитор. Когда приходит время его отпустить, выясняется, что монитора уже давным давно нет, а то место перезаписано чем-то другим. Какие тут могут быть варианты кроме краша системы? Более того, не забывайте, что для того, что бы захватить монитор объекта, вам обязательна нужна локальная ссылка на этот объект. Поэтому предыдущие рассуждения вообще не имеют смысла - есть живая ссылка в потоке, поэтому объект не будет почищен GC . ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 11:02 |
|
||
|
GC and mutex
|
|||
|---|---|---|---|
|
#18+
Это что касается синхронизации. У мутекса, ИМХО, все проще. sleep у него делается внутри, в коде объекта мутекса, а ссылка на this никогда не уничтожается gc. Поэтому даже если везде поставить null на этот мутекс, внутри него в потоке будет ссылка на него и он не удалится. по этой причине, потоки, которые на нем повисли, вероятно, будут продолжать висеть и ждать его освобождения. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.09.2014, 11:05 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=38753624&tid=2126563]: |
0ms |
get settings: |
6ms |
get forum list: |
8ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
168ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
49ms |
get tp. blocked users: |
1ms |
| others: | 228ms |
| total: | 478ms |

| 0 / 0 |
