假设我们采用如下示例代码
class Employee
{
int id;
String name;
}
Employee e = new Employee(1, "NewEmployee");
在上面的代码中,我假设首先为 Employee Object 分配堆内存,然后将其引用分配给堆栈引用e
。
以上是有效的还是这里发生了一些深层次的事情?
如果是,那么让我们假设在堆中的内存创建之后并且就在其引用分配给之前e
,GC 启动并确定没有来自 GC 根的对该新堆内存的引用。
- GC 会清理这个资源吗?
- JVM/CLR 有没有办法处理这些场景并避免这种内存损坏?
标记 Java 和 C#,因为我看到 Java 和 C# 的标记和扫描情况下的清理逻辑似乎几乎相同(至少在从根中识别未使用的对象和清理方面)。