Java 如何手动释放基元变量?

Java 如何手动释放基元变量?,java,primitive,Java,Primitive,我知道在Java中,我们通常不需要担心手动删除变量,因为垃圾收集可以解决这个问题。但是,在某些情况下,我们需要在垃圾收集生效之前释放对象,以防止内存泄漏。要释放对象,我们可以简单地将其引用设置为null 现在我的问题是,我们如何手动释放一个基本变量?如果没有办法手动释放一个基本变量,那么为什么呢,因为有一种机制可以手动释放一个引用变量?这个问题毫无意义。设置为null并不能删除任何内容。和基元类型不能被删除。只要局部变量在作用域内,就会为其分配内存空间。不能设置基本类型int、float、dou

我知道在Java中,我们通常不需要担心手动删除变量,因为垃圾收集可以解决这个问题。但是,在某些情况下,我们需要在垃圾收集生效之前释放对象,以防止内存泄漏。要释放对象,我们可以简单地将其引用设置为null


现在我的问题是,我们如何手动释放一个基本变量?如果没有办法手动释放一个基本变量,那么为什么呢,因为有一种机制可以手动释放一个引用变量?

这个问题毫无意义。设置为null并不能删除任何内容。和基元类型不能被删除。只要局部变量在作用域内,就会为其分配内存空间。

不能设置基本类型int、float、double、char。。。其他一些;您将图片设置为空。如果您尝试,将得到一个NullPointerException

Java中没有删除的概念。Java通过内部引用计数器自动处理所有内存管理。这个过程通常被称为垃圾收集器

一旦对象超出范围,它就可用于垃圾收集,并且其内存可以随时回收。您不必担心在Java中手动取消分配内存。虽然原语不是由垃圾收集器直接释放的,但是您仍然不需要担心删除它们


垃圾收集的主题显然比这更深刻、更复杂,但我认为这篇文章是一个10万英尺的总结。

没有人讨论这个问题,因为这个问题没有任何意义。为什么手动释放引用变量有意义,而手动释放基元变量没有意义?实际上,垃圾收集关心的是对象,而不是变量。@AlKepp我其实不知道!我将修改我的答案。对象是一个运行时实体,范围是一个编译时概念。对象不会在其作用域的末尾收集,因为作用域不适用于对象。作用域适用于源代码中使用的名称。当运行时确定程序的任何可能的继续执行都无法访问对象时,将收集对象。@SotiriosDelimanolis不,不是。自己试试看:谢谢你的回答。我说过我想把一个基本变量设为null。我很好奇的是,除了垃圾收集机制之外,还有一种机制可以通过将引用设置为free来手动释放引用变量,就像对象一样,但为什么没有机制可以手动释放基本变量呢。我的意思是自由,不是删除。我好奇的是如何手动释放一个基本变量。既然我们可以手动释放一个引用变量,为什么没有办法手动释放一个原始变量。@张朝章:你实际上不能手动释放任何变量。您可以将null分配给引用,也可以将0分配给int,但它们都仍在内存中。@AIKepp:将null分配给引用会使相应的对象在对象超出范围之前准备好由垃圾收集处理。这就是我说的自由的意思。我不知道该怎么命名。我想知道是否有类似的方法可以在原语变量超出范围之前使其准备好由垃圾收集处理。@AIkepp:将0赋值给int与将null赋值给referece不同。对于前者,您实际上将0添加到堆栈中,并将引用点设为0,这意味着内存仍由0持有,并且该部分内存不能由垃圾收集处理。对于后者,对象可以通过垃圾收集处理,并且对象占用的内存可以重用。