jvm虚拟机在运行时需要用到的内存区域.广泛一点就是堆和栈,其实不然,堆和栈只是相对比较笼统的说法,真正区分有如下几个
先上图一:

总的就是
  java的内存模型
  内存模型又分堆内存(heap)和方法区(有时也称为non-heap)和栈
  堆又分新生代(Young)和老年代(old/Tenured)
    新生代又分默认比例为8:1:1的eden空间、from survivor空间、to survivor空间
    当进行垃圾回收时,eden、survivor from 存活得对象会复制到servivor to空间
    接着from与to空间互换.(当from区的对象足够老时,即标记的次数达到老年级别,便到老年代去)
 
内存的大小设置参数可以如下一张图说明
 
-XMS:堆的最小空间
-XMX:堆的最大空间
-PermSize:方法区的最小空间
-MaxPermSize:方法区的最大空间
-Xss:每个线程的堆栈空间
-newSize:新生代最小空间
-maxNewSize:新生代最大空间
 
老年代内存可以通过设置堆的大写和新生代的大小来控制
老年代内存=堆内存-新生代内存
 
 

程序计数器                               

线程私有,控制着字节码所执行的行数.调用本地方法(native)时为空
当前线程所执行的字节码的行号指示器,字节码解释器就是在工作时通过改变计数器的行号来获获取要执行的字节码指令.调用本地方法(native)时计数器为空

虚拟机栈                                   

线程私有,java执行方法的内存模型
每个方法执行的时候都会创建一个栈帧,用于存放局部变量、操作数栈、动态链接、方法出口等信息
局部变量表:基本数据类型、对象引用、long和double类型占两个局部变量空间
每调用一个方法,都会对参数进行压栈
 

本地方法栈                               

线程私有.调用native方法时
 
堆:

堆内存                                       

线程共享,对象的实例以及数组都存储在这里
堆又分新生代、老年代
在分代收集算法中,新生代又分eden空间、from survitor空间 和to survitor空间).它们之间内存比例为8:1:1

方法区                                        

线程共享
存放类的信息、常量、静态变量、即时编译后的代码
方法区下又有运行时常量池:存放编译期生成的字面量和符号引用
 
参考博文
 
这里考考大家:
 文中提到的类信息是什么?
 编译期生成的字面量和符号引用又是啥?

JVM java内存区域的介绍的更多相关文章

  1. JVM Java 内存区域透彻分析(转)

    出处:  Java 内存区域透彻分析  Java8内存模型—永久代(PermGen)和元空间(Metaspace) 这篇文章主要介绍Java内存区域,也是作为Java虚拟机的一些最基本的知识,理解了这 ...

  2. 一、JVM — Java内存区域

    Java 内存区域详解 写在前面 (常见面试题) 基本问题 拓展问题 一 概述 二 运行时数据区域 2.1 程序计数器 2.2 Java 虚拟机栈 2.3 本地方法栈 2.4 堆 2.5 方法区 2. ...

  3. 深入理解JVM - Java内存区域与内存溢出异常 - 第二章

    一 运行时数据区域 JVM在执行Java程序的过程中会把它管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间. 程序计数器 程序计数器(Program Counter ...

  4. JVM——Java内存区域

    一,概述: Java跟C++不同,在内存管理区域C++程序员拥有着最高权力,但是正是因为如此,所以C++程序员要照顾这个对象的生老病死,从创建到消亡都是由程序员决定的. 但是Java程序员在虚拟机的自 ...

  5. java虚拟机学习-JVM内存管理:深入Java内存区域与OOM(3)

    概述 Java与C++之间有一堵由内存动态分配和垃圾收集技术所围成的高墙,墙外面的人想进去,墙里面的人却想出来. 对于从事C.C++程序开发的开发人员来说,在内存管理领域,他们即是拥有最高权力的皇帝又 ...

  6. Java内存管理:Java内存区域 JVM运行时数据区

    转自:https://blog.csdn.net/tjiyu/article/details/53915869 下面我们详细了解Java内存区域:先说明JVM规范定义的JVM运行时分配的数据区有哪些, ...

  7. JVM自动内存管理机制——Java内存区域(下)

    一.虚拟机参数配置 在上一篇<Java自动内存管理机制——Java内存区域(上)>中介绍了有关的基础知识,这一篇主要是通过一些示例来了解有关虚拟机参数的配置. 1.Java堆参数设置 a) ...

  8. 【java】JVM的内存区域划分

    学过C语言的朋友都知道C编译器在划分内存区域的时候经常将管理的区域划分为数据段和代码段,数据段包括堆.栈以及静态数据区.那么在Java语言当中,内存又是如何划分的呢? 由于Java程序是交由JVM执行 ...

  9. 【搞定Jvm面试】 Java 内存区域揭秘附常见面试题解析

    本文已经收录自笔者开源的 JavaGuide: https://github.com/Snailclimb ([Java学习+面试指南] 一份涵盖大部分Java程序员所需要掌握的核心知识)如果觉得不错 ...

随机推荐

  1. 关于InterruptedException的两篇博文的转载

    博文一:https://www.jianshu.com/p/a8abe097d4ed InterruptedException异常 在了解InterruptedException异常之前应该了解以下的 ...

  2. Centos系统镜像安装

    一.下载Centos版本 官网地址:http://isoredirect.centos.org/centos 二.制作U盘启动镜像 1.下载安装win32diskimager,用于制作U盘启动镜像,点 ...

  3. .NET Core 3.0之深入源码理解Host(一)

    写在前面 ASP .NET Core中的通用主机构建器是在v2.1中引入的,应用在启动时构建主机,主机作为一个对象用于封装应用资源以及应用程序启动和生存期管理.其主要功能包括配置初始化(包括加载配置以 ...

  4. typeORM 多对多关系不同情况的处理

    本文以RBAC权限管理中的用户和角色举例,两个实体存在多对多的关系,一个用户拥有多个角色,一个角色属于多个用户.typeorm的中文文档没有对自定义中间表的说明,发现英文有相关说明,但示例代码貌似有问 ...

  5. JVM学习分享-练习题

    package org.fenixsoft.clazz; public class TestClass { private int m; public int inc() { return m + 1 ...

  6. forEach和map的区别,简单写了IE低版本的原形封装

    今天有点'不务正业',旧的没有写完又开新的,没办法 -0- 今天遇到这个特感兴趣嘛入正题了 forEach 和 map 的区别 参考:http://blog.csdn.net/boysky0015/a ...

  7. ArcGIS API for JavaScript小白入门

    简单理解就是:通过js调用arcgis相关的方法和通过html引入css等资源来展示地图,代码如下: <!DOCTYPE html> <html> <head> & ...

  8. C lang:Array and Pointer formal parameter

    Test Xx_Formal parameter Formal parameter are local variable. It's private to the function. Ax_Array ...

  9. docker可视化工具Portainer部署与汉化

    为了更好的观察Docker运行状态,我们采用Portainer工具进行可视化,下面是部署过程总结: 环境: Liunx:CentOS Linux release 7.6.1810 (Core) Doc ...

  10. C语言入门-枚举

    常量符号化 用符号而不是具体的数字来表示程序中的数字 一. 枚举 用枚举而不是定义独立的const int变量 枚举是一种用户定义的数据类型,它用关键字enum如以下语句来声明 enum 枚举类型名字 ...