Кевин, действительно имеет смысл отличать работу апплета от настольного приложения, но что меня поразило, так это то, что существует большая разница в максимальной (большей, чем я думал) памяти, доступной между апплетом и настольным приложением, что составляет ~ 8%. Если это, как вы сказали, "стек" апплета "толще, учитывая более строгие ограничения на их поведение", я ожидал, что апплет получит больший максимальный объем памяти, а не автономная версия.
Я измерил расстояние между апплетом и приложением. Оба получили одинаковые параметры (-Xmx128M), оба работают с одной и той же JVM - Java HotSpot (TM) 64-разрядная серверная виртуальная машина версии 11.3-b02 (впервые я подумал, что апплет работает с клиентской JVM, а рабочий стол работает с сервером). JVM, но похоже, что оба они с JVM сервера)
Конечно, на самом деле JVM получили другие параметры, но ничего серьезного (как мне кажется):
- апплет: -D__jvm_launched = 426431678538 -Xbootclasspath / a: /usr/jvm/64/jdk1.6.0_13/jre/lib/deploy.jar: /usr/jvm/64/jdk1.6.0_13/jre/lib/javaws.jar : /usr/jvm/64/jdk1.6.0_13/jre/lib/plugin.jar -Xmx128m
- автономный: -Xrunjdwp: transport = dt_socket, address = 127.0.0.1: 54876, suspend = y, server = n -Xmx128M -Dfile.encoding = UTF-8
Аплет: макс. память = 119,314 КБ
- Heap
- PS Eden Space : 14,592K
- PS Survivor Space: 14.528K
- PS Old Gen : 87.424K
- Non-Heap
- Mem Pool Code Cache : 49.152K
- Mem Pool PS Perm Gen : 86.016K
Рабочий стол: макс. память = 129,302 КБ
- Heap
- PS Eden Space : 8.704K
- PS Survivor Space: 3.008K
- PS Old Gen : 116.544K
- Non-Heap
- Mem Pool Code Cache : 49.152K
- Mem Pool PS Perm Gen : 65.536K
Большие различия между этими двумя JVM
- PS Perm Gen, апплет получил больший кусок - что имеет смысл, поскольку апплет, вероятно, загрузит дополнительные классы по сравнению с автономной версией (но даже в этом случае "Old Gen" намного меньше, что странно, потому что обычно все эти дополнительные классы со временем попадет в "Старый Ген")
- Память кучи, совершенно другое соотношение между Eden / Survivor / Old Gen. Старое поколение апплета составляет 75% от старого поколения автономного приложения, это большая разница, я бы сказал, я добр, если ожидаю (почти) той же модели памяти, поскольку не должно Нет никакой разницы, когда я запускаю приложение как апплет или как настольное приложение.
Теперь я еще больше сбит с толку не только из-за того, что я не знаю, как рассчитать максимальное соотношение памяти (действительно, 0,9 не может быть действительным с будущими версиями JVM), но и мое приложение могло выйти из памяти при запуске как апплет. Мне нужно было бы увеличить максимальный объем памяти на ~ 10-15%, когда он работает как апплет, на всякий случай.
Я до сих пор не понимаю, почему такое разное соотношение кучи (на той же машине) и куча меньшего размера (особенно с учетом того, что апплету нужны дополнительные классы).
По каким причинам? Мне любопытно, это вышло за рамки моей потребности проверить, имеет ли апплет максимальный объем памяти, который, по моему мнению, должен.
person
adrian.tarau
schedule
15.07.2009