[ https://issues.apache.org/jira/browse/CASSANDRA-8325?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14227049#comment-14227049 ]
graham sanderson edited comment on CASSANDRA-8325 at 11/27/14 12:30 AM: ------------------------------------------------------------------------ Yeah the code in library_call.cpp is quite hard to introspect, however my sense is this probably comes down to a mixture of the case where a null (0) 32 bit compressedOop pointer is not equivalent to a null 64 bit address (i.e. the case where the heap does not fit in the 32 gig of address space) possibly coupled with whether the hotspot compiler could prove at compile time whether the value was statically null. It seems like a slightly strange distinction to make given that you are using a 64 bit offset anyway (and that other methods do using them interchangeably) but that doesn't change the fact that they made the distinction and apparently it matters at least in some implementations. The question I was trying to get a sense of, is whether this explicitly disallows the sorts of pointer arithmetic C* is trying to achieve, or whether C* is just doing it wrong. Maybe that is actually quite simple and there are clearly distinctions in the C* usage between baseless pointers and static or otherwise field level offsets, but someone would have to have to dive in (probably with the ability to test) to make sure. was (Author: graham sanderson): Yeah the code in library_call.cpp is quite hard to introspect, however my sense is this probably comes down to a mixture of the case where a null (0) 32 bit compressedOop pointer is not equivalent to a null 64 bit address (i.e. the case where the heap does not fit in the 32 gig of address space) possibly coupled with whether the hotspot compiler could prove at compile time whether the value was statically null. It seems like a slightly strange distinction to make given that you are using a 64 bit offset anyway (and that other methods do using them interchangeably) but that doesn't change the fact that they made the distinction and apparently it matters at least in some implementations. The question I was trying to get a sense of, is whether this explicitly disallows the sorts of pointer arithmetic C* is trying to achieve, or whether C* is just doing it wrong. Maybe that is actually quite simple and there are clearly distinctions between baseless pointers and static or otherwise field level offsets, but someone would have to have to dive in (probably with the ability to test) to make sure. > Cassandra 2.1.x fails to start on FreeBSD (JVM crash) > ----------------------------------------------------- > > Key: CASSANDRA-8325 > URL: https://issues.apache.org/jira/browse/CASSANDRA-8325 > Project: Cassandra > Issue Type: Bug > Environment: FreeBSD 10.0 with openjdk version "1.7.0_71", 64-Bit > Server VM > Reporter: Leonid Shalupov > Attachments: hs_err_pid1856.log, system.log > > > See attached error file after JVM crash > {quote} > FreeBSD xxx.intellij.net 10.0-RELEASE FreeBSD 10.0-RELEASE #0 r260789: Thu > Jan 16 22:34:59 UTC 2014 > r...@snap.freebsd.org:/usr/obj/usr/src/sys/GENERIC amd64 > {quote} > {quote} > % java -version > openjdk version "1.7.0_71" > OpenJDK Runtime Environment (build 1.7.0_71-b14) > OpenJDK 64-Bit Server VM (build 24.71-b01, mixed mode) > {quote} -- This message was sent by Atlassian JIRA (v6.3.4#6332)