面试题:你了解Java内存模型吗?(顺丰面试题)
面试题:程序内存的分布,五个部分(360面试题)

一、Java程序的执行过程:

Java源代码文件(.java后缀)会被Java编译器编译为字节码文件(.class后缀),然后由JVM中的类加载器加载各个类的字节码文件,加载完毕之后,交由JVM执行引擎执行。在整个程序执行过程中,JVM会用一段空间来存储程序执行期间需要用到的数据和相关信息,这段空间一般被称作为Runtime Data Area(运行时数据区),也就是我们常说的JVM内存。因此,在Java中我们常常说到的内存管理就是针对这段空间进行管理(如何分配和回收内存空间)。
二、运行时数据区包括哪几部分:

方法区(Method Area):
方法区是各个线程共享的内存区域,它用于存储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。当方法区无法满足内存分配需求时,将抛出OutOfMemoryError 异常。
方法区里存放着类的版本,字段,方法,接口和常量池。常量池里存储着字面量和符号引用。符号引用包括:1.类的全限定名,2.字段名和属性,3.方法名和属性。
JVM堆(Java Heap):
Java 堆也是属于线程共享的内存区域,它在虚拟机启动时创建,是Java 虚拟机所管理的内存中最大的一块,主要用于存放对象实例,几乎所有的对象实例都在这里分配内存,注意Java 堆是垃圾收集器管理的主要区域,因此很多时候也被称做GC 堆,如果在堆中没有内存完成实例分配,并且堆也无法再扩展时,将会抛出OutOfMemoryError 异常。
程序计数器(Program Counter Register):
字节码解释器工作时,通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。
多线程中,为了让线程切换后能恢复到正确的执行位置,每条线程都需要有一个独立的程序计数器,各条线程之间互不影响、独立存储,因此这块内存是线程私有的。
虚拟机栈(Java Virtual Machine Stacks):
Java虚拟机栈也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java方法执行的内存模型:每个方法在执行的同时都会创建一个栈帧用于存储局部变量表、操作数栈、动态链表、方法出口信息等。每一个方法从调用直至执行完成的过程,就对应着一个栈帧在虚拟机栈中入栈到出栈的过程。
本地方法栈(Native Method Stacks):
本地方法栈属于线程私有的数据区域,这部分主要与虚拟机用到的 Native 方法相关,一般情况下,我们无需关心此区域。

引用博客:http://blog.csdn.net/javazejian/article/details/72772461

Java面试的完整博客目录如下:Java笔试面试目录

转载请标明出处,原文地址:https://blog.csdn.net/weixin_41835916 如果觉得本文对您有帮助,请点击顶支持一下,您的支持是我写作最大的动力,谢谢。

Java面试--Java内存模型相关推荐

  1. JAVA基础驿站,Java基础:内存模型

    在java基础当中,有很重要一块的内容,就是关于java当中的内存模型,所涉及的问题无非就是关于java当中的类.实例.变量.常量.静态变量.方法等blabla的东西都分别存储在什么地方.这部分的内容 ...

  2. java关键字 valotile_Java内存模型-jsr133规范介绍,java中volatile关键字的含义

    最近在看<深入理解Java虚拟机:JVM高级特性与最佳实践>讲到了线程相关的细节知识,里面讲述了关于java内存模型,也就是jsr 133定义的规范. 系统的看了jsr 133规范的前面几 ...

  3. 学习笔记【Java 虚拟机④】内存模型

    若文章内容或图片失效,请留言反馈.部分素材来自网络,若不小心影响到您的利益,请联系博主删除. 总目录 学习笔记[Java 虚拟机①]内存结构 学习笔记[Java 虚拟机②]垃圾回收 学习笔记[Java ...

  4. java happens before_java内存模型以及happens-before规则

    原创文章&经验总结&从校招到A厂一路阳光一路沧桑 image# 1. JMM的介绍 # 在上一篇文章中总结了线程的状态转换和一些基本操作,对多线程已经有一点基本的认识了,如果多线程编程 ...

  5. 推荐一个很牛逼的 Github 项目:本人历时半年完成的【Java 面试 + Java 后端技术学习指南】,已拿大厂offer

    今天给大家分享一份[Java 面试 + Java 后端技术学习指南]:一份通向理想互联网公司的面试指南,包括 Java,技术面试必备基础知识.Leetcode.计算机操作系统.计算机网络.系统设计.分 ...

  6. java 内存模型面试_Java面试- JVM 内存模型讲解

    经常有人会有这么一个疑惑,难道 Java 开发就一定要懂得 JVM 的原理吗?我不懂 JVM ,但我照样可以开发.确实,但如果懂得了 JVM ,可以让你在技术的这条路上走的更远一些. JVM 的重要性 ...

  7. java 取栈顶元素_《Java实战之内存模型》详解篇

    内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程序的实时运行 JVM内存布局规定了Java在运行过程中内存申请.分配.管理的策略,保证了JVM的高效稳定运行 不同的JV ...

  8. 【Java杂货铺】JVM#Java高墙之内存模型

    Java与C++之间有一堵由内存动态分配和垃圾回收技术所围成的"高墙",墙外的人想进去,墙外的人想出来.--<深入理解Java虚拟机> 前言 <深入理解Java虚 ...

  9. JVM#Java高墙之内存模型

    前言 <深入理解Java虚拟机>,学习JVM的经典著作,几乎学习JAVA的小伙伴人手一本.当初买了,翻看了一部分,到了字节码那边彻底读不下去了,遂弃之.最近打算看Spring源码,反射.动 ...

最新文章

  1. 图灵奖得主LeCun:不需要监督的AI才是未来!
  2. Python 工匠:善用变量来改善代码质量
  3. oracle 用户 多个表空间
  4. 实验六 html网页设计,网页设计.html · 谢泽华/面向对象与软件工程实验二:网页模仿 - Gitee.com...
  5. ToString格式大全
  6. volley源代码解析(六)--HurlStack与HttpClientStack之争
  7. iOS开发之iOS11频繁刷新TableView向下偏移的问题
  8. LabVIEW数字抽奖程序
  9. spss安装后 python_python从入门到入土教程(7)——用python实现SPSS的各种功能
  10. flash写保护原理_Flash存储原理
  11. Microsoft Dynamics 365咨询服务研究报告-Microsoft Dynamics 365咨询服务生产基地、总部、竞争对手及市场地位
  12. 南京邮电大学MOOC高级程序语言设计(C++)第五章编程题答案
  13. 程序人生 - 国有划拨和国有出让的区别 国有划拨参照什么标准进行
  14. 基于Websocket协议的即时通讯系统设计与实现
  15. javascript机器学习
  16. 新MLC颗粒来了!让SSD写入提升2倍 寿命翻10倍
  17. 在Unity2018如何使用代码一键设置Icon
  18. [七七黎]乱七八糟-美女和野兽
  19. TP6助手函数使用示例
  20. C语言判断完全平方数(经典代码)

热门文章

  1. 如何打造千万级Feed流系统
  2. long long类型
  3. 关于linux系统密码策略的设置
  4. python爬取百度云资源分享吧_python爬取百度云盘资源
  5. 网络安全---老白的学习笔记
  6. .Net 6.0中的新增特性_.Net 6.0中的新增功能
  7. RHCSA操作第四次作业
  8. maven-之Lifecycle详解
  9. PON为什么被称为无源光网络?不同PON技术的主要区别是什么?
  10. [LOJ3086] [GXOI2019] 逼死强迫症