[
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)