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. Kafka实战(七) - 优雅地部署 Kafka 集群

    既然是集群,必然有多个Kafka节点,只有单节点构成的Kafka伪集群只能用于日常测试,不可能满足线上生产需求. 真正的线上环境需要考量各种因素,结合自身的业务需求而制定.看一些考虑因素(以下顺序,可 ...

  2. C# Parallel 多线程并发

    Parallel并发执行多个任务 多线程的,主线程会参与计算---阻塞界面等于TaskWaitAll+主线程计算 常用方法 1.Invoke  尽可能并行执行提供的每个操作 Console.Write ...

  3. 从零开始ant-design-vue-pro开发笔记(一)

    开始 从这里开始是用ant-design-vue组件写ant-design-vue-pro这个后台项目实现步骤的从零开始搭建的过程,视频地址,它采用了ant-desgin-vue的组件库作为素材开发, ...

  4. Java学习 1.1——(JVM介绍)Java为什么能够跨平台?

    首先介绍一下Java的各个层级,先放一张图: 硬件,操作系统和操作系统接口:这三级不说大家都知道,操作系统有很多种,比如Windows,Linux.Windows又分为win7,win10,win x ...

  5. Make a List View Editable 使列表视图可编辑

    In this lesson, you will learn how to make a List View editable. For this purpose, the DemoTask List ...

  6. 关于vue里的$refs属性

    vuejs的极大程度的帮助减少了对dom的操作,他主要通过添加ref属性,但是当获取this.$refs属性时,稍有不注意就会输出undefined导致我们对dom节点的操作报错. this.$ref ...

  7. vue-router精简demo

    cnpm install vue-router --save-dev 或者 cnpm install vue-router --save 全局引用VueRouter import VueRouter ...

  8. iOS开发中全量日志的获取

    我们在app中对崩溃.卡顿.内存问题进行监控.一旦监控到问题,我们就需要记录下来,但是,很多问题的定位仅靠问题发生的那一刹那记录的信息是不够的,我们需要记录app的全量日志来获取更多的信息. 一,使用 ...

  9. Hibernate session.save()实体类,主键增长问题

    实体类如下: package com.wondersgroup.test.entity;   import java.io.Serializable;   import javax.persisten ...

  10. 火车票买不到?看我用python监控票源

    同事说最近火车票难买,我就帮他用个脚本监控 一下. 最近高铁票比较难买,还有什么候补.要不停的刷,才有时候可以捡漏.有时候明明候补了,到快开车告诉你余票不足,候补失败. 凡事预则立,我打算写个脚本提前 ...