在方法(代码块)中定义一个变量时,java就在栈中为这个变量分配JVM内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的JVM内存空间;而在堆中分配的JVM内存由java虚拟机的自动垃圾回收器来管理。

JVM内存区域组成

JVM内存分四种:

1、栈区(stacksegment)— 由编译器自动分配释放,存放函数的参数值,局部变量的值等,具体方法执行结束之后,系统自动释放JVM内存资源。Java中栈是与每一个线程关联的,JVM在创建每一个线程的时候,会分配一定的栈空间给线程。它主要用来存储线程执行过程中的局部变量,方法的返回值,以及方法调用上下文。

2、堆区(heapsegment)— 一般由程序员分配释放,存放由new创建的对象和数组,jvm不定时查看这个对象,如果没有引用指向这个对象就回收。Java中堆是由所有的线程共享的一块内存区域,堆用来保存各种JAVA对象,比如数组,线程对象等。

3、静态区(datasegment)— 存放全局变量,静态变量和字符串常量,不释放。

4、代码区(codesegment)— 存放程序中方法的二进制代码,而且是多个对象共享一个代码空间区域。

在方法(代码块)中定义一个变量时,java就在栈中为这个变量分配JVM内存空间,当超过变量的作用域后,java会自动释放掉为该变量所分配的JVM内存空间;在堆中分配的JVM内存由java虚拟机的自动垃圾回收器来管理,堆的优势是可以动态分配JVM内存大小,生存期也不必事先告诉编译器,因为它是在运行时动态分配JVM内存的。缺点就是要在运行时动态分配JVM内存,存取速度较慢;栈的优势是存取速度比堆要快,缺点是存在栈中的数据大小与生存期必须是确定的无灵活性。

解析JVM内存区域组成相关推荐

  1. 《探索JVM内存区域》

    一.为什么要了解JVM内存区域 二.结识JVM中的"内存"成员 1. 程序计数器(PC=Program Counter Register) 2. JVM栈(Java Virtual ...

  2. JVM之JVM内存区域与内存分配(转载)

    2019独角兽企业重金招聘Python工程师标准>>> 先来看看JVM运行时候的内存区域 大多数 JVM 将内存区域划分为 Method Area(Non-Heap)(方法区),He ...

  3. JVM 内存区域大小参数设置

    需要提前了解的知识点: 1. JVM内存模型 2. JVM垃圾回收算法 下图是JVM内存区域划分的逻辑图 从图中我们大概了解JVM相关的内存区域. JVM内存包括区域 Heap(堆区) New Gen ...

  4. 深入理解JVM内存区域与内存分配

    前言:这是一篇关于JVM内存区域的文章,由网上一些有关这方面的文章和<深入理解Java虚拟机>整理而来,所以会有些类同的地方,也不能保证我自己写的比其他网上的和书本上的要好,也不可能会这样 ...

  5. 走进JVM【二】理解JVM内存区域

    引言 对于C++程序员,内存分配与回收的处理一直是令人头疼的问题.Java由于自身的自动内存管理机制,使得管理内存变得非常轻松,不容易出现内存泄漏,溢出的问题. 不容易不代表不会出现问题,一旦内存泄漏 ...

  6. Java虚拟机------JVM内存区域

    JVM内存区域运行时数据区域分为两种: JVM内存区域 运行时数据区域分为两种: 线程隔离的数据区: 程序计数器 Java虚拟机栈 本地方法栈 所有线程程共享的数据区: Java堆 方法区 JVM 内 ...

  7. mfc强制局部区域刷新_简述JVM内存区域划分

    我们在Java编程时少不了程序优化,而程序优化的前提是知道JVM的内存是如何划分的,那么我们今天来大体了解下. 在看JVM内存区域划分之前,先来看一下Java程序具体执行的过程: 如上图所示,首先Ja ...

  8. 深入理解JVM之JVM内存区域与内存分配

    在学习jvm的内存分配的时候,看到的这篇博客,该博客对jvm的内存分配总结的很好,同时也利用jvm的内存模型解释了java程序中有关参数传递的问题. 博客出处: http://www.cnblogs. ...

  9. JVM内存区域(Java内存区域)、JVM垃圾回收机制(GC)初探

    一.JVM内存区域(Java内存区域) 首先区分一下JVM内存区域(Java内存区域)和Java内存模型(JMM)的概念.Java线程之间的通信采用的是共享内存模型,这里提到的共享内存模型指的就是Ja ...

最新文章

  1. 独家 | 如何让情绪智力驱动创新?
  2. hadoop学习之一
  3. 搜狗输入法:候选词带符号设置方法。正常打字打出符号,颜文字。
  4. java 定义多个变量_学了Java才搞懂JMeter测试计划
  5. 页面常见跳转的方法和选择
  6. mfc oracle数据库编程,testmfc - 源码下载|数据库系统|Oracle数据库|源代码 - 源码中国...
  7. C++ - 操作运算符
  8. 软件工程 2016.7.3 日报
  9. 初级程序员面试经典题目(大串烧 含答案)
  10. 计算机自动设置开机,怎么设置电脑自动开机
  11. java 控制层和业务层,控制层、业务层和数据访问层
  12. 记录金盾专用播放器加密视频提取工具逆向分析过程二
  13. 【备忘】【No5】微信公众平台开发入门到实战开发视频教程(Java+PHP)
  14. 0基础24岁女硕士生,想转行做月薪30k的测试开发,需要从什么开始学习?
  15. 安得猛士兮守四方——国产EDA公司盘点
  16. EXCEL数据之美:带你走进数据可视化
  17. css背景图重复怎们弄,CSS如何实现背景图像重复效果
  18. Apollo + Springboot 整合(多环境版)
  19. android 自动签名工具下载,安卓批量签名工具使用说明
  20. 和老板比,员工弱爆了

热门文章

  1. VS code常用插件推荐(总结整理篇)
  2. 7个顶级资源网站,不知道就很可惜
  3. java-JSON: Expected value at 1:0 错误
  4. mysql日活统计函数_如何通过简化日活模型,预估一个产品的日活(DAU)?
  5. 二级计算机excel以宏保存,Excel宏保存
  6. vuex 管理vue-router的传值
  7. 基于 Bootstrap 的响应式后台管理面板
  8. JS原生方法实现jQuery的ready()
  9. 关于数据库名、实例名
  10. T-1-java语言基础