
正文
java代码运行内存图 java运行占用内存
提示:扫一扫查出行【扫一扫了解最新限行尾号】
复制提示
java代码运行的时候将内存分成哪些区?
您好java代码运行内存图,提问者java代码运行内存图:
java中在内存中划分java代码运行内存图:栈内存和堆内存。
1、栈内存:栈中是存放一些定义的变量的引用,比如:int a = 1; a那么就存在栈内存中,java中垃圾回收是JVM帮我们完成的,这里比C大大提高java代码运行内存图了程序员的繁碎。如果想要控制可以使用System.gc();来通知JVM虚拟机执行,但是什么时候执行还是由JVM虚拟机来完成的。
2、堆内存:堆中是存放一些比如数组,map类型等。
相关问答
Q1: jvm中线程本地内存是真实存在的,还是一个抽象概念
jvm内存模型:Java代码是运行在Java虚拟机之上的,由Java虚拟机通过解释执行(解释器)或编译执行(即时编译器)来完成,故Java内存模型,也就是指Java虚拟机的运行时内存模型。
运行时内存模型,分为线程私有和共享数据区两大类,其中线程私有的数据区包含程序计数器、虚拟机栈、本地方法区,所有线程共享的数据区包含Java堆、方法区,在方法区内有一个常量池。java运行时的内存模型图,如下:
从图中,可知内存分为线程私有和共享两大类:
(1)线程私有区,包含以下3类:
程序计数器,记录正在执行的虚拟机字节码的地址;
虚拟机栈:方法执行的内存区,每个方法执行时会在虚拟机栈中创建栈帧;
本地方法栈:虚拟机的Native方法执行的内存区;
(2)线程共享区,包含以下2类
Java堆:对象分配内存的区域;
方法区:存放类信息、常量、静态变量、编译器编译后的代码等数据;
常量池:存放编译器生成的各种字面量和符号引用,是方法区的一部分。
楼主提到的Java栈,一般而言是指图中的虚拟机栈,在代码中的方法调用过程中,往往需要从一个方法跳转到另一个方法,执行完再返回,那么在跳转之前需要在当前方法的基本信息压入栈中保存再跳转。
三、关于寄存器的问题
对于java最常用的虚拟机,sun公司提供的hotspot虚拟机,是基于栈的虚拟机;而对于android的虚拟机,则采用google提供的dalvik,art两种虚拟机,在android 5.0以后便默认采用art虚拟机,这是基于寄存器的虚拟机。 楼主问的是jvm(即java vm),这是基于栈的虚拟机。那么关于虚拟机栈,这块内存的内容,我们再进一步详细分析,如下图:
可以看到,在虚拟机栈有一帧帧的 栈帧组成,而栈帧包含局部变量表,操作栈等子项,那么线程在运行的时候,代码在运行时,是通过程序计数器不断执行下一条指令。真正指令运算等操作时通过控制操作栈的操作数入栈和出栈,将操作数在局部变量表和操作栈之间转移。
Q2: 谁能画张java内存图给我,字符串池,常量池,堆栈,方法区,程序计数器,本地方法栈,静态区,代码区
即使他们的位置是有固定结构的,了解这个也无意义
如果你要hack掉某个java程序,那要针对来读写哪部分的数据,不需要关注整个结构
Q3: 谁能帮我画下java这个过程的内存图
super(); 方法是指调用该类的父类的构造方法 super方法的参数个数,类型都与父类的构造方法一致,否则编译不通过
在此处 就相当于在 子类 Dog 中的 构造方法里 调用了 它的父类-Animal类中的构造函数Animal("小狗")
调用的结果就是把Dog类中的name属性赋值成了"小狗"。
这里需要注意的一点是:在构造方法中调用父类的构造方法时,super()方法必须写在构造方法的第一句,否则编译会不通过
Q4: 如何看一段JAVA代码耗了多少内存
使用java自带的性能分析工具jvisualvm , 可以方便的查看内存, 对象, 线程等多种信息.
win+R 然后输入 jvisualvm 回车即可
效果如下图
Q5: java 两个for循环内存图 菜鸟求高手画个来看看方便理解
数组是3行3列共9个元素
1,2,3
4,5,6,
7,8,9
arr.length=3(数组有3行)
而且每一行里的元素个数也是3 (arr[x].length=3)
2个for循环可以分外层和里层
外层循环第一轮 x=0; 0arr.length=3 即 03 成立
所以执行循环体。
循环里面也是一个循环。里层循环
里层循环第1轮 y=0;y arr[0].length=3 即 03 成立。
所以执行里层循环体的第一轮内部
打印 arr[0][0] 即 1
y++ y--1
里层循环第2轮 y=1;y arr[0].length=3 即 13 成立。
所以执行里层循环体的第一轮内部
打印 arr[0][1] 即 2
y++ y--2
里层循环第一轮 y=2;y arr[0].length=3 即 23 成立。
所以执行里层循环体的第一轮内部
打印 arr[0][2] 即 3
y++ y--3
3不小于3 所以里层循环退出
x++ x--1
进入外层循环的第2轮。依次类推即可。
关于java代码运行内存图和java运行占用内存的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。







