Java seems to ignore -Xms and -Xmx options

后端 未结 3 1457
陌清茗
陌清茗 2020-12-01 23:46

I\'d like to run a very simple bot written in java on my VPS. I want to limit jvm memory to let\'s say 10MB (I doubt it would need any more).

I\'m running the bot wi

相关标签:
3条回答
  • 2020-12-02 00:27

    -Xmx specifies the max Java heap allocation (-Xms specifies the min heap allocation). The Java process has its own overhead (the actual JVM etc), plus the loaded classes and the perm gen space (set via -XX:MaxPermSize=128m) sits outside of that value too.

    Think of your heap allocation as simply Java's "internal working space", not the process as a whole.

    Try experimenting and you'll see what I mean:

    java -Xms512m -Xmx1024m ...
    

    Also, try using a tool such as JConsole or JVisualVM (both are shipped with the Sun / Oracle JDK) and you'll be able to see graphical representations of the actual heap usage (and the settings you used to constrain the size).

    Finally, as @Peter Lawrey very rightly states, the resident memory is the crucial figure here - in your case the JVM is only using 16 MiB RSS (according to 'top'). The shared / virtual allocation won't cause any issues as long as the JVM's heap isn't pushed into swap (non-RAM). Again, as I've stated in some of the comments, there are other JVM's available - "Java" is quite capable of running on low resource or embedded platforms.

    0 讨论(0)
  • 2020-12-02 00:39

    The JVM maps in shared libraries which are about 150m. The amount of virtual memory used is unlikely to be important to use if you are trying to minimise physical main memory.

    The number you want to look at is the resident memory which is amount of physical main memory actually used (which is 16 MB)

    0 讨论(0)
  • 2020-12-02 00:52

    Xmx is the max heap size, but besides that there's a few other things that the JVM needs to keep in memory: the stack, the classes, etc. For a brief introduction see this post about the JVM memory structure.

    0 讨论(0)
提交回复
热议问题