[ 
https://issues.apache.org/jira/browse/CASSANDRA-8231?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14196098#comment-14196098
 ] 

Benjamin Lerer commented on CASSANDRA-8231:
-------------------------------------------

The enum problem has been solved has part the JAMM issue #17 (Do not count size 
of referenced classes). When I use the latest version of JAMM for a query like: 
{{Select * from test where id = ?}} the object graph is:
{code}
root [org.apache.cassandra.cql3.statements.SelectStatement$Parameters] 24 bytes
   |
   +--orderings [java.util.LinkedHashMap] 56 bytes
      |
      +--table [java.util.HashMap$Entry[]] 16 bytes
      |
      +--header [java.util.LinkedHashMap$Entry] 40 bytes

root [org.apache.cassandra.cql3.statements.Selection$SimpleSelection] 32 bytes
   |
   +--metadata [org.apache.cassandra.cql3.ResultSet$Metadata] 32 bytes
   |  |
   |  +--names [java.util.ArrayList] 24 bytes
   |  |  |
   |  |  +--elementData [java.lang.Object[]] 32 bytes
   |  |     |
   |  |     +--2 [org.apache.cassandra.config.ColumnDefinition] 48 bytes
   |  |     |  |
   |  |     |  +--type [org.apache.cassandra.db.marshal.UTF8Type] 16 bytes
   |  |     |  |  |
   |  |     |  |  +--reverseComparator 
[org.apache.cassandra.db.marshal.AbstractType$1] 16 bytes
   |  |     |  |
   |  |     |  +--name [org.apache.cassandra.cql3.ColumnIdentifier] 24 bytes
   |  |     |  |  |
   |  |     |  |  +--text [java.lang.String] 24 bytes
   |  |     |  |  |  |
   |  |     |  |  |  +--value [char[]] 24 bytes
   |  |     |  |  |
   |  |     |  |  +--bytes [java.nio.HeapByteBuffer] 48 bytes
   |  |     |  |     |
   |  |     |  |     +--hb [byte[]] 24 bytes
   |  |     |  |
   |  |     |  +--cfName [java.lang.String] 24 bytes
   |  |     |  |  |
   |  |     |  |  +--value [char[]] 32 bytes
   |  |     |  |
   |  |     |  +--ksName [java.lang.String] 24 bytes
   |  |     |  |  |
   |  |     |  |  +--value [char[]] 64 bytes
   |  |     |  |
   |  |     |  +--componentIndex [java.lang.Integer] 16 bytes
   |  |     |
   |  |     +--1 [org.apache.cassandra.config.ColumnDefinition] 48 bytes
   |  |     |  |
   |  |     |  +--type [org.apache.cassandra.db.marshal.Int32Type] 16 bytes
   |  |     |  |  |
   |  |     |  |  +--reverseComparator 
[org.apache.cassandra.db.marshal.AbstractType$1] 16 bytes
   |  |     |  |
   |  |     |  +--name [org.apache.cassandra.cql3.ColumnIdentifier] 24 bytes
   |  |     |     |
   |  |     |     +--text [java.lang.String] 24 bytes
   |  |     |     |  |
   |  |     |     |  +--value [char[]] 24 bytes
   |  |     |     |
   |  |     |     +--bytes [java.nio.HeapByteBuffer] 48 bytes
   |  |     |        |
   |  |     |        +--hb [byte[]] 24 bytes
   |  |     |
   |  |     +--0 [org.apache.cassandra.config.ColumnDefinition] 48 bytes
   |  |        |
   |  |        +--name [org.apache.cassandra.cql3.ColumnIdentifier] 24 bytes
   |  |           |
   |  |           +--text [java.lang.String] 24 bytes
   |  |           |  |
   |  |           |  +--value [char[]] 24 bytes
   |  |           |
   |  |           +--bytes [java.nio.HeapByteBuffer] 48 bytes
   |  |              |
   |  |              +--hb [byte[]] 24 bytes
   |  |
   |  +--flags [java.util.RegularEnumSet] 32 bytes
   |     |
   |     +--universe [org.apache.cassandra.cql3.ResultSet$Flag[]] 32 bytes
   |
   +--columns [java.util.ArrayList] 24 bytes
      |
      +--elementData [java.lang.Object[]] 32 bytes

root [org.apache.cassandra.cql3.statements.Restriction[]] 24 bytes
   |
   +--0 [org.apache.cassandra.cql3.statements.SingleColumnRestriction$EQ] 24 
bytes
      |
      +--value [org.apache.cassandra.cql3.Constants$Marker] 24 bytes
         |
         +--receiver [org.apache.cassandra.config.ColumnDefinition] 48 bytes
            |
            +--type [org.apache.cassandra.db.marshal.Int32Type] 16 bytes
            |  |
            |  +--reverseComparator 
[org.apache.cassandra.db.marshal.AbstractType$1] 16 bytes
            |
            +--name [org.apache.cassandra.cql3.ColumnIdentifier] 24 bytes
            |  |
            |  +--text [java.lang.String] 24 bytes
            |  |  |
            |  |  +--value [char[]] 24 bytes
            |  |
            |  +--bytes [java.nio.HeapByteBuffer] 48 bytes
            |     |
            |     +--hb [byte[]] 24 bytes
            |
            +--cfName [java.lang.String] 24 bytes
            |  |
            |  +--value [char[]] 32 bytes
            |
            +--ksName [java.lang.String] 24 bytes
               |
               +--value [char[]] 64 bytes

root [org.apache.cassandra.cql3.statements.Restriction[]] 16 bytes

root [java.util.HashMap] 48 bytes
   |
   +--table [java.util.HashMap$Entry[]] 16 bytes

root [java.util.HashSet] 16 bytes
   |
   +--map [java.util.HashMap] 48 bytes
      |
      +--keySet [java.util.HashMap$KeySet] 16 bytes
      |
      +--table [java.util.HashMap$Entry[]] 80 bytes
{code}  

The only elements that we should not take into account are the column types as 
they are singletons. Other elements seems fine to me.

> Wrong size of cached prepared statements
> ----------------------------------------
>
>                 Key: CASSANDRA-8231
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-8231
>             Project: Cassandra
>          Issue Type: Bug
>          Components: Core
>            Reporter: Jaroslav Kamenik
>            Assignee: Benjamin Lerer
>         Attachments: 8231-notes.txt, Unsafes.java
>
>
> Cassandra counts memory footprint of prepared statements for caching 
> purposes. It seems, that there is problem with some statements, ie 
> SelectStatement. Even simple selects is counted as 100KB object, updates, 
> deletes etc have few hundreds or thousands bytes. Result is that cache - 
> QueryProcessor.preparedStatements  - holds just fraction of statements..
> I dig a little into the code, and it seems that problem is in jamm in class 
> MemoryMeter. It seems that if instance contains reference to class, it counts 
> size of whole class too. SelectStatement references EnumSet through 
> ResultSet.Metadata and EnumSet holds reference to Enum class...



--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Reply via email to