Я думаю одна из основных проблем (который обращается в PHP 6), register_globals. Прямо сейчас один из стандартных методов раньше избегал register_globals
должен использовать $_REQUEST
, $_GET
или $_POST
массивы.
"Корректный" способ сделать это (с 5,2, хотя это - немного багги там, но стабильный с 6, который прибывает скоро) через фильтры.
Таким образом вместо:
$username = $_POST["username"];
Вы сделали бы:
$username = filter_input(INPUT_POST, 'username', FILTER_SANITIZE_STRING);
или даже просто:
$username = filter_input(INPUT_POST, 'username');
Это означает постоянное поколение :
Постоянное поколение является особенным потому что он содержит метаданные, описывающие пользовательские классы (классы, которые не часть языка Java). Примеры таких метаданных являются объектами описание классов и методов и они хранятся в постоянном Поколение. Приложения с большими code-base может быстро пополнить этот сегмент кучи, который вызовет
java.lang.OutOfMemoryError
: PermGen нет независимо от того, насколько высок ваш -Xmx и сколько память, имеющаяся у вас на машине.
Простой (и слишком упрощенный) ответ: именно здесь jvm хранит свои собственные бухгалтерские данные, а не ваши данные.
Permgen space - это область кучи, которая содержит все отражающие данные самой виртуальной машины, такие как объекты классов и методов.
Он содержит такие вещи, как определения классов, пул строк и т. Д. Я думаю, вы могли бы назвать это метаданными.
Perm space
используется для хранения информации о загруженных классах и некоторых других расширенных функций, таких как String Pool
(для высокооптимизированного тестирования равенства строк), которые обычно создаются методами String.intern ()
.
По мере того, как ваше приложение (количество классов) будет расти, это пространство должно быстро заполняться, поскольку сборка мусора в этом пространстве не очень эффективна для очистки по мере необходимости, вы быстро получаете ошибку Out of Memory: perm gen space. После этого ни одно приложение не будет эффективно работать на этой машине даже после огромной пустой JVM.
Перед запуском приложения вы должны java -XX: MaxPermSize
, чтобы избавиться от этой ошибки.