基于jsp网站开发与实现,移动端网站排名,极速网站建设哪家便宜,珠宝网站源码下载文章目录 jdk的体系结构图Java语言的跨平台的特性#xff0c;怎么实现的#xff1f;jvm内部组成呢#xff1f;pc的值怎么变得#xff1f;main方法的栈帧有一点点区别#xff0c;Math()是new出来的#xff0c;放在堆区#xff0c;这个堆区的math和我们栈帧中的局部变量表… 文章目录 jdk的体系结构图Java语言的跨平台的特性怎么实现的jvm内部组成呢pc的值怎么变得main方法的栈帧有一点点区别Math()是new出来的放在堆区这个堆区的math和我们栈帧中的局部变量表什么关系?方法区原空间——常量静态变量类信息垃圾回收机制gc使用的算法——可达性分析算法调优工具——ArthasSTW——stop the world停掉用户线程gc的时候会发生为什么会设计STW机制可以不要吗案例单机几十万并发的系统JVM如何优化这里如何调优——借助垃圾收集器 jdk的体系结构图 Java语言的跨平台的特性怎么实现的 靠我们的Java虚拟机
jvm内部组成呢 调优主要是调内存区的。 new出来的对象放堆里 栈线程放局部变量自己独立使用 在一个线程中每一个方法都有一个独立的栈帧内存空间。 线程栈里面存放的栈帧就是使用数据结构中的栈FILO存放的——和我们方法的嵌套调用的方法相吻合
栈帧内部除了放局部变量放在局部变量表中外还会有其他的 pc是指向下一条指令为什么需要这个pc呢——多线程切换 当前线程执行的时候来了条优先级更高的指令就要进行线程切换这就是PC的作用。
pc的值怎么变得 自增NONONO。是由字节码执行引擎修改的。 动态链接作用——把符号引用转换成直接引用。 方法出口——方法的返回地址
main方法的栈帧有一点点区别Math()是new出来的放在堆区这个堆区的math和我们栈帧中的局部变量表什么关系? 就是把堆中的地址放在栈中。 因为栈中有很多的局部变量他们放在堆中把堆中的地址放在栈中。——栈和方法区的关系
方法区原空间——常量静态变量类信息
new出来的对象还是要放在堆中把地址放在方法区——方法区和堆之间的关系 粉色的是私有的黄色的是共享的
垃圾回收机制gc使用的算法——可达性分析算法 非垃圾对象会被复制一份放到survivor区 第二次垃圾回收他们都存活着那就继续复制 一个对象刚开始放在Edgn中如果是垃圾就在Edgn中回收如果继续存活就放在年轻代中在年轻代的存活周期就是在S0和s1中挪来挪去超过15次,年轻代也放满了之后就放到老年代进行ygc 老年代如果也放满了就OOM内存溢出
调优工具——Arthas 下载这个arthas-boot.jar包
功能强大能直接定位到死锁的代码位置也可以在生产环境中直接修改变量的值直接查看代码……
STW——stop the world停掉用户线程gc的时候会发生
gc一定程度对网站性能有影响——是因为STW——所以调优的根本目的是减少STW的发生
为什么会设计STW机制可以不要吗
蚂蚁金服一面如果没有他假如在gc执行的时候没有STW这时候一个用户线程执行结束了那些原本是非垃圾的对象就变成了垃圾对象就把gc整懵逼了。 所以有了STWgc执行的时候用户线程不会执行对象是不是垃圾就确定了。
案例 14s就放满了假如在13s有线程在minor gc的时候没结束依旧存活那要放在S0但不一定放在S0有可能放在老年代。
大对象会直接放在老年代 假设每一次minor gc都有60M放进去一会就满了发生full gc 但这些一会就要成垃圾了不应该放在老年代老年代主要放长久存活的那些。 那有没有办法解决这个问题呢 当然可以比如把年轻代调大调整一下内存区的比例在并发压力不是特别大的情况下老年代很久很久才会发生full gc
单机几十万并发的系统JVM如何优化
kafka, rocketmq都可以抗住每秒10万的并发的。 如果使用这些一定要优化JVM的。
这里如何调优——借助垃圾收集器 后面广告太多没在听啦