当前课程知识点:JAVA程序设计进阶 >  第六章 Java虚拟机 >  6.2 Java虚拟机内存划分 >  Video

返回《JAVA程序设计进阶》慕课在线视频课程列表

Video在线视频

Video

下一节:Video

返回《JAVA程序设计进阶》慕课在线视频列表

Video课程教案、知识点、字幕

这一节我们将介绍

Java虚拟机的内存划分

也就是说Java虚拟机

在运行过程当中

它内部的这些内存结构

到底是分成哪几块

我们来看看这张图

在这张图上很明显的

把我们的Java虚拟机的内存

划分为以下这五个部分

我们从左边看的话

它分别是我们的方法区

和堆这个区

然后右半边的话

会包括我们的虚拟机栈

还包括我们的本地方法栈

以及我们的程序计数器

那这五个部分的话

我们还可以按照它的这个特性

分成两种属性

左半部这两部分的话

属于线程共享区域

也就是说不同的线程

可以去共享这部分这个区域

那右半边这部分的话

我们称之为线程私有

也就是说每个线程

都有独立拥有自己的这三个部分

那下面我们来具体介绍

这五个部分都分别是什么

首先是程序计数器

那程序计数器的话

是对于我们当前线程

执行到某条字节码的

行数的一个指示

那Java虚拟机

会根据计数器的值

来选取需要执行的操作语句

那程序计数器

它属于线程私有不可共享的

也就是说每个线程

都有自己的程序计数器

那如果你要把这个

当做共享区域来进行共享的话

会导致我们的程序计数器混乱

无法准确的执行

当前线程所需要执行的语句

那在这个区域的话

不会出现任何的

OutOfMemoryError的情况

也就是说这个

内存出界的这个错误

那我们Java虚拟机

内存的第二部分是虚拟机栈

虚拟机栈的话

也是我们经常所说到的栈内存

Java当中每一个方法

从调用直至到它这个完整的过程

就对应着一个栈帧

在虚拟机栈中

入栈到出栈的整个过程

如果我们线程请求的

栈的深度大于虚拟机

所允许的深度那就会抛出

StackOverflowError

也就是栈溢出的这种异常

那一般情况下

说我们虚拟机栈

它是可以动态扩展的

也就是说当前

大部分Java虚拟机

它是有这个特性

可以动态扩展

只不过说Java虚拟机规范中

也允许你实现虚拟机

说有固定长度的虚拟机栈

如果我们在扩展的时候

无法申请到足够多的内存

那同样也会抛出

OutOfMemoryError

这样的异常

那我们Java虚拟机中

内存的第三个部分

叫本地方法栈

本地方法栈它是用来执行

本地方法 什么叫本地方法

也就是本地方法

它不一定是拿Java语言

来编写的方法

因为我们说我们Java虚拟机的话

它是会运行在不同的操作系统

和硬件上面

那在本身Java虚拟机的

内部实现的时候

也会有一部分代码是

运行的是本地代码

非Java这个代码

包括你们自己写程序的时候

也可以比如用C或C加加

写一段程序

最后把它嵌入到Java代码当中

这也是可以的

那我们这个本地方法栈

主要是用来执行本地方法

那它同样有可能会抛出异常

那所谓的抛出异常的种类

也和我们的虚拟机栈一样

而我们的虚拟机栈

它的对应的功能

主要是用来执行我们的Java方法

那我们在Java虚拟机内存的

内部结构的第四部分就是堆

那堆的话是Java虚拟机当中

内存最大 线程共享的一块区域

它唯一的目的

是存储各种对象实例

那堆的话也是我们垃圾回收器

主要工作的区域

那由于现在垃圾收集器

采用的是分代收集算法

所以Java堆

也分为新生代的堆和老年代的堆

如果大家在运行

这个Java程序的时候

你一样也可以通过一些参数

来去配置一下

你运行Java虚拟机的时候

它的一些内存的大小

比如说你可以通过参数-Xmx

来设计一下

就是说配置一下

我们Java虚拟机最大可用内存

或者用-Xms来去设置一下

我们的这个Java虚拟机的初始内存

当然这些设置

如果到了一定程度

比如说我们随着这个

Java程序运行过程当中

占用的内存越来越多的时候

那我们的内存无法扩展时

它就会出现

OutOfMemoryError

也就是这个内存超出的这种错误

那我们Java虚拟机内存的

内部结构的第五部分叫方法区

那方法区的话

是虚拟机当中内存共享的一片区域

它主要用来存储我们各种类信息

存储我们的常量

存储静态变量 存储class文件

那我们的垃圾回收器

也会对这部分区域进行回收

比如对常量池的清理

和对类型的卸载

那当我们方法区的内存

不够用的时候

它同样也会抛出

OutOfMemoryError这样错误

那关于Java虚拟机的内存的

内部结构的内容

这一节就介绍到这里

JAVA程序设计进阶课程列表:

第一章 线程(上)

-1.0 导学

--Video

-1.1 线程的基本概念

--Video

-1.1 线程的基本概念--作业

-1.2 通过Thread类创建线程

--Video

-1.2 通过Thread类创建线程--作业

-1.3 线程的休眠

--Video

-1.3 线程的休眠--作业

-1.4 Thread类详解

--Video

-1.5 通过Runnable接口创建线程

--Video

-1.5 通过Runnable接口创建线程--作业

-1.6 线程内部的数据共享

--Video

第二章 线程(中)

-2.0 导学

--Video

-2.1 线程同步的思路

--Video

-2.2 线程同步的实现方式—Synchronization

--Video

-2.3 线程的等待与唤醒

--Video

-2.4 后台进程

--Video

-2.5 线程的生命周期与死锁

--Video

-2.6 线程的调度

--Video

第三章 线程(下)

-3.0 导学

--Video

-3.1 线程安全与线程兼容与对立

--Video

-3.2 线程的安全实现-互斥同步

--Video

-3.3 线程的安全实现-非阻塞同步

--Video

-3.4 线程的安全实现-无同步方案

--Video

-3.5 锁优化

--Video

第四章 网络编程(上)

-4.0 导学

--Video

-4.1 URL对象

--Video

-4.2 URLConnection对象

--Video

-4.3 Get请求与Post请求

--Video

-4.4 Socket通信原理

--Video

-4.5 Socket通信实现

--Video

第五章 网络编程(下)

-5.0 导学

--Video

-5.1 Socket 多客户端通信实现

--Video

-5.2 数据报通信

--Video

-5.3 使用数据报进行广播通信

--Video

-5.4 网络聊天程序

--Video

第六章 Java虚拟机

-6.0 导学

--Video

-6.1 Java虚拟机概念

--Video

-6.2 Java虚拟机内存划分

--Video

-6.3 Java虚拟机类加载机制

--Video

-6.4 判断对象是否存活算法及对象引用

--Video

-6.5 分代垃圾回收

--Video

-6.6 典型的垃圾收集算法

--Video

-6.7典型的垃圾收集器

--Video

第七章 深入集合Collection

-7.0 导学

--Video

-7.1 集合框架与ArrayList

--Video

-7.2 LinkedList

--Video

-7.3 HashMap与HashTable

--Video

-7.4 TreeMap与LinkedHashMap

--Video

-7.5 HashSet

--Video

第八章 反射与代理机制

-8.0 导学

--Video

-8.1 Java反射机制

--Video

-8.2 Java静态代理

--Video

-8.3 Java动态代理

--Video

-8.4 Java 反射扩展-jvm加载类原理

--Video

-8.5 Java进阶课程总结

--Video

Video笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。