Java 当一个线程在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); 对于每个变量。这是真的吗?如果是,那么释放线程使用的内存的最佳方法是什么?当

当一个线程在jmeter中完成时,它会清除它所使用的所有内存吗?因为我读过一些讨论,人们说jmeter只在测试完成后释放内存,并建议使用

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对象引用的上一个内存进行垃圾收集。