一、前言
这篇博客起,小编会向一个更加深层次、逼格满满的区域进发——JVM。
可以说JVM不是一个新鲜的东西,但是做java的都会了解JVM,都听过JVM。有的时候我们写的代码运行跟JVM也有关系。
二、JVM介绍
在java诞生的时候,就说“一处编译,到处运行”,是什么来保障“到处运行”的呢?
答案就是JVM。
宏观把控
要想学习jvm,就要对jvm有一个全局把控。
下面的图中是小编画的简单的jvm的重要的内容,也是小编在后面的博客中重点学习的,本节中,就先向大家介绍java运行时的区域。
JVM的位置和作用
我们在使用java之前呢,一开始就要安装jdk,jdk包含了java运行环境JRE、java工具包和java基础类库。其中JRE又包括了JVM、Java核心类库和支持文件。
从上面的图可以看出,我们写好的java文件,经过编译为class文件(字节码文件)。class文件就运行在JVM上,经过java解释执行。
JVM发展历史
三、java内存区域
针对Java的内存区域,我推荐大家可以用四象限的方式来学习。如下图:
在图中,把整个内存区域分层了四块:栈、方法区、堆、程序计数器。
栈
有过一两年的编程经验的工程师都会听过过这个。学过数据结构的就更不在话下。栈的最大的特点就是:“先进后出”。
在Jvm中,栈存储的是局部变量、操作数栈和动态链接方法。
方法区
方法区主要就是存储类、常量和静态变量。
方法区中没有垃圾收集。
堆
堆中主要存储的是对象实例和数组实例。
堆是主要的内存回收区域。
一般我们把堆分为新生代和老年代。更新细致一点的分配是Eden、From Survivor 和To Survivor。
我们这样分配是跟要使用的内存分配和回收算法有关系,也是为了更好的分配和回收内存。
程序计数器
主要是计数的。
四、小结
通过这次的学习,我们可以了解,我们写的代码在PC中运行的时候,代码中的各个部分是存储在内存中的什么位置,进一步我们可以分析分析,如何写代码可以让程序运行的更快。