了解JVM(一)

初步认识虚拟机

Java虚拟机(JVM),它是由软件技术模拟计算机运行的一个虚拟的计算机。相当于一个翻译官的角色。我们都知道Java的程序需要经过编译后产生.Class 文件,接下来要将class文件加载到内存中,JVM才能识别并运行它。Java能轻松实现跨平台。

JVM的生命周期

JVM在Java程序开始执行的时候,他才运行,程序结束的时候他就停止。
一个Java程序会开启一个JVM进程,JVM中的线程分为两种:守护线程和普通线程。守护线程是JVM自己使用的线程,比如垃圾回收(GC)就是一个守护线程。普通线程一般是Java程序的线程,只要JVM中有普通线程在执行,那么JVM进程就不会停止。

JVM的运行机制概要

要运行Java程序,首先要编写Java的源文件(.java)。之后Java编译器将文件编译成对应的字节码文件(.class文件),之后再通过类加载器将字节码文件(*.class)加载到JVM中。其中在JVM中与程序运行最密切的是运行时数据区(Runtime data area)。

运行时数据区(JVM内存模型)

(方法区、堆区、虚拟机栈(栈帧)、本次方法栈、程序计数器)
了解JVM(一)_第1张图片

  • 程序计数器:
    程序计数器是用于存放下一条指令所在单元的地址的地方。程序执行必须知道指令,此时就需要从程序计数器中读取即将执行的指令的地址,通过这个指定就可以得到指令从而执行。

  • 虚拟机栈
    该区域是线程私有的,虚拟机栈的生命周期和线程相同,在执行一个Java方法的时候会在该区域创建一个栈帧,用来**保存局部变量表(在方法中定义的变量或者方法的参数都是方法的局部变量)、动态链接、方法出口、操作数栈等等信息。**其实每个方法从执行完毕就是一个入栈与出栈的过程。当入栈的速度大于出栈的速度的时候就会出现栈内存溢出(Exception in thread “main” java.lang.StackOverflowError)

  • 本地方法栈
    和虚拟机栈的作用很相似,不同点是虚拟机栈是为Java方法服务的,本地方法栈是为native方法服务的(这种方法是没有方法体的,可以算是一个抽象方法,具体的实现是本体操作系统的c语言写的一些函数库中的方法实现的)


  • 是运行时数据区最大的一块子区域,创建的实例对象的方法组都需要在堆内存开辟空间,堆空间是线程共享的区域,该区域也是gc(垃圾回收)重要处理的一个区,所以堆有被称为“GC堆”。

  • 方法区
    永久代实现了方法区,在1.8之前出现的概念,在之后就没有了永久代,而是使用了元空间代替了。
    方法区也是一块线程共享的区域,该区域主要保存的是已经加载到JVM中的类的信息、常量、静态变量等等。

你可能感兴趣的:(学习Java基础,java,jvm,jdk)