1.JDK:java程序设计语言、java虚拟机、javaAPI

二、自动内存管理机制

-----------------------------------------------------

  1.运行时数据区域:

    (1)java虚拟机在执行java程序的过程中会把所管理的内存划分为若干个不同的数据区域。这些区域有着各自的用途,以及创建和销毁的时间,有些区域随着虚拟机的启动而存在,有些区域则是依赖用户线程的启动和结束而创建和销毁。

    (2)java虚拟机所管理的内存会包括以下几个运行时数据区域

    

    (3)从上图可以看出堆区和方法区是被所有线程共享的。java虚拟机栈、本地方法区以及程序计数器这几个之间是线程隔离的数据区

  2.程序计数器:当前线程所执行的字节码的行号指示器。字节码解释器的工作就是通过改变计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程回复等基础功能都需要依赖这个计数器来完成。为了线程切换之后能够恢复到正确的位置,每个线程需要一个独立的程序计数器

  3.java虚拟机栈。也是线程私有的,生命周期与线程相同。

     (1)虚拟机栈描述的是java方法执行的内存模型:每个方法执行的时候都会创建一个栈帧,用于存储局部变量表、操作栈、动态链接、方法出口等信息。每个方法被调用直至完成的过程,就对应着一个栈帧在虚拟机栈中从入栈到出站的过程。

     (2)虚拟机栈一般用来存放局部变量。局部变量表所需的内存空间在编译器间完成分配,当进入一个方法的时候,这个方法需要在帧中分配多大的局部变量空间是完全确定的,在方法执行期间,不会改变局部变量表的大小

     (3)在java虚拟机中,对于区域规定了两种异常情况:如果请求栈深度大于虚拟机所允许的深度,就会抛出StackOverflowError异常;如果虚拟机可以动态扩展,当扩展时无法申请到足够的内存的时候会抛出OutOfMemoryError异常

  4.本地方法栈(Native Method Stacks)与虚拟机栈所发挥的作用是非常相似的,只不过虚拟机栈是为虚拟机执行Java方法(也就是字节码)服务,而本地方法栈则为虚拟机使用到的Ntive方法服务

  5.java堆。存放数组和对象的地方。  

    (1)java堆是java虚拟机所管理的内存中最大的一块。java堆是 被所有线程共享的一块区域,在虚拟机启动的时候进行创建。堆内存唯一存储的是实例对象,几乎所有对象实例都在这里进行内存的分配。几乎所有对象实例都要在这里分配内存。

    (2)java堆是垃圾收集器管理的主要区域,因此很多时候也称为GC堆(Garbage Collected Heap)。java堆可以细分为:新生代和老年代;如果再细致一点有Eden空间、From Survivor空间、To Survivor空间等。

    (3)java虚拟机规定,java堆可以处于物理上不连续的内存空间中,只要逻辑上连续即可,就像磁盘空间一样。如果堆中没有完成内存的分配并且无法扩展的时候,就会抛出OutOfMemoryError异常

    (4)java堆。heap:存放对象和数组的地方,堆分为两个区域:young generation(年轻代)+old genneration(年老代)

        young generation(年轻代)又可以分为eden(伊甸区)、survivor1(幸存一区)和survivor2(幸存二区)

    (5)permanent区(永久区)。相当于方法区(存放类和方法的地方)。

  6.方法区(Method Area)。和堆区一样,是各个线程共享的内存区,用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等。还有一个别名非堆。这个区域回收的目标主要是主要是常量池的回收和类型的卸载。方法区溢出是因为类太多导致的。静态码块在类加载的时候运行,类加载的时候加载一次,后面就不再进行加载了。

  7.运行时常量池。是方法区的一部分,用于存放编译期生成的各种字面量和符号引用。

  8.直接内存。不是虚拟机运行时数据区的一部分,也不是虚拟机规范中定义的内存区域,但是这部分内存因为被频繁使用,可能会导致OutOfMemoryError异常出现。

  9.编写java源码 *.java ------(编译)----->*.class-----ClassLoader(类加载器,加载*.class文件到JVM中)

  10.

深入理解java虚拟机(1)走进jvm的更多相关文章

  1. 深入理解java虚拟机-01 走进java

    第一章是对java的产生,历史的整体介绍 java的使用很广泛,安装jdk的时候会看到一句广告语runs in 10 billions machines.使用java的设备多达几十亿台 1.概述 优点 ...

  2. 深入理解java虚拟机(linux与jvm内存关系)

    本文转载自美团技术团队发表的同名文章 https://tech.meituan.com/linux-jvm-memory.html 一, linux与进程内存模型 要理解jvm最重要的一点是要知道jv ...

  3. 深入理解java虚拟机笔记补充-JVM常见参数设置

    JVM 常见参数设置 内存设置 参数 -Xms:初始堆大小,JVM 启动的时候,给定堆空间大小. -Xmx:最大堆大小,如果初始堆空间不足的时候,最大可以扩展到多少. -Xmn:设置年轻代大小.整个堆 ...

  4. 读书笔记-《深入理解Java虚拟机:JVM高级特性与最佳实践》

    目录 概述 第一章: 走进Java 第二章: Java内存区域与内存溢出异常 第三章: 垃圾收集器与内存分配策略 第四章: 虚拟机性能监控与故障处理 第五章: 调优案例分析与实战 第六章: 类文件结构 ...

  5. 《深入理解Java虚拟机:JVM高级特性与最佳实践》【PDF】下载

    <深入理解Java虚拟机:JVM高级特性与最佳实践>[PDF]下载链接: https://u253469.pipipan.com/fs/253469-230062566 内容简介 作为一位 ...

  6. 深入理解JAVA虚拟机JVM

    深入理解JAVA虚拟机JVM Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制.java之所以能实现一次编写到处执行,也就是因为jVM.原理:编 ...

  7. 深入理解Java虚拟机 -- 读书笔记(1):JVM运行时数据区域

    深入理解Java虚拟机 -- 读书笔记:JVM运行时数据区域 本文转载:http://blog.csdn.net/jubincn/article/details/8607790 本系列为<深入理 ...

  8. 深入理解java虚拟机学习笔记(一)JVM内存模型

    上周末搬家后,家里的宽带一直没弄好,跟电信客服反映了N遍了终于约了个师傅明天早上来迁移宽带,可以结束一个多星期没网的痛苦日子了.这段时间也是各种忙,都一个星期没更新博客了,再不写之前那种状态和激情都要 ...

  9. 什么是HotSpot VM & 深入理解Java虚拟机 JVM

    参考 http://book.2cto.com/201306/25434.html 另外,这篇文章也是从一个系列中得出的: <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> ...

随机推荐

  1. HBase2.0新特性解析

    作者 | 个推大数据运维工程师 行者 升级背景 个推作为专业的数据智能服务商,在业务开展过程中存在海量的数据存储与查询的需求,为此个推选用了高可靠.高性能.面向列.可伸缩的分布式数据存储系统--HBa ...

  2. python中的事务

    1. 为什么要有事务 事务广泛的运用于订单系统.银行系统等多种场景 例如: A用户和B用户是银行的储户,现在A要给B转账500元,那么需要做以下几件事: 检查A的账户余额>500元: A 账户中 ...

  3. Demo:servlet实现图片的上传

    一个简单的servlet例子,实现图片的上传功能,上传的图片给 ?HttpServletResponse 对象 public class BackGroundLogoServlet extends H ...

  4. es6 的数组的方法

    es6 数组的拓展 数组的类 Array 数组的定义: 1. var arr=[]; 2. var arr=new Array(3) // 3 代表有三个元素 arr[0]=12; arr[1]=24 ...

  5. http请求状态码解析

    1xx(临时响应) 2xx(成功) 3xx(重定向) 4xx(请求错误) http状态码 400 (错误请求) 服务器不理解请求的语法. http状态码 401 (未授权) 请求要求身份验证. 对于需 ...

  6. 读取PC版微信数据库(电脑版微信数据库)内容

    原始网址   https://www.cnblogs.com/Charltsing/p/WeChatPCdb.html 1.PC版微信的密钥是32位byte,不同于安卓版(7位字符串) 2.通过OD或 ...

  7. Input 输入框

    Input 输入框 通过鼠标或键盘输入字符 <el-input v-model="input" placeholder="请输入内容"></e ...

  8. Linux_RHEL7_YUM

    目录 目录 前言 RPM rpm常用指令 YUM yum常用指令RHEL7 最后 前言 yum:yellow dog updater modifier(黄狗包管理器),是RHEL默认的基于RPM包的软 ...

  9. docker(常见调试技巧):docker打包镜像调试技巧

    写Dockerfile可以先不指定CMD.ENTRYPOINT等启动命令,只要拷贝就好了 如下: # Dockerfile for basic-app-client # Build with: # d ...

  10. 利用jquery的淡入淡出函数(fadeIn和fadeOut)--实现轮播

    首先说下,我在网上找的例子全是用的UL 实现,其实大可不必,只要是能包含img标签的HTML标签都可以做轮播效果.利用jquery的淡入淡出函数(fadeIn和fadeOut).废话也不多说,边上代码 ...