Conceptually, a "reference" is a piece of data which refers to another piece of data somewhere else. Let's say that you have a function that takes two arguments. If, say, the second of those arguments is a reference, the subroutine has access to everything that the reference refers-to. A piece of data will not be garbage-collected as long as any references to it exist anywhere.