Memory leak with reified generics
- 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
Assessment
This issue has not been assessed yet.