队列中的对象内存占用

47 阅读1分钟
  1. 对象创建时占用内存
  • 在Java中创建一个对象(无论是通过new关键字还是其他方式),这个对象就会在内存中分配空间。这意味着对象头、实例变量以及必要的对齐填充等都会立即占用内存。因此,当一个对象加入队列时,该对象已经占用了内存。

  • 如果Runnable对象引用了外部变量,那么这些外部变量本身已经在它们被创建时占用了内存。Runnable对象对这些外部变量的引用实际上是对这些变量在内存中的地址的引用,而不是变量本身的拷贝。

  1. 对象执行过程中的内存占用
  • 当队列中的对象被执行时,如果它内部的方法或构造函数创建了新的对象(例如,局部变量、实例变量或其他对象),这些新对象也会在内存中分配空间。这些新对象占用的内存是在执行过程中发生的,而不是在对象加入队列时。
  1. 对象的可达性和垃圾回收
  • 一个对象只要还在被引用(即可达),它就不会被垃圾回收器回收。因此,即使对象暂时不在执行中,只要它还在队列中或其他地方被引用,它所占用的内存就会保留下来。只有当对象不再被任何引用所指向时,它所占用的内存才有可能被垃圾回收器回收,即对象执行完成后,从队列中移除引用,此运行对象以及所引用的外部对象会在触发gc时,回收