facebook / facebook/hhvm

Memory leak with reified generics

Open
#8,835 3 comments 0 reactions 0 assignees View on GitHub
Dominant language
C++
Stars
18.7k
Forks
3.1k
Avg merge
1h 47m
Merged PRs (30d)
2

Description

**Describe the bug**
Each call to a function that uses reified generics appears to increase the memory usage of hhvm. This memory doesn't get reclaimed and this can continue until the program crashes.

**Standalone code, or other way to reproduce the problem**
```
$ cat /tmp/test.hack
<<__EntryPoint>>
function main(): void {
$iterations = (int) (vec(\HH\global_get('argv') as Container<_>)[1] ?? 0);
echo "iterations is $iterations\n";
$obj = new Foo();
for ($i=0; $i<$iterations; $i++) {
get_classname_wrapper($obj);
if ($i % 1000 === 0) {
echo "$i memory usage: ".memory_get_usage(true)."\n";
}
}
echo "memory usage: ".memory_get_usage(true)."\n";
}

function get_classname_wrapper<<<__Enforceable>> reify T as Foo>(T $obj): string {
return 'hi';
}

class Foo {}
```

```
$ docker run -v /tmp/test.hack:/tmp/test.hack hhvm/hhvm:4.108-latest hhvm /tmp/test.hack 1000000
```

Steps to reproduce the behavior:
1. Run the above script in docker
2. Observe that memory usage increases linearly

**Expected behavior**

Memory usage stays constant with repeated calls.

**Actual behavior**

Memory usage increases with each call.

**Environment**
We first observed this with HHVM 4.56 on Ubuntu 18.04, but reproduced it on the latest public hhvm docker container `hhvm/hhvm:4.108-latest`

Contributor guide

Open the contributing guide

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.