java虚拟机jvmjava堆方法区java栈

     2022-03-21     215

关键词:

java堆是java应用程序最密切的内存空间。

差点儿全部的对象都存在堆中。java堆全然自己主动化管理,通过垃圾回收机制,垃圾对象会自己主动清理。不须要显式释放。

依据java垃圾回收机制的不同。java堆可能有不同的结构。

最常见的是将整个java堆分为新生代和老年代。跟人类几乎相同了。老龄化就有可能找上帝去了,新生代存放新对象或者年龄不大的对象,老年代存放老年对象。新生代有可能分为eden区、s0区和s1区,s0区和s1区也被称之为 from to区域。他们是两块大小相等能够互换的内存空间例如以下图所看到的:

 技术分享

在大多数情况下。对象首先被分配在eden区,再一次新生代回收后,假设对象还存在,则会进入s0或者s1,之后没经过一个新生代回收,年龄+1.当对象年龄达到一定条件后,就会老龄化进入老年代。

以下一个简单的实例展示java堆、java方法区、java栈之间的关系。代码例如以下:

package cn.xhgg.test;
public class HeapTest {
private int id;
public HeapTest(int id) {
this.id = id;
}
public void show() {
System.out.println("id:  "+id);
}
public static void main(String[] args) {
HeapTest h1 = new HeapTest(1);
HeapTest h2 = new HeapTest(3);
h1.show();
h2.show();
}
}


HeapTest 实例引用类型肯定分配在堆中、h1h2局部变量存放在java栈中、并指向堆中的两个实例。

例如以下图所看到的:

技术分享


 

 





java基础-内存分配

1、java运行时的数据区:程序计数器、方法区、虚拟机栈、本地方法栈、堆  ①、程序计数器:一块较小的内存空间,可看作当前线程所执行的字节码的行号指示器  ②、java虚拟机栈:与程序计数器一样,也是线程私有的,... 查看详情

002-jvm部分

...区域Java内存区域主要分为线程私有区域【程序计数器、虚拟机栈、本地方法区】、线程共享区域【Java堆、方法区】、直接内存(不受JVMGC管理)1、线程私有部分1.1、程序计数器程序计数器(ProgramCounterRegister)一块较小的内存空... 查看详情

java8虚拟机内存模型

Java虚拟机运行时数据区在JDK1.8之前,JVM运行时数据区分为堆、虚拟机栈、本地方法栈、方法区、程序计数器。如下图所示:虚拟机栈:线程私有,随线程创建而创建。栈里面是一个一个“栈帧”,每个栈帧对应一次方法调用。... 查看详情

java虚拟机学习

//20181129·Java虚拟机的内存分为三个部分:栈stack、堆heap、方法区methodarea----包含在“堆”里面,因为作用特殊所以单独列出来·栈的特点:   栈描述的是方法执行的内存模型。每个方法被调用都会创建一个栈帧(存储... 查看详情

java8虚拟机内存模型

1. Java虚拟机运行时数据区在JDK1.8之前,JVM运行时数据区分为堆、虚拟机栈、本地方法栈、方法区、程序计数器。如下图所示:虚拟机栈:线程私有,随线程创建而创建。栈里面是一个一个“栈帧”,每个栈帧对应一次... 查看详情

书籍摘要-深入理解java虚拟机

java内存区域和内存溢出异常划分内存: java虚拟机在执行java程序时将内存划分为5个部分。线程私有的有成员计数器、虚拟机栈、本地方法栈,线程共享的有方法区、堆。 程序计数器储存字节码行号,此区域未规定任何内存溢... 查看详情

jvm---jvm的数据模型

...其实JVM内部不仅仅只有栈和堆 包括程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区等1.程序计数器线程私有,较小的内存空间,如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令... 查看详情

jvmjava内存区域的介绍

jvm虚拟机在运行时需要用到的内存区域.广泛一点就是堆和栈,其实不然,堆和栈只是相对比较笼统的说法,真正区分有如下几个先上图一: 总的就是  java的内存模型  内存模型又分堆内存(heap)和方法区(有时也称为no... 查看详情

java中的堆内存和栈内存(代码片段)

...存用于存放由new创建的对象和数组。堆内存的分配由Java虚拟机的自动垃圾回收器来管理,因此程序员可以专注于业务逻辑的实现,无需关注内存回收的细节。Java虚拟机会自动检测哪些对象已经不再被引用,然后将其回收释放内... 查看详情

java虚拟机——内存

 参考1参考21.线程独占区1.1程序计数器 1.2Java虚拟机栈  递归调用方法本身的时候,没用递归出口,就会出现stackOverFlow。1.3本地方法栈 2.线程共享区2.1Java堆 2.2方法区   运行时常量  查看详情

java内存

Java虚拟机在执行Java程序的过程中会把他所管理的内存划分为若干个不同的数据区域。Java虚拟机规范将JVM所管理的内存分为以下几个运行时数据区:程序计数器、Java虚拟机栈、本地方法栈、Java堆、方法区。一,内存区域划分  ... 查看详情

2016021801-java内存区域归纳对比

线程私有线程共享程序计数器,虚拟机栈,本地方法栈堆,方法区 内存区异常异常原因程序计数器无 虚拟机栈StackOverflowError线程请求的栈深度大于虚拟机栈所允许的深度OutOfMemoryError如果扩展无法申请到足够的内存本地... 查看详情

jvm学习

1、JVM内存模型  a、栈:  包括虚拟机栈和本地方法栈。  虚拟机栈为线程私有,生命周期与线程相同。java方法执行时会创建一个栈帧,里面保存着对象引用、基本类型数据等  本地方法栈和虚拟机栈类似,虚拟机为jav... 查看详情

用几张图深度剖析java运行时数据区(代码片段)

...#xff08;一)基础概念介绍首先看一张图:下图是Java虚拟机运行时数据区,JVM的内存模型可以分为方法区、虚拟机栈、本地方法栈、堆和程序计数器。首先还是介绍一下基本概念程序计数器:程序计数器的作用可以... 查看详情

java虚拟机jvm内存模型

....3初始化3JVM运行时数据区域3.1方法区MethodArea3.2Java堆Heap3.3虚拟机栈3.3.1 栈帧3.3.2 局部变量表3.3.3 操作数栈3.3.4 动态链接3.3.5方法出口3.4 程序计数器3.5  本地方法栈3.6 直接内存4执行引擎5本地方法目录1 JVM内存模型2类加载器2... 查看详情

java虚拟机内容总结

...区JVM内存分为:1.方法区:线程共享的区域,存储已经被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据2.堆:线程共享的区域,存储对象实例,以及给数组分配的内存区域也在这里。3.虚拟机栈:线程隔... 查看详情

jvm运行时数据区

引自《深入理解Java虚拟机》前言JVM运行时数据分为几大部分程序计数器Java虚拟机栈本地方法栈Java堆方法区(永久代)运行时常量池直接内存JVM内存区域Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的... 查看详情

java虚拟机(jvm)内存区域

    Java虚拟机内存区域分为五部分:程序计数器、Java虚拟机栈、本地方法栈、堆、方法区。其中程序计数器、Java虚拟机栈、本地方法栈属于线程私有内存区,其生命周期与线程相同,随线程的产生而产生,随线程... 查看详情