[
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
> [email protected]:/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)