RT
面试的时候 被问到这个问题
我知道 static 不会被回收, 但 int 等原始变量 比如  short long 等

解决方案 »

  1.   

    只要class文件存在,那么对应java中的static就不会被回收吧。
      

  2.   

    只要class文件存在,那么对应java中的static就不会被回收吧。
      

  3.   

    回收规则跟普通变量回收规则一样,比如:
    public class Test {
      private int i = 111;
      private Object a = null;
    }public void test() {
      int i = 111;  
      Object a = null;
    }
    不要考虑对象回收,对象回收跟变量回收并不相同。
      

  4.   

    那 int 的 变量 gc 会回收么
      

  5.   

    java把i当Integer的话就回收了吧
      

  6.   

    int 是放在栈里面的,gc只回收堆里面的对象,就是new 出来的对象
      

  7.   

    修正一下
    gc只会回收java堆上的内存,java栈里面情况完全不同,谈不上回收,java堆和堆、java栈和栈分别是2个不同的概念。另 楼主你想表述的意思是
    class MyClass {
        public static Object sObject = new Object();
    };sObject 这个引用的本体sObject本身被回收吧?它是不会被回收的,但是new Object()这个本体是可以被回收的,只要sObject被修改的引用或者sObject = null;时 它原先的引用的对象就会到java堆中被回收。
      

  8.   

    gc只能回收堆上的内容。其实Java屏蔽底层实现的做法实际上使很多接近底层实现的问题变得很难理解和解释(当然,许多人认为这部分知识是大部分程序员不需要掌握的)。首先,GC存在的理由是什么?
    对C/C++学得深点的同鞋都清楚OS给程序分配的内存组成:静态内存(static)与动态内存(auto)。其中静态内存区在Java中被称为“永久区”,由于其硬件特性通常用来存放不经常变动的数据:全局变量、静态变量,OOP中增加的类声明、类变量(记得上面有人说到标记static的类变量存放在栈中,这理解是错误的,它们实际上存储在“永久区”)。
    对动态内存区,OS给划分成两大部分:栈和堆。
    对高级语言来说,栈内存的管理实际上是由编译器完成的:在进行函数调用时入栈,函数返回时出栈。不管是对于静态内存还是栈的管理都有个前提:需要分配的内存大小都是已知的,编译器可以通过一个简单的加法运算算出自己要找的内存地址。但有时我们想要分配的内存大小不是已知的,有的甚至需要在运行时计算分配内存的空间大小。用于解决这一问题就是动态内存中的另一区域:堆。堆内存的管理是由程序员自己完成的,这在C/C++中称为“动态内存分配”。例如在C++中,既有用于申请堆内存的关键字new,也有用于释放内存的关键字delete。C/C++程序设计的原则之一就是申请的内存一定要释放掉。有时因为代码太长了而出现忘记释放内存而经常在程序运行后留下所谓的内存垃圾。为了避免内存垃圾的堆积而影响计算机性能,最早在C++出现了定时释放无用内存的组件——也就是GC的前身。总结起来,GC是为了避免程序员忘记释放内存而出现的,那么它所能回收的内存区域只能是程序员自己管理的内存区域——堆。
      

  9.   

    这个应该是分情况吧。如果这个int在堆那么有可能会被gc()回收。如果在栈,那就不会被会gc()回收,会随着栈帧出栈而自然就被回收掉了。
      

  10.   


    如果 一个类的里面的int 属性  , 那个类用完了 之后 那个int 会回收么 还是那个值不会回收?
      

  11.   

    楼上错了一大排,谁说int变量就一定是在栈里的?int类型的类成员变量跟对象一起保存在堆里!
      

  12.   

    int类型变量是不会被GC回收的,只是JVM会管理栈,当因各种原因进行出栈操作时,这种类型变量会被自动释放。
      

  13.   

    http://yiliner.iteye.com/blog/207723
    大伙都看看这文章吧
      

  14.   

    错了 :超脱总结为21楼
    sorry
      

  15.   

    int 不会被回收,在堆中的对象才会被回收