本文来源于翁舒航的博客,点击即可跳转原文观看!!!(被转载或者拷贝走的内容可能缺失图片、视频等原文的内容)

若网站将链接屏蔽,可直接拷贝原文链接到地址栏跳转观看,原文链接:https://www.cnblogs.com/wengshuhang/p/10073587.html

前言:

  毕业后啥也不懂,水了一年,结果现在很多java基础的东西都不会,跳槽时候很艰难,现在开始恶补,首先是jvm--->深入理解java虚拟机(ps:买了半年都没翻过)

  写博客的初始目的也只是为了记录一下自己认识到的知识点,而且写过的东西自己也不容易忘,有了博客也方便查看。

第一章是编译jdk,这节我是直接跳过了,我是实在看不进底层c++的实现,要理解的东西太多了,我的小脑袋根本不够用的,而且我认为没有什么实际价值(可以装个B?专门搞这个的大佬可别喷我啊!!!只是对我来说是真的意义不大,就跳过了)。

第二章就是java内存了,现在开始。

首先是我们的内存结构

1、程序计数器: 占用很小的空间,主要就是选取下一条需要执行的指令、循环、异常操作等(具体原理不懂=。=)

2、java虚拟机栈:  这里就是平常说的堆跟栈中的”栈“,指的是局部变量表中的八种类型(int、short...)、对象引用(reference)还有returnAddress类型(指向了一条字节码指令的地址)

3、本地方法栈: 为native方法服务(这是啥东西=。=)

4、堆: 堆跟栈中的“堆”,存放对象实例,gc的主要管理区域

5、方法区:  跟堆类似,但是存储的是虚拟机中加载的 类信息、常量、静态变量等,只是堆的一个逻辑部分,别名-Non-Heap目的就是为了区分开来。堆中有 新生代、老年代,方法区这部分叫做永久代(只是把这块空间也交给了GC管理)

ps:

6、运行时常量池: 处于方法区,记录编译期生成的各种字面量和符号引用。

7、直接内存:  不知道是啥,应该没什么屌用。

第一节就记录一下存储结构吧,下一节来记录堆栈空间的溢出实验。

深入理解java虚拟机---java内存区域与内存溢出异常---1内存结构的更多相关文章

  1. Java虚拟机——Java内存区域与内存溢出

    内存区域 Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域.Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器.Java虚拟机栈.本地方法栈 ...

  2. Java虚拟机-----------Java内存区域与内存溢出异常

    Java内存区域划分 Java虚拟机运行时的数据区大致可划分为五部分:方法区,堆(两部分组成Java堆内存),虚拟机栈,本地方法栈(Java栈内存),程序计数器. 1.程序计数器 程序计数器占较小的内 ...

  3. Java虚拟机--Java内存区域的划分和异常

    Java内存区域的划分和异常 运行时数据区域 JVM在运行Java程序时候会将内存划分为若干个不同的数据区域. 程序计数器 线程私有.可看作是当前线程所执行的字节码的行号指示器,字节码解释器的工作是通 ...

  4. Java内存区域的划分和异常

    Java内存区域的划分和异常   运行时数据区域 JVM在运行Java程序时候会将内存划分为若干个不同的数据区域. 打开百度App,看更多美图 程序计数器 线程私有.可看作是当前线程所执行的字节码的行 ...

  5. 《深入Java虚拟机学习笔记》- 第17章 异常

    <深入Java虚拟机学习笔记>- 第17章 异常

  6. 深入理解java虚拟机---->java内存区域与内存溢出异常

    2. java内存区域于内存溢出异常 2.1 概述: 对于C/C++而言,内存管理具有最高的权利,既拥有每一个对象的“所有权”,又担负着每一个对象生命开始到结束的维护责任. 对于java而言,则把内存 ...

  7. 深入理解java虚拟机---java虚拟机内存管理(七)

    本地方法栈.java堆.方法区 本地方法栈在HotSpot版本内与java虚拟机栈是合二为一的.不单独区分本地方法栈.但是java虚拟机中是有这样一块区域的. 作用: 1.本地方法栈为虚拟机栈执行ja ...

  8. Java虚拟机——Java内存区域

    1.运行时区域 Java虚拟机在执行Java程序的时候会把它管理的内厝划分为若干个不同功能的数据区域,如图所示 首先是程序计数器,程序计数器可以理解为当前程序执行的字节码的行号指示器,计数器中的数据即 ...

  9. 深入理解java虚拟机---java虚拟机内存管理(六)

    java虚拟机栈的理解 虚拟机栈就是我们所熟知的栈内存,栈内存属于线程独有的.而在栈内存中的局部变量表中存储的引用类型只是存储对象的内存地址.对象的创建在堆内存中,即对象在线程共享区中. 局部变量表: ...

随机推荐

  1. Cordova - CordovaError: Promise rejected with non-error: 'ios-deploy was not found

    错误信息: CordovaError: Promise rejected with non-error: 'ios-deploy was not found. Please download, bui ...

  2. leetcode 105 106 从前序与中序遍历序列构造二叉树 从中序与后序遍历序列构造二叉树

    题目: 105 根据一棵树的前序遍历与中序遍历构造二叉树. 注意:你可以假设树中没有重复的元素. 例如,给出 前序遍历 preorder = [3,9,20,15,7] 中序遍历 inorder = ...

  3. docker存储volume

    #环境 centos7. , Docker version -ce docker volume创建.备份.nfs存储 #docker volume 数据存容器内,删容器即销毁全部数据 要保留的数据(数 ...

  4. 【转】POJ分类很好很有层次感

    OJ上的一些水题(可用来练手和增加自信) (poj3299,poj2159,poj2739,poj1083,poj2262,poj1503,poj3006,poj2255,poj3094) 初期: 一 ...

  5. web安全之——XSS、CSRF

    XSS漏洞 XSS 全称 Cross Site Scripting ,跨站脚本攻击.它的形成主要原因是多数用户输入没有转义,而被直接执行. 参考下面一段脚本: $('#box').html(locat ...

  6. Redis 的 Sentinel

    Redis 的 Sentinel 系统用于管理多个 Redis 服务器(instance), 该系统执行以下三个任务: 监控(Monitoring): Sentinel 会不断地检查你的主服务器和从服 ...

  7. spring定时任务的注解实现方式

    STEP 1:在spring配置文件中添加相应配置,以支持定时任务的注解实现 (一)在xml里加入task的命名空间 <!-- beans里添加:--> xmlns:task=" ...

  8. 转的很好的js 入门

    JavaScript概述 JavaScript的历史 1992年Nombas开发出C-minus-minus(C--)的嵌入式脚本语言(最初绑定在CEnvi软件中).后将其改名ScriptEase.( ...

  9. centos shell 编程-通过端口号kill对应的进程

    centos shell 编程-通过端口号kill对应的进程 方式一.端口固定 ------------------killportprocess.sh fSum() {    pid=$(lsof ...

  10. windows server 2016安装docker

    最近微软发布了windows server 2016,并原生支持docker,本文通过一系列的步骤,来学习怎么在windows server 2016安装docker. 1.下载 windows se ...