十年架构师为你详解24道Jvm面试题,轻松备战金三银四跳槽季(14)
垃圾回收不会发生在永久代 , 如果永久代满了或者是超过了临界值 , 会触发完全垃圾回收(Full GC) 。 如果你仔细查看垃圾收集器的输出信息 , 就会发现永久代也是被回收的 。 这就是为什么正确的永久代大小对避免Full GC是非常重要的原因 。 请参考下Java8:从永久代到元数据区 (注:Java8中已经移除了永久代 , 新加了一个叫做元数据区的native内存区)
15.引用的分类
-
强引用:GC时不会被回收
-
软引用:描述有用但不是必须的对象 , 在发生内存溢出异常之前被回收
-
弱引用:描述有用但不是必须的对象 , 在下一次GC时被回收
-
虚引用(幽灵引用/幻影引用):无法通过虚引用获得对象 , 用PhantomReference实现虚引用 , 虚引用用来在GC时返回一个通知 。
###GC是什么?为什么要有GC? 答:GC是垃圾收集的意思 , 内存处理是编程人员容易出现问题的地方 , 忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃 , Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的 , Java语言没有提供释放已分配内存的显示操作方法 。 Java程序员不用担心内存管理 , 因为垃圾收集器会自动进行管理 。 要请求垃圾收集 , 可以调用下面的方法之一:System.gc() 或Runtime.getRuntime().gc() , 但JVM可以屏蔽掉显示的垃圾回收调用 。 垃圾回收可以有效的防止内存泄露 , 有效的使用可以使用的内存 。 垃圾回收器通常是作为一个单独的低优先级的线程运行 , 不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清除和回收 , 程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收 。 在Java诞生初期 , 垃圾回收是Java最大的亮点之一 , 因为服务器端的编程需要有效的防止内存泄露问题 , 然而时过境迁 , 如今Java的垃圾回收机制已经成为被诟病的东西 。 移动智能终端用户通常觉得iOS的系统比Android系统有更好的用户体验 , 其中一个深层次的原因就在于android系统中垃圾回收的不可预知性 。
推荐阅读
- 剑三|剑三又出新花样,陈月不当宗主为你指路,玩家:奇怪的牌面增加了
- 机战|沧海拾遗 钢魂不止:《机战》的下一个十年在哪里?
- 余霜|余霜晒“十年姐妹情”,篮球女主持小七写书,她特地为姐妹写序
- 大天狗|阴阳师:超鬼王进入“众生平等日”,大天狗为你演绎在线刮痧
- 传奇|十年热血 激情不变 :冰雪合击传奇手游 月灵合击直接送
- 假面骑士十年|假面骑士decade:白腰带2.0版本csm情报预告 帝骑哥腰带要重制了
- 戒指|DNF:商人十年后解封!仓库一堆灵犀戒指,拍卖行却成“白菜”
- 手机游戏|DNF最扎心的五张图,十年前能看懂就不会入坑了,最后一图太真实
- 街机游戏|街机游戏玩了几十年才搞明白:越不起眼的小怪,越容易收人头
- 电子竞技|一种误解所衍生出来的刻板印象 因为你是女玩家所以你就应该菜