作者:mobiledu2502875063 | 来源:互联网 | 2023-09-18 18:59
需要仔细听的地方:01:49:31这块写的是很好的---------------------------------------------------------
需要仔细听的地方:01:49:31这块写的是很好的
----------------------------------------------------------------------------------------------------------------------
执行到这个方法B是不会被加载的,必须满足条件才可以被加载的,必须是被使用了才会被加载的。
跨代引用也是gc root,跨代引用:https://www.jianshu.com/p/671495682e46
符号引用包括方法名什么的都是符号引用。
常量和字面量:https://www.jianshu.com/p/0f2816805da6
---
堆:对象,成员变量的引用
虚拟机栈:基本类型的局部变量 局部变量的引用
方法区堆外内存(元空间属于直接内存):常量 静态变量 即时编译后的代码
运行时常量池(堆逻辑上属于方法区):字面量 类的符号引用 直接引用
---
字面量:https://www.jianshu.com/p/465073cc94d8
常量:https://www.bbsmax.com/A/kPzO7q0ezx/
参考:https://m.imooc.com/wenda/detail/496796
栈:给执行的方法单独分配的内存区域是栈帧。栈先进后出。一个线程是一个栈,一个栈有很多的方法。
---
.class文件加载到方法区,在内存中生成一个class对象指向这个区域。
---
栈:
一旦开启线程会单独的开辟一块栈的区域的。
---
栈帧:线程里面每一个方法会单独的分配一个栈帧。
main方法运行马上分配一个栈帧,接着调用math方法,再次压栈,执行完毕就出栈了。
栈的结构:
这个语句生成可读性的字节码文件。可以在手册查。
操作数栈:
就是a=1的1,这个1分配到操作数栈里面去,
然后出栈给a赋值。同理c=(a+b)*10,先把a和b的值放在操作数栈。弹出栈做计算,算出值为3结果再押入到操作数栈,以此类推,再押入操作数栈10,弹出10和3计算为30,再押入操作数栈,最后出栈赋值给c。
图解:
流程:
出栈给a赋予=值。
这个就是把c=30发到操作数栈里面去
局部变量表:就是局部变量。
程序计数器:就是这个行号。
方法的出口:方法出口存放的值就是应该返回外层的方法的行号。
动态链接:以后说
---
栈的参数:
我们执行一个方法,测试栈的溢出的:
参数的设置:
如何修改栈的参数?
当前一个线程的分配的栈的大小的。
如何设置:
----------
下半节课
----------
class会加载到方法区。
方法区:
类元信息是类的组成部分就是之前加载验证解析初始化什么的之后的。
1.栈指针指向堆。
2.new对象,对象头里面有一个指针,指向方法区就是指向类元信息。
3.方法区静态变量也有指针指向堆。
---
对象头指针找方法区的类元信息,再找类的方法。
动态链接:
首先静态的符号我们放在常量池里面。
我们去常量池去找类的符号引用:
执行这个方法是如何找到这个符号的?
new这个类就是math的时候,在对象头里面就有了指针了,指向方法区的指令码。找到compute。然后把地址映射到动态链接里面,动态链接就是真正的运行到这一行的。
符号引用:就是单纯的compute方法。
直接引用:替换为指针,就是方法区的地址。
静态链接:类加载过程中在解析阶段静态方法,方法区指令码的入口地址指定好关系了。
动态链接:在运行的时候。
---
本地方法栈:native,jave和c做接口的交互的。
---
元空间就是物理内存直接内存。
堆重点:
先是minor gc,老年代放满了就是full gc。年轻代和老年代满了才gc的,不是定时的。
子节码引擎调用垃圾回收。
---
minor gc和full gc都会停止我们的工作。
什么时候触发full gc:https://baijiahao.baidu.com/s?id=1632743030610982339&wfr=spider&for=pc
minor gc触发条件:https://blog.csdn.net/shi2huang/article/details/80067608
---
gc流程:
15次放在老年代。元空间没有变化,放的是类的信息。
full gc有引用的是回收不了的。
---
双核4G的内存的分配是什么技术呢?
tomcat的话放在cataline.out。
调优就是尽可能减少full gc。
---
估算订单内字段的大小。
每秒1M放在eden,1秒下单完毕变为垃圾对象,等待回收。很快的。
暴增,每秒20M,很快就会垃圾回收,但是可能订单时间太长了因为会有阻塞的,经历好几个minor gc也回收不掉,而且回收还很频繁的。就进入老年代了。
三台服务器四小时百万订单
1秒1000 1分钟60000一小时360000四小时1440000 三个服务器一秒300个。
如何估算对象的大小,主要去估算字段的大小。
---
百万订单思路:
4G->1G多点。
---
JVM为什么设置STW?
有时候非垃圾变为垃圾了,太复杂了,我找对象干脆停了。