A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 不二晨 金牌黑马   /  2019-1-7 09:29  /  736 人查看  /  3 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

在最近学习了一下JVM的知识,现在将学到的做一个总结

overview

一、什么是JVM?

1、jvm的定义

2、jvm的位置

3、jvm的意义

二、JVM的构造

1、类加载子系统与方法区

2、方法区

3、java堆

4、程序计数器

5、java栈

6、本地方法栈

7、直接内存

三、垃圾回收算法(待续)

1、复制

2、标记- 清理

3、标记- 整理

一、什么是JVM?

1、定义

JVM是java 程序的运行平台,就像一台虚拟出来的计算机一样(类似VMware),负责执行Java编译好的字节码文件,编译成机器码。
JVM有许多虚拟机HotSpot、
1
2
2、位置

jvm在系统中的位置处于下图,是在操作系统之上的,和QQ这些程序是一样运行于操作系统之上的,在虚拟机的上边有运行着java程序
1


3、意义

一句话实现: 跨平台

二、JVM的构造

先说一下总体构造
1

上边的这个图就是jvm的大体架构
下面我们一个一个的解释

1、类加载子系统与方法区
类加载子系统负责从网络或文件系统中加载Class信息,加载的类信息存放于一块成为方法区的内存空间。

2、方法区
方法区存放的是类信息,可能会存放运行时的常量信息,包括字符串字面量和数字常量(这部分常量信息是Class文件中常量池部分的内存映射)

3、java堆
对于大多数应用来说,java堆是java虚拟机所管理的内存中的最大的一块。
java堆是被所有线程共享是的一块区域,在虚拟机启动的时候建立,它是java程序最主要的内存工作区域。
堆的唯一目的就是存放对象实例,几乎所有的对象实例都在这里分配内存(在java虚拟机规范中的描述是:所有的对象实例以及数组都要在堆上分配,随着JIT编译器的发展,所有对象都分配在堆上也不是那么绝对了 )。

同时java堆是垃圾收集器管理的主要区域,java堆的结构如下
1


为了垃圾回收,在堆中又分出了新生代、老年代、以及持久代(在jdk1.8后被取消了) 详情放到垃圾回收部分

4、程序计数器 (Progame Counter Register)

程序计数器,是一块较小的内存区域,它可以看做是当前线程所执行的字节码行号指示器。
由于java虚拟机的多线程是通过线程轮流切换并分配处理器的时间方式实行的,所以每条线程都需要一个独立的PC。

如果执行的是java方法,指向的就是正在执行的虚拟机字节码指令的地址;如果执行的是Native方法(本地方法),这个计数器值则为空。
1
2
3
4
5、java栈

与PC一样,java栈也是线程私有的, 生命周期与线程相同。虚拟机描述的是java执行的内存模型:
每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每个方法从调用直至执行完成的过程就对应着一个栈帧在虚拟机栈中从入栈到出栈过程。
1
2
6、本地方法栈

本地方法栈为虚拟机使用到的Native方法服务(我理解的Native
方法就是java程序调用的非java方法,不一定准确)。功能与java栈类似。
1
2
7、直接内存

直接内存并不是虚拟机运行时的数据区的一部分,也不是java虚拟机规范中定义的内存区域。
但是这部分内存区域被频繁使用。本地方法运行的内存区域。
---------------------
转载,仅作分享,侵删
作者:Round_Yuan
原文:https://blog.csdn.net/ProgramMonika/article/details/83185598


3 个回复

倒序浏览
看一看。
回复 使用道具 举报
奈斯,加油
回复 使用道具 举报
谢谢
,看一看
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马