Hacktoberfest 2026: as issues que os mantenedores marcaram para outubro, abertas e boas para iniciantes. Ver issues do Hacktoberfest

[Bug]: JVM crash (SIGSEGV in Py_REFCNT) on numpy.frombuffer(memoryview(java.nio.ByteBuffer))

Aberta
#1,198 0 comentários 0 reações 1 responsável Ver no GitHub

Mantenedores costumam responder em até 1 dia

Ninguém assumiu esta issue ainda.

Avaliação

Dificuldade
4/5
Tempo estimado
3-5 dias
Facilidade para iniciantes
44/100
Tipo de issue
Bug
Clareza
Razoavelmente clara
Status de atividade
Ativa
Stack de tecnologia
java, numpy, python
Domínio
backend

Direção de pesquisa

Start by reproducing the failure with the provided numpy.frombuffer(memoryview(buffer)) example under GraalPy, then trace how Java ByteBuffer memoryviews are exposed to C extensions and how the buffer protocol reaches NumPy. The issue does not name relevant source files or tests, so finding the responsible interop path will take codebase exploration. Done means the example returns a valid four-element array or raises a Python exception instead of crashing the JVM.

Escrita pelo modelo de indexação a partir do texto da issue.

Descrição

Describe the bug

Calling numpy.frombuffer on a memoryview of a Java java.nio.ByteBuffer crashes the JVM with SIGSEGV in Py_REFCNT (libpython-native.so). A Python-level error, or a working zero-copy view, would be expected.

Operating system

Linux (NixOS), kernel 6.18

CPU architecture

x86_64

GraalPy version

25.4.4 (python-language 25.4.4.1.1, embedded via Micronaut/Pyronaut)

JDK version

GraalVM CE 25.4.4.1.1 (JDK 25.0.4)

Context configuration

Embedded context built by Micronaut's GraalPyContextFactory (Pyronaut 0.1.0): allowNativeAccess(true), allowHostAccess(...), allowHostClassLookup(...), allowValueSharing(true), allowPolyglotAccess(ALL), the java posix backend, and a venv with numpy 2.4.4 from the GraalPy wheel index (numpy-2.4.4-graalpy313-graalpy253_313_native-manylinux_2_27_x86_64.whl).

Steps to reproduce
import numpy as np
from java.nio import ByteBuffer, ByteOrder

buffer = ByteBuffer.allocate(16).order(ByteOrder.LITTLE_ENDIAN)
print(np.frombuffer(memoryview(buffer), dtype="<f4"))  # JVM dies here

This was run as a pytest test under pyronaut test. It crashes on every run.

Expected behavior

Either a 4-element float32 array, sharing or copying the buffer's memory, or a Python exception if host buffers can't be exported through the buffer protocol to C extensions.

Stack trace
#  SIGSEGV (0xb) at pc=0x00007fff79ad2db5, pid=174452, tid=174453
# Problematic frame:
# C  [libpython-native.so+0x23db5]  Py_REFCNT+0x5

C  [libpython-native.so+0x23db5]  Py_REFCNT+0x5
j  java.lang.invoke.LambdaForm$MH+0x0000000064e44c00.invoke(Ljava/lang/Object;JJJJ)J+64 [email protected]
j  com.oracle.graal.python.builtins.objects.cext.capi.ExternalFunctionInvoker.invokePYCFUNCTION_WITH_KEYWORDS(JJJJ)J+9
j  com.oracle.graal.python.builtins.objects.cext.capi.ExternalFunctionInvoker.invokePYCFUNCTION_WITH_KEYWORDS(...)
j  com.oracle.graal.python.builtins.objects.cext.capi.ExternalFunctionNodes$MethKeywordsRoot.readArgumentsAndInvokeExternalFunction(...)
j  com.oracle.graal.python.builtins.objects.PythonAbstractObject$PExecuteNode.doExecute(...)
Additional context

Related: np.asarray(java_float_array) on a Java float[] fails with RecursionError: maximum recursion depth exceeded. As a result there is currently no efficient way to move a large Java primitive array into numpy. Our workaround is to write the data to a file from Java and np.frombuffer(f.read()) it in Python.

Linguagem predominante
Python
Estrelas
1.7k
Forks
158
Merge médio
8h 15min
PRs com merge (30d)
49

Preparar o ambiente

Abrir no Codespaces

Inicia o contêiner de desenvolvimento do projeto no navegador, com a sua própria conta do GitHub.

Primeiros passos

  1. Leia a issue inteira e depois o guia de contribuição do projeto.
  2. Comente na issue dizendo que vai assumir — evita que duas pessoas façam o mesmo trabalho.
  3. Faça um fork do repositório e trabalhe em uma branch.
  4. Abra um pull request que referencie o número da issue.

Mais de oracle/graalpython

Todas as issues de oracle/graalpython

Issues semelhantes

Mais issues de Python

Receba novas issues na sua caixa de entrada

Um resumo curto de issues do GitHub para quem está começando.