打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
干货|Jvm循序渐进系列01-初识Jvm

一.JVM虚拟机原理

主要理解Java规范与JVM规范便可以理解Java与JVM的关系,Java与其他各种语言都有自己的规范,但是如果你想用JVM虚拟机那么最终任何语言都需要适配JVM的规范,这样才能用JVM虚拟机进行工作(跨平台的意思)。

Java与虚拟机一点关系都没有,可以说任何能够编译成class的文件都能在Jvm上运行(与平台无关性);

1.1 宏观的Java(其他语言)与JVM的协作原理

1.2 . 微观的Java与jvm的工作原理

二. JVM虚拟机基本结构

通俗讲:对JVM结构(运行过程)的概述:

启动JVM虚拟机后,我们需要告诉虚拟机将要运行什么吧!首先我们将本地系统中编译后的.class文件加载进虚拟机中,加载进入虚拟机后我需要开辟一个地方再存放,我们加载进来的地方(内存去),加载进来后,我们需要告诉虚拟机该做什么吧,这时候就需要解析文件,然后按照执行流程执行完就ok了,但是只存不清理也不行啊,时间久了地方就不够用了,所以我们需要定时清理,以保证内存,这就是虚拟机要做的事情了。

01:加载进虚拟机——类加载子系统

02:存的地方——方法区,堆,栈

03:解析文件——执行引擎

04:定时删除——垃圾回收机制

05:大家都经常吃饭。下面我描述下吃饭的过程。

吃饭的时候,饭不会自己跑到嘴里,所以“类加载器子系统”负责把饭送到你的嘴中,经过咀嚼,饭到了胃里,也就是‘运行时数据区域(堆 栈)’中存着, 我们吸收营养来做日常的开销,消化完了产生了废物,这时候就需要“一朵黄色的小花” 也就是‘垃圾收集子系统’排出体外。 JVM就是不断的重复这些过程来执行程序,从而保证程序的正常运行;

06:JVM就是这些东西的组合;

三:设置JVM启动时候的堆内存大小

3.1:通过cmd设置:

设置后的:

3.2: 通过eclipse设置

自己动手实验一下,看看是否我们可以手动的设置JVM的内存了,这是一个好的开始,那我们接着往下深入看;

四:JAVA堆

JAVA堆与JAVA应用程序是关联关系最为密切的内存空间,几乎所有的对象都放在堆内存中(堆是由新生代与老年代结构组成的-随着新对象年龄的增加最终会到达老年代并被清理),并且JAVA堆是自动化管理的,通过垃圾回收机制,垃圾对象会被自动清理的,不用显示的释放。

4.1:分析编码

我们来分析一下这段编码中,main中有两个局部对象

4.1.1对象实例存放在堆中;

4.1.2 变量s1与s2存放在栈中;

4.1.3 类的信息存放在方法区中;

栈中的s1与s2两个变量指向堆内存中的对象实例,对象实力的描述信息存放在方法区中;

4.2:栈原理

JVM栈是线程私有的一块内存空间,JVM栈和线程执行密切相关,线程执行的基本操作是函数调用,每次函数调用的数据都是通过JVM栈传递的。

让我们来测试一下JVM栈:

通过分别设置 –Xss的值的大小可以看出来

128k = 1098 次嵌套调用后栈溢出;

258 = 3000次嵌套调用后栈溢出;

那么可以看出来,值的大小会影响函数嵌套调用的次数。

4.3:局部变量表原理作用

局部变量表是栈帧的重要组成部分,他用于保存函数的参数以及局部变量,局部变量中的变量只在当前函数调用中生效,当函数调用结束后,随着函数栈帧的销毁,局部变量表也会随之销毁。

局部变量表是存在栈帧中的,所以上面我们所说的函数调用的嵌套次数(层数),跟我们的参数以及局部变量的多少有关系,会占用更多的栈空间,最终导致函数的嵌套。

1、 public void t1(String args1 ,String args2){

long a = 1,b=2, c=3 ,d=4;

}

这个有5个变量;

2、public void t1(String args1 ,String args2 ,String args3){

long a = 1,b=2, c=3 ,d=4 ,e=5,f=6;

}

这个有8个变量;

总结:因为变量的增多会更多的占用我们的栈帧,因此变量更少的函数会拥有更深的调用层次。

结尾

通过以上的内容,

我们主要讲了:

1、 虚拟机的原理与结构的介绍;

2、 JVM堆与栈的参数设置;

3、 JVM堆与栈的工作原理介绍;

这些内容,让我们对JVM有了一个更加清晰的认识。

下一篇,我会更加深层次的分析JVM,篇幅有限,那我们下一期的文章再会了。

误人子弟总是难免,且勿伤人性命!点击“留言”让我们听见你想说的话!

本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
资深架构师技术分享:JVM内存结构与内存模型
Java程序员必备基础图
终于搞懂了Java 8 的内存结构,再也不纠结方法区和常量池了!!
操作系统内存与JVM内存
堆和栈的概念和区别
JVM从零学习(三)虚拟机栈
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服