当前位置:首页 > Java技术 > JVM内存模型基础

JVM内存模型基础

2022年08月09日 21:56:11Java技术143

1. JVM

线程私有内存:

  • 程序计数器(Program Counter Register):保留当前线程执行方法
  • Java虚拟机栈(JVM Stack):方法的栈帧
  • 本地方法栈(Native Method Stack):存储native方法信息

多线程共享内存:

  • 堆(Heap):存储对象和数组
  • 方法区(Method Area):存储类结构/常量/静态变量,运行时常量池:属于方法区

1.1. 程序计数器

程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里(仅是概念模型,各种虚拟机可能会通过一些更高效的方式去实现),字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。

1.2. Heap

Java 堆(Java Heap)是Java 虚拟机所管理的内存中最大一块。Java 堆是被所有线程共享的一块内存区域,在虚拟机启动时创建。此内存区域用来存放对象实例,几乎所有的对象实例都在这里分配内存,垃圾回收器也主要在堆内工作。

java堆:分为新生代和老年代,

  • 老年代进行fullGC:
  1. 或者使用system.gc
  2. 老年代满后

java heap详解

java性能调优的目的:(调整full gc调整频率以及响应时间)

工具:jvisualvm,jconsole

1.3. JVM Stack

Java 虚拟机栈(Java Virtual Mach1ne Stacks)也是线程私有的,它的生命周期与线程相同。虚拟机栈描述的是Java 方法执行的内存模型: 每个方法被执行的时候都会同时创建一个栈帧(Stack Frame) 用于存储局部变量表、操作数栈、动态链接、方法出口等信息。每一个方法被调用直至执行完成的过程, 就对应着一个栈帧在虚拟机栈中从入栈出栈的过程。

  1. 方法出口:是指方法的调用者
  2. 局部变量表:放置运行过程的数值
  3. 操作数栈:放置运行过程的数值

1.4. Method Area

方法区(Method Area) 与Java 堆一样, 是各个线程共享的内存区域, 它用于存
储已被虚拟机加载的类信息、常量、静态变量、即时编译器编译后的代码等数据。

作者:Ysalng
来源链接:https://www.cnblogs.com/innndown/p/12402403.html

版权声明:
1、JavaClub(https://www.javaclub.cn)以学习交流为目的,由作者投稿、网友推荐和小编整理收藏优秀的IT技术及相关内容,包括但不限于文字、图片、音频、视频、软件、程序等,其均来自互联网,本站不享有版权,版权归原作者所有。

2、本站提供的内容仅用于个人学习、研究或欣赏,以及其他非商业性或非盈利性用途,但同时应遵守著作权法及其他相关法律的规定,不得侵犯相关权利人及本网站的合法权利。
3、本网站内容原作者如不愿意在本网站刊登内容,请及时通知本站(javaclubcn@163.com),我们将第一时间核实后及时予以删除。


本文链接:https://www.javaclub.cn/java/20047.html

分享给朋友: