Look at your Buffer.init() method. You free the verticesBuffer twice by calling memFree(verticesBuffer) twice.
private void init() {
FloatBuffer verticesBuffer = MemoryUtil.memAllocFloat(vertices.length);
verticesBuffer.put(vertices).flip();
vaoId = glGenVertexArrays();
glBindVertexArray(vaoId);
vboId = glGenBuffers();
glBindBuffer(GL_ARRAY_BUFFER, vboId);
glBufferData(GL_ARRAY_BUFFER, verticesBuffer, GL_STATIC_DRAW);
memFree(verticesBuffer); // <- FREE HERE!!!
glVertexAttribPointer(0, 3, GL_FLOAT, false, 0, 0);
glBindBuffer(GL_ARRAY_BUFFER, 0);
glBindVertexArray(0);
if (verticesBuffer != null) { // <- is true
MemoryUtil.memFree(verticesBuffer); // <- AND HERE!!!
}
}