Java, не блокирующий выделение памяти

Я верю Число:: Телефон:: США и Regexp:: Распространенный (особенно источник Regexp:: Распространенный:: URI:: RFC2806), модули Perl могли помочь.

вопрос должен, вероятно, быть определен в немного большем количестве деталей для объяснения цели проверить числа. Например, 911 верный номер в США, но 911x не ни для какого значения x. Это - то, так, чтобы телефонная компания могла вычислить, когда Вы сделаны, набрав. По этой проблеме существует несколько изменений. Но Ваш regex не проверяет часть кода зоны, так, чтобы, казалось, не был беспокойством.

Как проверка адресов электронной почты, даже если у Вас есть допустимый результат, который Вы не можете знать, присвоена ли она кому-то, пока Вы не пробуете ее.

, При попытке проверить ввод данных пользователем, почему бы не нормализовать результат и быть сделанными с ним? Если пользователь вставляет число, Вы не можете распознать как верный номер, или сохранить его, как введено или полоса undailable символы. Число:: Телефон:: Нормализуйте , модуль Perl мог быть источником вдохновения.

11
задан Denis Bazhenov 24 July 2009 в 11:04
поделиться

3 ответа

JVM предварительно выделяет область памяти для каждого потока (TLA или локальная область потока). Когда потоку необходимо выделить память, он будет использовать «Увеличить выделение указателя» в этой области. (Если «свободный указатель» указывает на адрес 10, а размер выделяемого объекта составляет 50, тогда мы просто увеличиваем свободный указатель до 60 и сообщаем потоку, что он может использовать память от 10 до 59 для объекта) .

22
ответ дан 3 December 2019 в 03:36
поделиться

Лучший трюк - это сборщик мусора поколений. Это сохраняет кучу нефрагментированной, поэтому выделение памяти увеличивает указатель на свободное пространство и возвращает старое значение. Если память заканчивается, сборщик мусора копирует объекты и создает таким образом новую нефрагментированную кучу.

Поскольку разные потоки должны синхронизироваться по указателю на свободную память, при ее увеличении они предварительно выделяют блоки. Таким образом, поток может выделять новую память без блокировки.

Все это более подробно объясняется здесь: http://java.sun.com/javase/technologies/hotspot/gc/gc_tuning_6.html

3
ответ дан 3 December 2019 в 03:36
поделиться

Для JVM нет единого распределителя памяти. IIRC правильно JVM Sun и управляемая память IBM по-разному. Однако, как правило, JVM будет работать так, что первоначально она будет выделять одну часть памяти, этот сегмент будет достаточно маленьким, чтобы жить в кэше процессора, что делает весь доступ к нему чрезвычайно быстрым.

Когда вы внутри приложения создаете объекты, объекты будут занимать память из этого сегмента. Распределение объектов внутри сегмента - это просто арифметика указателя.

Первоначально адрес смещения в только что созданном сегменте будет нулевым. Первый выделенный объект будет иметь нулевой «адрес» (фактически смещение в сегменте). Когда вы выделяете объект, диспетчер памяти будет знать, насколько велик объект, а у IBM была куча вещей на ibm.com/developerworks

2
ответ дан 3 December 2019 в 03:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: