码迷,mamicode.com
首页 > 编程语言 > 详细

java:JVM及相关概念

时间:2020-01-16 18:38:08      阅读:101      评论:0      收藏:0      [点我收藏+]

标签:方法区   私有   平台   虚拟   内存结构   jvm   利用   系统开发   inf   

1、概述

我们实际的开发中,先利用JDK(调用本地的API)开发属于自己的JAVA程序后,通过JDK中的编译程序(javac)将我们的文本java文件编译成JAVA字节码,在JRE上运行这些JAVA字节码,JVM解释这些字节码,映射到CPU指令集或OS的系统调用。所以在讲JVM之前,我们先来讲一下容易和JVM搞混的两个概念JDK和JRE。简单粗暴的理解就是:JDK包含JRE,JRE包含JVM

JVM:Java虚拟机,它只认识xxx.class这种类型的文件,它能够将class文件中的字节指令进行识别,并调用操作系统上API完成动作。所以说,jvm是Java能够跨平台的核心。

JRE:Java运行时环境,jre包括jvm和java核心类库与支持文件。

JDK:Java开发工具包,jdk是整个java开发的核心,包括了java运行环境(jre)、一堆java工具(javac、java、jdb等)和java基础类库(即Java API包括rt.jar)。

2、JVM基本概念

2.1 什么是JVM

jvm中文名称叫做Java虚拟机,它是由软件技术模拟出来计算机运行的一个虚拟的计算机。

jvm也充当这个一个翻译官的角色,我们编写出java程序后,是不能直接被操作系统所识别的,这时候jvm的作用就体现出来了,它负责把我们的程序翻译给操作系统听,告诉它我们的系统需要做什么操作。

我们都知道Java的程序需要经过编译后,产生.Class文件,JVM才能识别并运行它,JVM针对每个操作系统开发其对应的解释器,所以只要其操作系统有对应版本的JVM,那么这份Java编译后的代码就能够运行起来,这就是Java能一次编译,到处运行的原因。

2.2、JVM基本原理介绍

jvm体系总体分四大块:

  • 类的加载机制
  • jvm内存结构
  • GC算法 垃圾回收
  • GC分析 命令调优

 3、JVM运行时数据区

技术图片

 

 运行的程序是内容是放在运行时数据区中的,如上图蓝色那块依次来说明一下:

3.1 堆

保存所有引用类型的真是信息(线程共享),也是说那些new出来的对象都是放在这块区域的。

3.2 虚拟机栈

线程私有,生命周期和线程一致。描述的是 Java 方法执行的内存模型:每个方法在执行时都会床创建一个栈帧(Stack Frame)用于存储局部变量表操作数栈动态链接方法出口等信息。每一个方法从调用直至执行结束,就对应着一个栈帧从虚拟机栈中入栈到出栈的过程。当一个方法运行到一半需要调用另一个方法时,就创建一个新的栈帧表示新调用的方法,将原来那个方法压入栈中。当方法运行完毕,栈帧出栈,原来方法处于栈顶接着运行。和栈这一数据结构一样,虚拟机栈里面的栈帧遵循后进先出的原则。

技术图片

 

 3.3 方法区

又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。同时方法区里面还有一个叫常量池的地方,String的字符串等常量存储就存储在那边。

3.4 程序计数器

一个非常小的内存空间,用来保存程序执行到的位置(线程私有)。下面是一个程序计数器的演示:
public class TestDemo{
    public static void main(String args[]){
        String str = null;
        str.length();
    }
}

  上面程序会报空指针异常,如下图,在报的这个异常中,有一行日志 at TestDemo,main(TestDemo.java:4) 代表程序运行到TestDemo 中main()函数第四行的时候发生的错误,就是通过程序计数器来记录这个程序运行的位置的。

技术图片

 

 3.5 本地方法栈

和虚拟机栈类似,不过本地方法栈里面运行的方法不是用java写的,一般是用c或c++写的为虚拟机使用到Native方法服务,也有类似栈帧的的概念。

4、内存模型和垃圾回收

 

 


java:JVM及相关概念

标签:方法区   私有   平台   虚拟   内存结构   jvm   利用   系统开发   inf   

原文地址:https://www.cnblogs.com/mengY/p/12202486.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!