Java 当一个线程在jmeter中完成时,它会清除它所使用的所有内存吗?
当一个线程在jmeter中完成时,它会清除它所使用的所有内存吗?因为我读过一些讨论,人们说jmeter只在测试完成后释放内存,并建议使用Java 当一个线程在jmeter中完成时,它会清除它所使用的所有内存吗?,java,multithreading,jmeter,Java,Multithreading,Jmeter,当一个线程在jmeter中完成时,它会清除它所使用的所有内存吗?因为我读过一些讨论,人们说jmeter只在测试完成后释放内存,并建议使用 import org.apache.jmeter.threads.JMeterVariables; JMeterVariables clean = new JMeterVariables(); vars = clean; 或者干脆 vars.remove(varName); 对于每个变量。这是真的吗?如果是,那么释放线程使用的内存的最佳方法是什么?当
import org.apache.jmeter.threads.JMeterVariables;
JMeterVariables clean = new JMeterVariables();
vars = clean;
或者干脆
vars.remove(varName);
对于每个变量。这是真的吗?如果是,那么释放线程使用的内存的最佳方法是什么?当一个线程真正在JMeter中完成时,JMeterVariables将被删除,因此您不需要执行此清理 但是在负载测试期间,通常一个线程会进行大量迭代,在这种情况下,如果您存储了大量变量,除非您在下一次迭代中重写它们,否则它们将保留 因此,进行一些清理是有用的(仅当您存储大变量时) 但这是无用的:
JMeterVariables clean = new JMeterVariables();
vars = clean;
这没关系:
vars.remove(varName)
通过设置vars=clean,您正在调用java对旧对象的自动垃圾清理。vars也有一个引用。我更喜欢将我的对象设置为null,而不是新对象。因此,您是否建议线程内存保留到测试结束?基于java和您的示例,我会说不。如果您不设置vars=null或vars=clean(一个全新的JMeterVariables类型的空对象),那么vars引用的内存将是线程创建的任何内存。如果您知道在测试之后已经完成了JMeterVariables对象,并且希望在下一次测试中重用它,那么您只需执行vars=new JMeterVariables()。这将强制对vars对象引用的上一个内存进行垃圾收集。