Вот что сработало для меня:
CSS
h2{
position:relative;
}
h2 > a{
position:absolute;
top: -12.5vh;
}
HTML
[ 111] Надеюсь, это поможет кому-то в будущем.
Благодарю
Это было давней жалобой с Java, но это в основном бессмысленно, и обычно на основе рассмотрения неправильной информации. Обычная формулировка - что-то как "Привет, Мир на Java берет 10 мегабайтов! Почему этому нужно это?" Ну, Вот способ заставить Привет Мир на 64-разрядной JVM утверждать, что принял 4 гигабайта..., по крайней мере, одной формой измерения.
java -Xms1024m -Xmx4096m com.example.Hello
На Linux, вершина команда дает Вам несколько различных чисел для памяти. Вот то, что это говорит о Привет Мировом примере:
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2120 kgregory 20 0 4373m 15m 7152 S 0 0.2 0:00.10 java
ситуация для Windows Task Manager немного более сложна. Под Windows XP существуют столбцы "Memory Usage" и "Virtual Memory Size", но официальная документация тиха на том, что они имеют в виду. Windows Vista и Windows 7 добавляют больше столбцов, и они на самом деле , зарегистрировал . Из них измерение "Рабочего набора" является самым полезным; это примерно соответствует сумме RES и SHR на Linux.
Виртуальной памяти виртуальная память, использованная процессом, является общим количеством всего, что это находится в карте распределения памяти процесса. Это включает данные (например, "куча" Java), но также и все общие библиотеки и файлы с отображенной памятью, используемые программой. На Linux можно использовать команда pmap для наблюдения всех вещей, отображенных в пространство процесса (отсюда на, я только собираюсь обратиться к Linux, потому что это - то, что я использую; я уверен, что существуют эквивалентные инструменты для Windows). Вот выборка из карты распределения памяти "Привет Мировой" программы; вся карта распределения памяти является более чем 100 строками долго, и весьма обычно иметь тысячу списков строки.
0000000040000000 36K r-x-- /usr/local/java/jdk-1.6-x64/bin/java 0000000040108000 8K rwx-- /usr/local/java/jdk-1.6-x64/bin/java 0000000040eba000 676K rwx-- [ anon ] 00000006fae00000 21248K rwx-- [ anon ] 00000006fc2c0000 62720K rwx-- [ anon ] 0000000700000000 699072K rwx-- [ anon ] 000000072aab0000 2097152K rwx-- [ anon ] 00000007aaab0000 349504K rwx-- [ anon ] 00000007c0000000 1048576K rwx-- [ anon ] ... 00007fa1ed00d000 1652K r-xs- /usr/local/java/jdk-1.6-x64/jre/lib/rt.jar ... 00007fa1ed1d3000 1024K rwx-- [ anon ] 00007fa1ed2d3000 4K ----- [ anon ] 00007fa1ed2d4000 1024K rwx-- [ anon ] 00007fa1ed3d4000 4K ----- [ anon ] ... 00007fa1f20d3000 164K r-x-- /usr/local/java/jdk-1.6-x64/jre/lib/amd64/libjava.so 00007fa1f20fc000 1020K ----- /usr/local/java/jdk-1.6-x64/jre/lib/amd64/libjava.so 00007fa1f21fb000 28K rwx-- /usr/local/java/jdk-1.6-x64/jre/lib/amd64/libjava.so ... 00007fa1f34aa000 1576K r-x-- /lib/x86_64-linux-gnu/libc-2.13.so 00007fa1f3634000 2044K ----- /lib/x86_64-linux-gnu/libc-2.13.so 00007fa1f3833000 16K r-x-- /lib/x86_64-linux-gnu/libc-2.13.so 00007fa1f3837000 4K rwx-- /lib/x86_64-linux-gnu/libc-2.13.so ...
А быстрое объяснение формата: каждая строка запускается с адреса виртуальной памяти сегмента. Это сопровождается размером сегмента, полномочиями и источником сегмента. Этот последний объект является или файлом или "скоро", который указывает на блок памяти, выделенной через [1 111] mmap.
Запуск с вершины, мы имеем
java
). Это является очень маленьким; все, что это делает, загрузиться в общих библиотеках, где реальный код JVM хранится. -Xmx
значение; это позволяет этому иметь непрерывную "кучу". Эти -Xms
значение используется внутренне для высказывания, сколько из "кучи" используется, когда программа запускается, и инициировать сборку "мусора", поскольку к тому пределу приближаются. общие библиотеки особенно интересны: каждая общая библиотека имеет по крайней мере два сегмента: сегмент только для чтения, содержащий код библиотеки и сегмент чтения-записи, который содержит глобальные данные для каждого процесса для библиотеки (я не знаю, каков сегмент без полномочий; я только видел его на x64 Linux). Часть только для чтения библиотеки может быть совместно использована всеми процессами, которые пользуются библиотекой; например, libc
имеет 1.5M пространства виртуальной памяти, которое может быть совместно использовано.
карта виртуальной памяти содержит много материала. Часть его только для чтения, часть его совместно используется, и часть его выделяется, но никогда не затрагивается (например, почти все 4 ГБ "кучи" в этом примере). Но операционная система достаточно умна, чтобы только загрузить то, в чем она нуждается, таким образом, размер виртуальной памяти в основном не важен.
то, Где размер виртуальной памяти важен, - то, если Вы работаете на 32-разрядной операционной системе, где можно только выделить 2 ГБ (или, в некоторых случаях, 3 ГБ) адресного пространства процесса. В этом случае Вы имеете дело с дефицитным ресурсом и, возможно, придется сделать компромиссы, такие как сокращение Вашего размера "кучи", чтобы к карте распределения памяти большой файл или создает много потоков.
, Но, учитывая, что 64-разрядные машины повсеместны, я не думаю, что это будет задолго до того, как Размер Виртуальной памяти является абсолютно несоответствующей статистической величиной.
размер Резидентного набора - то, что часть пространства виртуальной памяти, которое находится на самом деле в RAM. Если Ваш RSS растет, чтобы быть значительной частью Вашей общей физической памяти, могло бы быть пора начать вызывать беспокойство. Если Ваш RSS растет для приведения в рабочее состояние всей физической памяти, и система начинает подкачивать, это - хорошо прошлый раз, чтобы начать вызывать беспокойство.
, Но RSS также вводит в заблуждение, особенно на слегка загруженной машине. Операционная система не расходует большое усилие к исправлению страниц, используемых процессом. Существует мало преимущества, которое будет получено путем выполнения так, и потенциал для дорогого отсутствия страницы, если процесс касается страницы в будущем. В результате статистическая величина RSS может включать много страниц, которые не находятся в активном употреблении.
, Если Вы не подкачиваете, не становится чрезмерно касавшейся тем, что различные статистические данные памяти говорят Вам. С протестом, что постоянно растущий RSS может указать на своего рода утечку памяти.
С программой Java, намного более важно обратить внимание на то, что происходит в "куче". Общая сумма занимавшего места важна, и существуют некоторые шаги, которые можно сделать для сокращения этого. Более важный количество времени, которое Вы проводите в сборке "мусора", и какие части "кучи" становятся собранными.
Доступ к диску (т.е., база данных) является дорогим, и память является дешевой. Если можно торговать один для другого, сделайте так.
Объем памяти, выделенный для процесса Java, в значительной степени на одном уровне с тем, что я ожидал бы. У меня были подобные проблемы при работе встроенного Java / память ограничила системы. При выполнении любой приложение с произвольными пределами VM или в системах, которые не имеют необходимых объемов подкачки, имеет тенденцию повреждаться. Это, кажется, природа многих современных приложений, которые не являются дизайном для использования в системах с ограниченными ресурсами.
у Вас есть еще несколько опций, можно попытаться ограничить объем потребляемой памяти JVM. Это могло бы уменьшить место виртуальной памяти:
-XX:ReservedCodeCacheSize=32m Зарезервированный размер кэша кода (в байтах) - максимум кодируют размер кэша. [64-разрядный Солярис, amd64, и - сервер x86: 48 м; в 1.5.0_06 и ранее, 64-разрядный Солярис и and64: 1024 м.]
-XX:MaxPermSize=64m Размер Постоянного Поколения. [5.0 и более новый: VMs на 64 бита масштабируются на 30% больше; 1,4 amd64: 96 м; 1.3.1 - клиент: 32 м.]
кроме того, также необходимо установить-Xmx (макс. размер "кучи") к значению максимально близко к фактическое пиковое использование памяти из приложения. Я полагаю, что поведение по умолчанию JVM все еще к двойное размер "кучи" каждый раз, когда это разворачивает его до максимум. Если бы Вы запускаете с 32M, "куча" и Ваше приложение достигли максимума к 65M, то "куча" закончила бы тем, что росла 32M-> 64M-> 128M.
Вы могли бы также попробовать это для создания менее агрессивного VM о росте "кучи":
-XX:MinHeapFreeRatio=40 Минимальный процент "кучи", свободной после GC избегать расширения.
кроме того, от того, что я вспоминаю из экспериментирования с этим несколько лет назад, число собственных загруженных библиотек оказало огромное влияние на минимальное место. Загрузка java.net. Сокет добавил больше, чем 15M, если я вспоминаю правильно (и я, вероятно, не делаю).
JVM Sun требует большой памяти для HotSpot, и это отображается в библиотеках времени выполнения в общей памяти.
, Если память является проблемой, рассматривают использование другой JVM, подходящей для встраивания. IBM имеет j9, и существует Открытый исходный код "jamvm", который пользуется библиотеками пути к классу GNU. Также Sun имеет JVM Писка, работающую на SunSPOTS, таким образом, существуют альтернативы.
Просто мысль, но можно проверить влияние ulimit -v
опция .
, Которая не является фактическим решением, так как это ограничило бы адресное пространство, доступное для весь процесс, но это позволит Вам проверять поведение своего приложения с ограниченной виртуальной памятью.
java 1.4 Sun имеет следующие аргументы размеру управляющей памяти:
-Xmsn Указывают начальный размер, в байтах, пула выделения памяти. Это значение должно быть кратным 1 024 большим, чем 1 МБ. Добавьте букву K или K для указания на килобайты, или m или M для указания на мегабайты. Значение по умолчанию составляет 2 МБ. Примеры:
-Xms6291456 -Xms6144k -Xms6m
-Xmxn Указывают максимальный размер, в байтах, пула выделения памяти. Это значение должно несколько из 1 024 больших, чем 2 МБ. Добавьте букву K или K для указания на килобайты, или m или M для указания на мегабайты. Значение по умолчанию составляет 64 МБ. Примеры:
-Xmx83886080 -Xmx81920k -Xmx80m
http://java.sun.com/j2se/1.4.2/docs/tooldocs/windows/java.html
Java 5 и 6 имеют еще немного. См. http://java.sun.com/javase/technologies/hotspot/vmoptions.jsp
Нет, Вы не можете настроить сумму памяти, необходимую VM. Однако обратите внимание, что это - виртуальная память, не резидентный объект, таким образом, это просто остается там без вреда если не на самом деле используемым.
Alernatively, можно попробовать некоторую другую JVM затем Sun один с меньшим объемом потребляемой памяти, но я не могу советовать здесь.