IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Java知识库 -> JVM内存布局 -> 正文阅读

[Java知识库]JVM内存布局

目录

文章内容

JVM内存模型-原理图

程序计数器?

虚拟机栈

方法区

java堆

直接内存?

jdk6,7,8的内存模型区别


文章内容

解决以下问题:

1.JVM有哪些空间?

运行时数据区:程序计数器,虚拟机栈,本地方法栈,方法区,java堆以及直接内存。

2.线程共享还是独享?

程序计数器,虚拟机栈,本地方法栈为线程独享。

方法区,java堆为线程共享。

3. 有没有可能异常?

程序计数器?这个内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError的情况的区域。

4.JVM的优化?

暂时没深入。

JVM内存模型-原理图

直接调用本地库: ? native?

程序计数器?

? ? 特征
?? ??? ?1.因为处理器在一个确定是时刻只会执行一个线程中的指令,线程切换后,是通过计数器来记录执行痕迹的,因此程序计数器是每个线程私有的。
?? ??? ?2.如果执行的是java方法,那么记录的是正在执行的虚拟机字节码指令的地址的地址,如果是native方法,计数器的值为空(undefined)。
?? ?作用
?? ??? ? 程序计数器是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
?? ?异常
?? ??? ? 这个内存区域是唯一一个在java虚拟机规范中没有规定任何OutOfMemoryError的情况的区域。

虚拟机栈

??? 特征
?? ??? ?线程私有。
?? ??? ?后进先出(LIFO)栈。
?? ??? ?存储栈帧,支持Java方法的调用、执行和退出。
?? ??? ?可能出现OutOfMemoryError异常和StackOverflowError异常。
?? ?作用
?? ??? ?用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法的执行就对应着栈帧在虚拟机栈中的入栈,出栈过程。
?? ?异常
?? ??? ? 异常:线程请求的栈帧深度大于虚拟机所允许的深度---StackOverFlowError,如果虚拟机栈可以动态扩展(大部分虚拟机允许动态扩展,也可以设置固定大小的虚拟机栈),但是无法申请到足够的内存---OutOfMemorError。

方法区

? ?作用
?? ??? ? 线程共享,方法区中存储了每个类型的对应的常量池,即虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等等。(HotSpot虚拟机上开发部署人员更愿意成为“永久代”,Permanent Generation)。
?? ?异常
?? ??? ? 方法区溢出也是一种常见的内存溢出异常。
?? ?特征
?? ??? ?1.又叫静态区,跟堆一样,被所有的线程共享。方法区包含所有的class和static变量。?
?? ??? ?2.方法区中包含的都是在整个程序中永远唯一的元素,如class,static变量。?
?? ?内存参数配置
?? ??? ?通过jvm参数:-XX:PermSize、-XX:MaxPermSize来设置方法区大小。

java堆

堆内存(垃圾收集器重点关注区)
?? ?特征
?? ??? ?Java 中的堆是 JVM 所管理的最大的一块内存空间,主要用于存放各种类的实例对象
?? ?作用
?? ??? ?在 Java 中,堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。新生代 ( Young ) 又被划分两个区域:Eden、From Survivor、To Survivor。
?? ?模型
?? ??? ?堆大小 = 新生代 + 老年代。
?? ??? ?新生代 ( Young ) 与老年代 ( Old ) 的默认比例的值为 1:2,其中,新生代 ( Young ) 被细分为 Eden 和 两个 Survivor 区域,这两个 Survivor 区域分别被命名为 from 和 to,以示区分。
?? ??? ?所以,默认的,Eden : from : to = 8 : 1 : 1。

?GC 堆
?? ?Minor GC
?? ??? ?Minor GC 是发生在新生代中的垃圾收集动作,所采用的是复制算法
新生代几乎是所有 Java 对象出生的地方,即 Java 对象申请的内存以及存放都是在这个地方。Java 中的大部分对象通常不需长久存活,具有朝生夕灭的性质。
当一个对象被判定为 “死亡” 的时候,GC 就有责任来回收掉这部分对象的内存空间。新生代是 GC 收集垃圾的频繁区域。
当对象在 Eden ( 包括一个 Survivor 区域,这里假设是 from 区域 ) 出生后,在经过一次 Minor GC 后,如果对象还存活,并且能够被另外一块 Survivor 区域所容纳
( 上面已经假设为 from 区域,这里应为 to 区域,即 to 区域有足够的内存空间来存储 Eden 和 from 区域中存活的对象 ),则使用复制算法将这些仍然还存活的对象复制到另外一块 Survivor 区域 ( 即 to 区域 ) 中,然后清理所使用过的 Eden 以及 Survivor 区域 ( 即 from 区域 ),并且将这些对象的年龄设置为1,以后对象在 Survivor 区每熬过一次 Minor GC,就将对象的年龄 + 1,当对象的年龄达到某个值时 ( 默认是 15 岁,可以通过参数 -XX:MaxTenuringThreshold 来设定 ),这些对象就会成为老年代。
但这也不是一定的,对于一些较大的对象 ( 即需要分配一块较大的连续内存空间 ) 则是直接进入到老年代。
?? ?Full GC ( 或称为 Major GC )
?? ??? ?Full GC 是发生在老年代的垃圾收集动作,所采用的是标记-清除算法
现实的生活中,老年代的人通常会比新生代的人 “早死”。堆内存中的老年代(Old)不同于这个,老年代里面的对象几乎个个都是在 Survivor 区域中熬过来的,它们是不会那么容易就 “死掉” 了的。因此,Full GC 发生的次数不会有 Minor GC 那么频繁,并且做一次 Full GC 要比进行一次 Minor GC 的时间更长。
另外,标记-清除算法收集垃圾的时候会产生许多的内存碎片 ( 即不连续的内存空间 ),此后需要为较大的对象分配内存空间时,若无法找到足够的连续的内存空间,就会提前触发一次 GC 的收集动作。

?配置
?? ?

直接内存?

它不是jvm运行时数据区的一部分,也不是jvm规范中定义的内存区域,主要用于与I/O相关的一些API中。

jdk6,7,8的内存模型区别

jdk8取消了方法区,用元空间来代替,它在jvm内存空间外,由本地内存分配空间来保存。

  Java知识库 最新文章
计算距离春节还有多长时间
系统开发系列 之WebService(spring框架+ma
springBoot+Cache(自定义有效时间配置)
SpringBoot整合mybatis实现增删改查、分页查
spring教程
SpringBoot+Vue实现美食交流网站的设计与实
虚拟机内存结构以及虚拟机中销毁和新建对象
SpringMVC---原理
小李同学: Java如何按多个字段分组
打印票据--java
上一篇文章      下一篇文章      查看所有文章
加:2021-09-02 11:13:10  更:2021-09-02 11:13:56 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 12:48:37-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码