JVM的内存区域划分

目录

1.什么是JVM

2.JVM内存区域划分

2.1各区域详解

2.2经典笔试题:


1.什么是JVM

  JVM也称为Java虚拟机,它是Java代码的运行环境,Java属于半编译半解释形的语言.它的运行环境在虚拟机上,而不是物理设备.Java这么设定主要是为了跨平台,即一套代码,多处使用.我们只需要编译出一套Java代码, 就可以部署到不同的操作系统中去.Java不想重新编译,而是期望能够直接执行,先通过Javac把.Java文件=>.class文件.字节码文件就是Java字节码.是它自搞得一套cpu指令,因因此.我们编写和发布一个Java程序,只需要发布.class文件即可.

  虽然不同平台的JVM存在差异,但是对上(Java层面上提供的内容)是统一一致的,JVM本身是一个复杂的东西,它对上统一一致,对下有自己的差异.对于程序员来说,我们不需要关心对下是什么样子,只需要编译对上的Java代码即可.这也是Java的优越性.

2.JVM内存区域划分

  JVM实际上也是一个进程

在系统中和的进程是一样的,需要从系统中申请调用资源.(比如内存)这些内存空间,就支持了后续Java程序的运行,比如在Java中定义变量(就会申请内存),内存实际上就是JVM从系统中申请的内存,JVM实际上就相对于是二房东.JVM申请的内存空间,会被划分成好几个不同的区域.,每个区域都有不同的作用.

2.1各区域详解

我们来详细的介绍一下这些区域.

1.堆区:Java中new出来的对象,比如数组等,都在这个区域里面,还有对象中持有的非静态成员变量也在堆里

2.栈区:分为本地方法栈和虚拟机栈包含了方法的调用关系,和局部变量.

3.程序计数器,这块空间比较小,专门用来存储下一条要执行的Java指令的地址

(栈区和程序计数器是每个线程都有一份)

4.元数据区,也叫做方法区,里面往往是一些辅助性质的属性.有类的信息和方法的信息,也就是哪些字节码在程序运行的时候就会被JVM加载到内存中,放到元数据区里面.此时,当前程序要如何执行,要做那些事,就会按照上述元数据区里记录的字节码依次执行就可以了.

(堆,元数据区是线程共享的)

2.2经典笔试题:

class Test{

   prviate int n;

   prviate static int m;

}

main() {

Test t = new Test();

}  问上述代码的t,n,m分别在jvm内存的哪些区域

 t是一个局部变量的引用,自然是在栈区中,而new出来的Test()对象在堆区中

n是Test的非静态成员变量所以在堆中

m则是静态成员变量,即类变量,就存放在元数据区中.

在上述带有static修饰的变量,也就是在内对象中

内对象(Test,class, jvm把.class文件加载到内存中以后,就会把这里的信息使用对象来表示,此时这里的对象就是类对象,类对象包含了一系列属性,包括但不限于(类名,继承于哪个类,实现了哪些接口,有哪些属性,叫啥名字,啥类型,啥权限.哪些方法,叫啥名字,啥参数,啥权限)

.java文件涉及到的的信息都会在.,class文件中有所体现(除了注释)

区分一个变量在哪个区域中,主要是看变量的形态(局部变量,成员变量,静态成员变量)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/504927.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

技巧 文本编辑器 B列每一行数据换行合并到A列中

一. 需求背景 ⏹A列是我们制作的日文版歌词,B列是中文版译文歌词 现在想让B列的每一行歌词,按下图箭头所示插入到A列的每一行后面 二. 通过文本编辑器的替换功能解决 将Excel中的A和B列的数据复制粘贴到文本编辑器中Excel中的列和列之前是通过Tab来分隔…

Matlab|【免费】基于合作博弈的综合能源系统利益分配优化调度

目录 主要内容 部分代码 结果一览 下载链接 主要内容 该程序实现的模型为综合能源系统利益分配优化调度,采用合作博弈方法,模型针对IES系统的P2G、电解槽、甲烷反应器、储氢罐、CHP和燃气锅炉等设备进行建模,实现基于合作博弈的…

环形链表详解(让你彻底理解环形链表)

文章目录 一.什么是环形链表?二.环形链表的例题(力扣) 三.环形链表的延伸问题 补充 一.什么是环形链表? 环形链表是一种特殊类型的链表数据结构,其最后一个节点的"下一个"指针指向链表中的某个节点&#xff…

代码随想录【数组】 ---- 二分查找

代码随想录【数组】 ---- 二分查找 704.二分查找方法一:二分查找 35.搜索插入位置方法一:二分查找 34.在排序数组中查找元素的第一个和最后一个位置方法一:二分查找 69.x的平方根方法一:袖珍计算器方法二:二分查找方法…

抖音小店的产品价格怎么设置?都需要什么价位的产品?

大家好,我是电商花花。 做抖音小店,一个合理的商品的价格也可以说是非常重要的,价格合理才会吸引到用户这购买。 可能说到价格,很多人第一反应认为随便定就可以了,其实定价是很复杂了,定价定多少&#xf…

一份简单的前端开发指南

文章目录 一、HTML1、表格2、常见标签3、行内、块级4、行内块级元素 二、CSS1、三种样式2、链接样式3、浮动4、清除浮动5、伪类,伪元素6、position7、后代选择器8、弹性布局 三、JavaScripts1、null和undefined的区别2、var let const3、原生数据类型4、双等和三等5…

Vue3 条件渲染 v-if

v-if 指令&#xff1a;用于控制元素的显示或隐藏。 执行条件&#xff1a;当条件为 false 时&#xff0c;会将元素从 DOM 中删除。 应用场景&#xff1a;适用于显示隐藏切换频率较低的场景。 语法格式&#xff1a; <div v-if"数据">内容</div> 基础用…

KubeSphere平台安装系列之三【Linux多节点部署KubeSphere】(3/3)

**《KubeSphere平台安装系列》** 【Kubernetes上安装KubeSphere&#xff08;亲测–实操完整版&#xff09;】&#xff08;1/3&#xff09; 【Linux单节点部署KubeSphere】&#xff08;2/3&#xff09; 【Linux多节点部署KubeSphere】&#xff08;3/3&#xff09; **《KubeS…

图论 - DFS深度优先遍历、BFS广度优先遍历、拓扑排序

文章目录 前言Part 1&#xff1a;DFS&#xff08;深度优先遍历&#xff09;一、排列数字1.题目描述输入格式输出格式数据范围输入样例输出样例 2.算法 二、n皇后问题1.问题描述输入格式输出格式数据范围输入样例输出样例 2.算法 三、树的重心1.问题描述输入格式输出格式数据范围…

Laravel框架: Call to a member function connect() on null 异常报错处理

Laravel框架&#xff1a; Call to a member function connect() on null 异常报错处理 Date: 2024.03.01 21:03:11 author: lijianzhan 原文链接: https://learnku.com/laravel/t/63721 问题&#xff1a; local.ERROR: Call to a member function connect() on null {"…

为什么模电这么难学?这是我见过最好的回答

大家好&#xff0c;我是砖一&#xff0c;有很多人抱怨模电难学&#xff0c;被誉为电子信息挂科率最高之一&#xff0c;下面听我分析一下为啥模电这么难学&#xff1f; 01 理科的抽象思维 在高等教育体系中&#xff0c;模电是涉及半导体方向的第一门工程类课程&#xff0c;是一…

venv、pip、conda、anaconda、miniconda的区别和优缺点,和彻底清除python多余的环境

virtualenv(venv) 这是一个虚拟环境管理器&#xff0c;它可以让你每个项目甚至每个脚本配置一个自定义的Python解释器环境&#xff0c;这最大的好处是我可以不污染开发环境。​ pip pip 是 Python 最常用的包管理器&#xff0c;它能自动处理依赖 。 conda 如果说venv是虚拟…