JVM学习--基础知识整理

目录

1. 什么是JVM

2. JVM 的内存区域

3. 栈溢出和堆溢出

4. JVM 的类加载机制

5. 垃圾回收算法

6. 垃圾回收器


1. 什么是JVM

JVM是用于运行Java字节码的虚拟机,包括一套字节码指令集,一组程序寄存器,一个虚拟机栈,一个虚拟机堆,一个方法区和一个垃圾回收器。Java运行在操作系统上,不与硬件设备直接交互。

Java程序的具体运行过程如下:

    1)Java源文件被编译器编译成字节码文件

    2)JVM将字节码文件编译成相应操作系统的机器码

    3)机器码调用相应操作系统的本地方法库执行相应方法


2. JVM 的内存区域

    Java的内存区域分为线程私有、线程共享和直接内存,其中方法区和Java堆为线程共享区域,本地方法区、程序计数器和虚拟机栈为线程私有区域。

        线程私有区域的生命周期与县城相同,随线程的启动而创建,随线程的结束而销毁。在JVM内部每个线程都与操作系统的本地线程直接映射,

        线程共享区域随虚拟机的启动而创建,随虚拟机的关闭而销毁。

        直接内存也叫做堆外内存,它并不是JVM运行时数据区的一部分,但在并发编程中被频繁使用。

程序计数器:用于存储当前运行线程所执行的字节码行号指示器。如果该方法执行的是native方法,则程序计数器的值为空

虚拟机栈:方法执行过程的内存模型,在当前栈帧中存储了局部变量表、操作数栈、动态链接和方法出口等信息。每个栈由多个栈帧组成,对应每次方法调用时所占的内存,每个线程只有一个活动栈帧,对应当前正在执行的方法。

虚拟机堆:存储数组和所有创建的对象,是垃圾回收的内存区域

方法区:存储常量、静态变量、类信息、运行时常量池等数据


3. 栈溢出和堆溢出

栈溢出:递归没有出口可能引发栈溢出

public class Demo01{
    private int count;
    public static void method(){
        count++;
        method();
    }

    public static void main(String[] args){
        try{
            method();
        }catch(Throwable e){
            e.printStackTrace();   
            System.out.println(count); 
        }
    }
}

堆溢出:持续创建对象可能造成堆溢出

String str = new String("abc");
for(int i = 0;i < 100000000; i++){
    str += str;
}

4. JVM 的类加载机制

    双亲委派机制:

        JVM在类加载过程中默认采用双亲委派机制。双亲委派机制指当一个类发出了类加载请求时,首先将该请求委托给其父类,依次递归,如果父类能够完成该类加载任务,就成功返回,如果不能完成,则交由其子类完成类加载任务。

        双亲委派机制的优点是保证了类的唯一性和安全性。


5. 垃圾回收算法

    (1)复制算法

    (2)标记清除算法

    (3)标记整理算法

    (4)分代垃圾回收


6. 垃圾回收器

    新生代垃圾回收器:    

        (1)serial:单线程垃圾回收器,复制算法

        (2)parNew:多线程垃圾回收器,serial的多线程版本,复制算法

        (3)parallel scavenge:多线程垃圾回收器,parallel scavenge 的目标是达到一个可控制的吞吐量,复制算法

    老年代垃圾回收器:

        (1)serial old:serial的老年代版本,标记整理算法

        (2)parallel old:parallel scavenge的老年代版本,标记整理算法

        (3)CMS:CMS 收集器是一种以最短回收停顿时间为目标的收集器,标记清除算法。

                     分为四个步骤:

                         1)初始标记(STW) 2)并发标记  3)重新标记 (STW) 4)并发清理

   G1(暂不整理)


参考文献:

    offer来了-Java面试核心知识点精讲原理篇   中国工信出版集团

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值