Presumably you're on a 32-bit architecture (or at least a 32-bit JVM). 32-bit processes won't be able to address more than "X" amount of memory, where X would usually be >= 2GB, and < 4GB.
The reason you can't use a full 4GB is that part of the address space is necessarily reserved by the OS kernel. Exactly how much is reserved depends on the OS, version thereof, and/or configuration, but at least 0.5-1GB is usually a safe bet, so the behavior you see is exactly as expected. If your hardware is 64-bit, make sure you're running a 64-bit OS and a 64-bit JVM. If you're stuck on 32-bit hardware that just happens to have lots of RAM, you could run multiple Cassandra instances on each box.. -NK On Oct 28, 2010, at 10:04 AM, JKnight JKnight wrote: > Hi all, > > When I config Maximum heap size -Xmx4G, the memory will consume to 3.5G. When > I call Perform GC (jconsole), the used memory reduce to 1G. > > When I config Maximum heap size -Xmx2G, Cassandra system run well. > > Is that Casandra problem? > I want Cassandra use memory more effective. How can I do that? > > Thank a lot for support. > -- > Best regards, > JKnight