建设网站个人银行,网页编辑打印工具,大秀,淄博怎么做网站1. Java语言的跨平台特性 2. JVM整体结构及内存模型 堆存放着对象信息每个线程都会分配一块属于自己的内存空间#xff08;栈空间#xff09; 每个方法都会分配一块内存空间#xff08;栈桢#xff09;#xff0c;上图 compute()方法 和 main()方法 都会分配到各自的栈桢空…1. Java语言的跨平台特性 2. JVM整体结构及内存模型 堆存放着对象信息每个线程都会分配一块属于自己的内存空间栈空间 每个方法都会分配一块内存空间栈桢上图 compute()方法 和 main()方法 都会分配到各自的栈桢空间 局部变量存放不同方法运行时生成的的临时变量的一块内存空间操作数栈临时存放操作变量的一块内存空间数据结构是栈 程序运行时会将静态的常量池load到内存运行时常量池放在方法区方法区存放着常量、静态变量、类元信息
JVM的永久代方法区中会发生垃圾回收么
垃圾回收不会主动发生在永久代但如果永久代满了或者是超过了临界值会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因
为什么要有程序计数器
因为一个执行过程中可能cpu时间片被其他线程抢占了当前线程挂起了恢复的时候需要依赖程序计数器才能知道执行到什么位置了 每执行完一行代码字节码执行引擎都会动态的修改程序计数器的值执行那一行代码在内存中的位置
JVM调优主要目的
gc 时会触发STW导致用户响应特别慢需要等待full gc 结束所以需要减少Full gc 的次数/减少Full gc执行时间如果Minor gc 的次数非常频繁也应该要减少Minor GC 的次数
在minor gc过程中对象挪动后引用如何修改
对象在堆内部挪动的过程其实是复制原有区域对象还在一般不直接清理JVM内部清理过程只是将对象分配指针移动到区域的头位置即可比如扫描s0区域扫到gcroot引用的非垃圾对象是将这些对象复制到s1或老年代最后扫描完了将s0区域的对象分配指针移动到区域的起始位置即可s0区域之前对象并不直接清理当有新对象分配了原有区域里的对象也就被清除了。minor gc在根扫描过程中会记录所有被扫描到的对象引用(在年轻代这些引用很少因为大部分都是垃圾对象不会扫描到)如果引用的对象被复制到新地址了最后会一并更新引用指向新地址。
3. JVM内存参数设置 Spring Boot程序的JVM参数设置格式(Tomcat启动直接加在bin目录下catalina.sh文件里)
java -Xms2048M -Xmx2048M -Xmn1024M -Xss512K -XX:MetaspaceSize256M -XX:MaxMetaspaceSize256M -jar microservice-eureka-server.jar-Xss每个线程的栈大小 (-Xss设置越小count值越小说明一个线程栈里能分配的栈帧就越少但是对JVM整体来说能开启的线程数会更多)-Xms设置堆的初始可用大小默认物理内存的1/64-Xmx设置堆的最大可用大小默认物理内存的1/4-Xmn新生代大小-XX:NewRatio默认2表示新生代占年老代的1/2占整个堆内存的1/3。-XX:SurvivorRatio默认8表示一个survivor区占用1/8的Eden内存即1/10的新生代内存。
关于元空间的JVM参数有两个-XX:MetaspaceSizeN和 -XX:MaxMetaspaceSizeN
-XXMaxMetaspaceSize 设置元空间最大值 默认是-1 即不限制 或者说只受限于本地内存大小。-XXMetaspaceSize 指定元空间触发Fullgc的初始阈值(元空间无固定初始大小) 以字节为单位默认是21M左右达到该值就会触发full gc进行类型卸载 同时收集器会对该值进行调整 如果释放了大量的空间 就适当降低该值 如果释放了很少的空间 那么在不超过-XXMaxMetaspaceSize如果设置了的话 的情况下 适当提高该值。这个跟早期jdk版本的-XX:PermSize参数意思不一样-XX:PermSize代表永久代的初始容量。
元空间是否会发生Full GC
由于调整元空间的大小需要Full GC这是非常昂贵的操作如果应用在启动的时候发生大量Full GC通常都是由于永久代或元空间发生了大小调整基于这种情况一般建议在JVM参数中将MetaspaceSize和MaxMetaspaceSize设置成一样的值并设置得比初始值要大对于8G物理内存的机器来说一般我会将这两个值都设置为256M。
3.1 JVM内存参数大小该如何设置
JVM参数大小设置并没有固定标准需要根据实际项目情况分析给大家举个例子
日均百万级订单交易系统如何设置JVM参数
结论通过上面这些内容介绍大家应该对JVM优化有些概念了就是尽可能让对象都在新生代里分配和回收尽量别让太多对象频繁进入老年代避免频繁对老年代进行垃圾回收同时给系统充足的内存大小避免新生代频繁的进行垃圾回收。