zoukankan      html  css  js  c++  java
  • GC解析-常见的面试题

    1、JM垃圾回收的时候如何确定垃圾?是否知道什么是 GC Roots?

    1. 什么是垃圾?

                简单的说就是内存中已经不再被使用到的空间就是垃圾

      2.要进行垃圾回收,如何判断一个对象是否可以被回收?

      引用计数法:

    Java中,引用和对象是有关联的。如果要操作对象则必须用引用进行
    因此,很显然一个简单的办法是通过引用计数来判断一个对象是否可以回收。简单说,给对象中添加一个引用计数器,
    每当有一个地方引用它,计数器值加1
    每当有一个引用失效时,计数器值减1。
    任何时刻计数器值为零的对象就是不可能再被使用的,那么这个对象就是可回收对象
    那为什么主流的Java虚拟机里面都没有选用这种算法呢?其中最主要的原因是它很难解决对象之间相互循环引用的问题

       枚举根节点做可达性分析(根搜索路径):

    case:

     Java 可以做GCRoots的对象:

    1.      虚拟机栈(栈帧中的局部变量区,也叫做局部变量表
    2.      方法区中的类静态属性引用的对象。
    3.      方法区中常量引用的对象
    4.     本地方法栈中N( Native方法)引用的对象

     4、强引用、软引用、弱引用、虚引用分别是什么?

    整体架构

    强引用(默认支持模式)

     

    软引用

     

     弱引用

     

     注:软引用和弱应用的适用场景

     你知道弱引用的话,能谈谈WeakHashMap吗?

    虚引用

     

     

    GCRoots和四大引用的小总结

     

  • 相关阅读:
    一道看似简单的sql需求却难倒各路高手
    手把手教你Linux服务器集群部署.net网站
    最简单的 Web Service 入门 (看了包会)
    360wifi 在 windows server 2008 / 2003 的使用方法
    react 入门
    bind、call、apply的区别
    webkit css 扩展
    如何构建一个微型的CMD模块化加载器
    Base64的原理、实现及应用
    You don't know JS 读书笔记(一)
  • 原文地址:https://www.cnblogs.com/cb1186512739/p/13124617.html
Copyright © 2011-2022 走看看