jvm模型
2023-08-02 16:39:31 0 举报
jvm模型
作者其他创作
大纲/内容
from S010%
老年代 2/3
元空间(方法区)
栈
方法出口
add()栈帧
新生代 1/38:1:1
局部变量表
将add()结果300通过方法出口返回给调用方
int a=1; 详细的步骤第一步:先将1压入到操作数栈, 第二步:1从操作数栈进行出栈,找变量a的内存地址第三步:找到变量a的内存地址,将1赋值给a
。。。
程序计数器
HelloWord的类模板或者类信息
object age=1
public class HelloWord { //类的属性:常量、变量、成员属性 private Object object = new Object(); private static int i = 0; private static String s = \"HelloWorld\"; public static void main(String[] args) { HelloWord app = new HelloWord(); int result = app.add(); System.out.println(result); } public int add() { int a = 1; int b = 2; int c = (a + b) * 100; return c; }}
类加载子系统
java虚拟机:JVM 的主要组件包括类加载器、运行时数据区域和执行引擎
result=300
新生代使用的是复制算法,为了内存利用率,只使用其中一个 Survivor 空间来做轮换备份,因此如果大量对象在 Minor GC 后仍然存活,导致 Survivor 空间不够用,就会通过分配担保机制,将多出来的对象提前转到老年代,此时如果老年代的可用内存小于该对象的大小,就会触发 Full GC。当老年代中最大可用的连续空间小于历代晋升到老年代的对象的平均大小时,会触发Full GC 来让老年代腾出更多的空间
HelloWord
堆
物理内存
object
object age=15
100
app变量指向的是对象
本地方法栈
from s010%
线程共享数据
为什么采用这种分代的设计?答:主要为了减少stw的次数,也就是减少full gc的次数,达到了吞吐量、
a=1
JVM GC 垃圾回收文档官网地址https://www.oracle.com/webfolder/technetwork/tutorials/obe/java/gc01/index.html 在调优 Java 应用程序时,重点是以下两个主要目标之一:响应能力或吞吐量。1.响应能力是指应用程序或系统响应请求的数据的速度。示例包括: 1.1桌面 UI 响应事件的速度 1.2网站返回页面的速度 1.3返回数据库查询的速度对于专注于响应能力的应用程序,不能接受长时间的暂停。重点是在短时间内做出反应。响应能力举个例子:游戏2.吞吐量侧重于最大化应用程序在特定时间段内的工作量。如何测量吞吐量的示例包括: 2.1在给定时间内完成的事务数。 2.2批处理程序在一小时内可以完成的作业数。 2.3一小时内可以完成的数据库查询数。对于专注于吞吐量的应用程序,长时间的暂停是可以接受的。由于高吞吐量应用专注于较长时间的基准测试,因此不考虑快速响应时间。吞吐量举个例子:想象一个电子商务平台正在进行一次销售数据分析。他们可能有数十亿条交易记录需要分析,计算各种指标,比如销售额、销售量、最畅销的产品等等。由于数据量巨大,并且需要进行复杂的计算,整个过程可能需要几个小时甚至更长的时间来完成。在这种情况下,长时间的暂停是可以接受的,因为系统需要足够的时间来处理庞大的数据集,进行复杂的计算,并生成准确的分析结果。尽管用户可能需要等待一段时间才能获得最终的分析结果,但高吞吐量的特性确保了系统能够处理大量数据并提供准确的分析。
to S110%
object age=2
Eden
main()栈帧
JAVA运行时数据区
操作数栈
Hello.class
类加载子系统:将字节码文件从磁盘上加载到内存中执行引擎:根据程序计数器去执行字节码程序计数器:指向当前线程所执行的字节码指令的(地址)行号本地方法栈:span style=\
minor garbage collection
1.8中不再有永久代(permanent generation)
main线程
b =2
线程私有数据
Eden80%
执行引擎
动态链接
major garbage collection
jvm分配的内存
回收内存
局部变量app1
局部变量app
to s110%
young GC(Minor GC):当eden区满了就进行该gc,根据可达性判断该对象是否是游离状态,如果该对象是游离状态的话,就释放这部分内存,否则就将该对象移动到from区,同时让该对象的分代年龄age+1 age=1进行下一次span style=\
0 条评论
下一页