zoukankan      html  css  js  c++  java
  • JVM

    1、面试JVM借鉴                  (学习:B站:狂神说)

    JVM原型

    理解各个区域

    栈 

    首先栈是由一个个栈帧组成,栈不可以阻塞(线程级别)

    栈内存中是由一个个栈帧组成

     栈里都有啥

    1. 8大基本类型

    2. 对象引用

    3. 实例的方法(递归的本质就是压栈,弹栈)

    方法区

    方法区是特殊的堆,所有线程共享,所有定义的方法的信息

     方法区里都有啥

    1. 静态变量(static)

    2. 常量(final)

    3. 类信息(构造方法、接口定义)

    4. 运行时的常量池

    一个JVM只有一个堆内存(栈是线程级的),堆内存的大小是可以调节的(一般堆内存都给定最大最小值为相同的值,防止内存抖动影响性能

     堆内存里都有啥

    实例化的对象

     堆内存详解

    元空间 逻辑上存在,实际不存在

     

    垃圾回收GC

    首先,对象出生再伊甸园区

    • 假设伊甸园区只能存一定数量的对象,则每当存满时就会触发一次轻GC(Minor GC)
    • 轻GC清理后,有的对象可能还存在引用,就活下来了,活下来的对象就进入幸存区;有的对象没用了,就被GC清理掉了;每次轻GC都会使得伊甸园区为空
    • 如果幸存区伊甸园都满了,则会进入老年代,如果老年代满了,就会触发一次重GC(FullGC)年轻代+老年代的对象都会清理一次,活下的对象就进入老年代
    • 如果新生代老年代都满了,则OOM

    Minor GC:伊甸园区满时触发;从年轻代回收内存

    Full GC:老年代满时触发;清理整个堆空间,包含年轻代和老年代

    Major GC:清理老年代

    清理的条件

    引用为null,引用被赋新值,没有引用指向

    • 每个对象在创建的时候,就给这个对象绑定一个计数器。

    • 每当有一个引用指向该对象时,计数器加一;每当有一个指向它的引用被删除时,计数器减一。

    • 这样,当没有引用指向该对象时,该对象死亡,计数器为0,这时就应该对这个对象进行垃圾回收操作。

    GC算法

    引用计数

    垃圾,不要用

     

    复制算法

    年轻代常用方法,浪费一半内存空间

     

    标记-清除

    产生内存碎片,扫描两次

    不需要额外的空间

    标记-整理

    扫描三次(标记->清除->压缩)

    再次优化

    在内存空间足够的时候用标记清除算法,碎片足够多的时候进行压缩算法

    没有最好的算法,只有最适合你的算法

     

  • 相关阅读:
    中位数
    two-strings-are-anagrams&&compare-strings&&longest-words
    第三次作业-------结对编程
    Git的基本使用方法和安装&心得体会(使用git命令行)
    第二次作业-----------结对项目之需求分析与原型设计
    使用Git进行代码管理心得------------个人练习
    Android开发环境的发展演变
    软件工程的实践项目的自我目标
    QT实现2048
    poj3723 Conscription
  • 原文地址:https://www.cnblogs.com/springxian/p/13443054.html
Copyright © 2011-2022 走看看