【JVM】程序员进阶JVM(一)——Java内存区域

一、前言

这篇博客起,小编会向一个更加深层次、逼格满满的区域进发——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中运行的时候,代码中的各个部分是存储在内存中的什么位置,进一步我们可以分析分析,如何写代码可以让程序运行的更快。

猜你喜欢

转载自blog.csdn.net/kisscatforever/article/details/80613878