• Home
    • View
    • Login
    This page
    • Normal
    • Export PDF
    • Page Information

    Loading...
  1. Dashboard
  2. Undefined Space
  3. OpenJFX
  4. Video Memory (VRam)

Video Memory (VRam)

  • Created by David Hill, last modified on Aug 28, 2014

Video Ram (VRAM) and JavaFX

JavaFX applications tend to need significant VRAM to operate properly, particularly applications that use large images, but also for fonts and gradients.

On some machines VRAM is (or used to be) very fast special purpose memory. Currently on most systems, VRAM is allocated (or reserved) from the main system memory. VRAM is consumed by the actual frame buffer (often with two copies allocated for quick swapping of the front and back buffer), and by GPU resources such as image/texture maps, as well as other system needs.

JavaFX contains a texture caching mechanism that attempts to work within a limit of VRAM. Unfortunately, there is not a standard means of determining how much VRAM is available to start, nor is there a way to estimate the efficiency of that allocation. The efficiency  is similar to standard malloc() which employs bucket mechanisms but means that a small allocation will consume the nearest minimum bucket size. 

The JavaFX texture caching mechanism currently defaults to 256 MBytes.

For desktop configurations, there VRAM configuration is not normally an issue, and many systems share system and vram. For some intensive applications, changing the JavaFX cache size may boost performance.

For embedded devices, the JavaFX default may actually exceed the available memory.

The minimum recommended memory split for JFX on the Pi is 128 MBytes, with many applications requiring 256 MBytes.

This JavaFX texture caching mechanism currently defaults to 256 MBytes - a value that will likely exceed what is available on the Pi. Given the limited amount of VRAM on the Pi, it is quite possible that an image intensive application might fail when the cache exceeds the available system limit.

Remember that the allocated VRAM will also be consumed by the framebuffer (width * height * 2 byte per pixel * 2+ for swapping) as well as any other system needs.

The property setting -Dprism.maxvram=90M can be used to set the JavaFX texture cache limit, and in this example, setting it to 90 MB. This value would be a good starting value for a memory split of 256MB for VRAM.

To debug a JavaFX application failure to allocate VRAM, -Dprism.poolstats=true can be used to monitor the texture pool to better determine the upper limit.

In general, JavaFX will try to use no more than -Dprism.targetvram=xx, freeing textures when this value is exceeded. Least used textures will be discarded, and recreated on need. The default for this setting is calculated as 75% of the  maxvram setting, equal to 45M for the example of 90M. This setting may be overly aggressive for some applications, and experimentation with a larger value and  -Dprism.poolstats=true may result in more performance.

Overview
Content Tools
ThemeBuilder
  • No labels

Terms of Use
• License: GPLv2
• Privacy • Trademarks • Contact Us

Powered by a free Atlassian Confluence Open Source Project License granted to https://www.atlassian.com/software/views/opensource-community-additional-license-offer. Evaluate Confluence today.

  • Kolekti ThemeBuilder Powered by Atlassian Confluence 8.5.21
  • Kolekti ThemeBuilder printed.by.atlassian.confluence
  • Report a bug
  • Atlassian News
Atlassian
Kolekti ThemeBuilder EngineAtlassian Confluence
{"serverDuration": 347, "requestCorrelationId": "2f8b29046ef655c9"}