一、内存模型&分区

Java虚拟机在运行Java程序时,会管理着一块内存区域:运行时数据区

在运行时数据区里,会根据用途进行划分为以下模块:

1、Java虚拟机栈

2、本地方法栈

3、Java堆

4、方法区

5、程序计数器

二、Java堆

简介:

1、定义:即堆内存(Heap),是垃圾收集器管理的主要区域,也称为GC堆。

2、作用:存放Java对象实例。

3、特点:在JVM内存中是最大的,是线程共享的区域。

4、抛出的异常:OutOfMemoryError异常,堆中没有足够的内存完成对象实例的分配、堆无法再扩展。

注: 1、从内存回收的角度分为:新生代和老年代; 2、从内存分配的角度相当于:多个线程私有的分配缓冲区。

三、Java虚拟机栈

简介:

1、定义:栈内存(Stack),是Stack、java方法执行的内存模型。

2、作用:存储java方法执行时的局部变量。

注:以帧栈的形式,含数据型、对象的应用,方法执行结束后释放。

3、特点:线程私有、生命周期与线程相同。

4、抛出的异常:OutOfMemoryError异常(虚拟机栈扩展时无法申请到内存空间)、StackOverflowError异常(线程请求栈深度>虚拟机所允许深度)。

注: 1、每个java方法执行时都会创建一个栈帧; 2、一个java方法从被调用到执行完成等于一个栈帧在虚拟机栈中的入栈到出栈; 3、局部变量表所需内存空间在方法编译时就会完成分配,在方法运行时不会改变大小。

四、本地方法栈

简介: 十分类似java虚拟机栈,与java虚拟机栈区别在于:服务对象。java虚拟机栈为执行java方法服务,而本地方法栈为执行native方法服务。

五、方法区

简介: 1、定义:堆的一个逻辑部分,为了与java堆区分,又称“非堆”区域(Non-Heap)。

2、作用:存储已被虚拟机加载的类信息、常量、静态变量等数据。

3、特点:线程共享。

4、抛出的异常:OutOfMemoryError异常(当方法区无法满足内存分配需求时抛出)。

注:该区域的内存回收主要针对运行时常量池和对类的卸载,又称:永久代,回收条件苛刻,很少出现垃圾收集。

运行时常量池

  • 定义:方法区的一部分。

  • 作用:存放类文件在编译时生成的各种字面量、符号引用。

  • 特点:动态性,即运行时也可添加新的常量,如String类的intern()。

  • 抛出的异常:OutOfMemoryError异常(当场量池无法申请到内存时)。

六、程序计数器

简介:

1、定义:当前线程所执行的字节码的行号指示器。

2、作用:实现异常处理、线程恢复等基础功能。

3、原理:通过改变计数器的值来选取下一条执行的字节码指令。

4、特点:线程私有、内存空间小。

5、抛出的异常:唯一一个在jvm中无任何OutOfMemoryError的内存区域。

注:线程私有的内存区域:为了使得线程切换后恢复到正确的执行位置,每个线程都配有一个独立的程序计数器,各线程互不影响,独立存储的内存区域。

JVM简单概述的更多相关文章

  1. Java虚拟机(JVM)概述

    JVM(Java虚拟机)是一个抽象的计算模型.就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域.目的是为构建在其上运行的应用程序提供一个运行环境.JVM可以解读指令代码并与底 ...

  2. [转载]SharePoint 2013搜索学习笔记之搜索构架简单概述

    Sharepoint搜索引擎主要由6种组件构成,他们分别是爬网组件,内容处理组件,分析处理组件,索引组件,查询处理组件,搜索管理组件.可以将这6种组件分别部署到Sharepoint场内的多个服务器上, ...

  3. SNMP学习笔记之SNMP简单概述

    0x00 SNMP简单概述 0.1.什么是Snmp SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理 ...

  4. SNMP简单概述

    一.SNMP简单概述 1.1.什么是Snmp SNMP是英文"Simple Network Management Protocol"的缩写,中文意思是"简单网络管理协议& ...

  5. 【JVM专题】JVM从概述到调优图文详解,含思维脑图深度剖析!

    JVM概述 JVM 是一种用于计算机设备的规范,它是一个虚构的计算机的软件实现,简单的说,JVM 是运行 byte code 字节码程序的一个容器. 它有一个解释器组件,可以实现 JAVA 字节码和计 ...

  6. JVM监控概述(图文)

    JVM内存分配概述 Jvm 内存分为:堆.非堆及直接内存三大块. 堆区分为年轻代和老年代,永生代属于非堆内存. 对象优先在Eden区分配 大对象直接进入老年代 长期存活的对象将进入老年代 class. ...

  7. JAVA 文件编译执行与虚拟机(JVM)简单介绍

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcytpo3 java程序的内存分配 JAVA 文件编译执行与虚拟机(JVM)介绍 ...

  8. JVM体系结构概述

    ClassLoader(类装载器) 负责加载class文件. class文件在文件开头有特定的文件标示,并且ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution ...

  9. 01 jvm学习过程概述

    声明:本博客仅仅是一个初学者的学习记录.心得总结,其中肯定有许多错误,不具有参考价值,欢迎大佬指正,谢谢!想和我交流.一起学习.一起进步的朋友可以加我微信Liu__66666666 这是简单学习一遍之 ...

  10. 一、Java简单概述

    一 . Java组成部分 JDK : java development kit (Java开发工具) JDK是提供给Java开发人员使用的,其中包含了java的开发工具,也 包括了JRE. 所以安装了 ...

随机推荐

  1. FolkMQ 内存型消息中间件,v1.0.21 发布

    简介 采用 "多路复用" + "内存运行" + "快照持久化" + "Broker 集群模式"(可选)+ 基于 Sock ...

  2. net8获取泛微token以及访问api示例

    工作中涉及到调用泛微的场景,官方的示例又臭又长,抽空用NET8简化了写法,为了简化http访问,用了Flurl.Http这个库.在座各位大佬,我们直接就看代码了   using System.Secu ...

  3. C++ Qt开发:StandardItemModel数据模型组件

    Qt 是一个跨平台C++图形界面开发库,利用Qt可以快速开发跨平台窗体应用程序,在Qt中我们可以通过拖拽的方式将不同组件放到指定的位置,实现图形化开发极大的方便了开发效率,本章将重点介绍Standar ...

  4. Win10 SFC& Dism修复系统

    在Win10开始按钮上点击右键(或按Win + X快捷键),在弹出的系统快捷菜单中点击  Windows PowerShell(管理员)或者  命令提示符CMD (管理员) 方法 1 SFC输入&qu ...

  5. CTFHub SSRF Redis协议 WriteUp

    CTFHub SSRF Redis协议 进入环境,可以看到url格式为: http://challenge-2c082607df3fa433.sandbox.ctfhub.com:10800/?url ...

  6. DVWA Insecure CAPTCHA(不安全的验证码)全等级

    Insecure CAPTCHA(不安全的验证码) 目录: Insecure CAPTCHA(不安全的验证码) 1. Low 2.Medium 3. High 4.Impossible 加载验证码需要 ...

  7. ncurses 与 panel

    ncurses 与 panel 一下是ncurses使用面板库panel的一个demo程序. #include <ncurses.h> #include <panel.h> # ...

  8. CUDA个人入坟笔记

    CUDA是建立在NVIDIA的GPUs上的一个通用并行计算平台和编程模型,基于CUDA编程可以利用GPUs的并行计算引擎来更加高效地解决比较复杂的计算难题.近年来,GPU最成功的一个应用就是深度学习领 ...

  9. [Python急救站]学生管理系统链接数据库

    相信很多人在初学Python的时候,经常最后作业就是完成一个学生管理系统,但是我们来做一个完美的学生管理系统,并且将数据储存到数据库里. 我们先看看我们的数据库怎么设置. 首先呢,我选择用的是SQL ...

  10. 【.NET开发福音】使用Visual Studio将JSON格式数据自动转化为对应的类

    前言: 这段时间一直在做一个第三方平台的对接,对接第三方其实无非就是请求调用第三方的相关接口接收返回过来的相关参数.因此在这个过程中就会涉及大量的JSON响应参数或者请求参数转化为对应的实体类的情况, ...