jvm+mysql索引优化+sql优化

一、jvm---线程栈

 

 

每个线程都会从内存栈分配一块区域,这个区域里放了此线程变量(按方法,一个方法对应一块栈帧内存区域)。

Math.class字节码文件不是给人看的,idea中找到Math类,右键找到terminal,输入javap,底下-c对代码进行反汇编

命令:javap -c Math.class > math.txt

此时,Math类根目录下多了一个文件,是java虚拟机的汇编代码,可在官方查询命令的意思。

a=1的底层:

iconst:将int类型常量_1压入操作数栈     istore:将int类型存入局部变量1(实质:将常量1从操作数栈取出,存入变量a的内存)

程序计数器:程序马上要运行代码的行号(实质:内存地址),字节码执行引擎动态修改

iload_1:从局部变量中装载int类型值  iload_2:从局部变量中装载int类型值 iadd:从操作数栈弹出最上面俩值,进行add操作,然后push进操作数栈

 bipush 10:将10放进操作数栈

imul:执行int类型的乘法 -----》从栈顶弹出两个最新的操作数,将结果压回操作数栈

动态链接:存方法的入口地址,方法出口:存方法出口的地址,方法嵌套时,就指向了下一个方法地址

Math math = new Math();

局部变量表里装载一个math变量,堆里产生一个Math对象,math变量存的是Math对象的地址,所以它其实指向了这个对象。栈和堆的关系由此出来:局部变量存对象的地址,为指向关系。

方法区:1.8之前叫持久代,1.8之后叫元空间。常量+静态变量+类信息。

static类型的user变量指向new出来的User对象。也是有指向关系。

本地方法:由native修饰的方法,底层由c++实现。线程运行过程中,用到本地方法了,就从本地方法栈取一块内存空间给这个线程本地方法用。

 

紫色部分:线程私有的。栈,本地方法栈。程序计数器。

粉色部分:线程公有的。堆。方法区。

堆:年轻代:老年代=1:2。 其中年轻代:eden区:survivor区=8:1:1。当eden区对象放满内存后,触发gc,底层可达性算法。

posted @   Anne起飞记  阅读(6)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· 记一次.NET内存居高不下排查解决与启示
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· .NET10 - 预览版1新功能体验(一)
点击右上角即可分享
微信分享提示