新生区、永久区、堆内存调优
新生区
- 类:诞生和成长的地方,甚至死亡;
- 伊甸园,所有的对象都是在伊甸园区new出来的!
- 幸存者区(0,1)
老年区
真理:经过研究,99%的对象都是临时对象!
永久区
这个区域常驻内存的。用来存放JDK自身携带的Class对象。Interface元数据,存储的是Java运行时的一些环境或类信息这个区域不存在垃圾回收!关闭JVM虚拟就会释放这个区域的内存
一个启动类,加载了大量的第三方jar包。Tomcat部署了太多的应用,大量动态生成的反射类。不断的被加载。直到内存满,就会出现OOM;
- jdk1.6之前︰永久代,常量池是在方法区;
- jdk1.7 :永久代,但是慢慢的退化了,
去永久代
,常量池在堆中. - jdk1.8之后∶无永久代,常量池在元空间
逻辑上存在:物理上不存在
package com.wang.jvm;
public class Demo02 {
public static void main(String[] args) {
//返回虚拟机试图使用的最大内存
long maxMemory = Runtime.getRuntime().maxMemory();
//返回JVM的初始化总内存
long totalMemory = Runtime.getRuntime().totalMemory();
System.out.println("maxMemory="+maxMemory+"字节\t"+(maxMemory/(double)1024/1024)+"MB");
System.out.println("totalMemory="+totalMemory+"字节\t"+(totalMemory/(double)1024/1024)+"MB");
//默认情况下:分配的总内存是电脑内存的1/4,而初始化的内存:1/64
}
//OOM:
//1.尝试扩大堆内存看结果
//2.分析内存,看一下哪个地方出现了问题(专业工具)
//-Xms1024m -Xmx1024m -XX:+PrintGDetails
}
推荐这些文章:
建议:tomcat虚拟内存JVM最大设置为4G。经过实测4G以上性能提升极小,考虑nginx+tomcat集群做负载均衡。
1.应用场景/常见内容溢出问题
常见问题为内存溢出,分为堆内存溢出、非堆内存溢出,比较常见的为堆内存溢出,后2类属于非堆内存溢出。
堆溢出:java.lang.OutOfMemoryError:Java heap spcace
栈溢出:java.lang.StackOverflowError
方法区溢出:java.lang.OutOfMemoryError:PermGen space
2.虚拟内存JVM设置
内存大小的单位可以是m或者G,一...
性能定义
吞吐量 - 指不考虑 GC 引起的停顿时间或内存消耗,垃圾收集器能支撑应用达到的最高性能指标。
延迟 - 其度量标准是缩短由于垃圾啊收集引起的停顿时间或者完全消除因垃圾收集所引起的停顿,避免应用运行时发生抖动。
内存占用 - 垃圾收集器流畅运行所需要的内存数量。
调优原则
GC 优化的两个目标:
将进入老年代的对象数量降到最低
减少 Full GC 的执行时间
GC 优化的基本原则是:将不同的 GC 参数应用到两个及以上的服务器上然后比较它们的性能,然后将那些被证明可以提高性能或减少 GC 执行时间的参数应用于最终的工作服务器上。
将进入老年代的对象数量...
新生区90%活不到老年区
方式区在物理上属于Java堆区中的一部分,而永久区(Permanent Generation)就是方法区的实现。
元空间
本地内存
说明元空间不在jvm中
&nb...
JVM探究 面试题 JVM的位置 三种JVM:HotSpot 新生区 Young/ New 养老区 Old 永久区 Perm 堆内存调优GC的算法有哪些?标记清除法,标记压缩,复制算法,引用计数法
JVM探究
面试题:
请你弹弹你对JVM的理解?Java8虚拟机和之前的变化更新?
什么是OOM?什么是栈溢出StackOverFlowError?怎么分析
JVM的常用调优参数有哪些?
内存快照如何抓取,怎么分析Dump文件?知道吗?
弹弹JVM中类加载器你的认认识?rt-jar ext application
视频教程
https://www.bilibili.com/video/BV1iJ411d7jS?p=2&spm_id_from=pageDriver
JVM的位置
JVM的体系结构
类加载器
作用:加载Class文件~
虚拟机自带的加载器
启动类(根)加载器...
问题
jvm调优和tomcat调优有啥关系??我看编辑器运行java设置调优参数时候,都是程序启动时候设置的。那么如果不能输入怎么办?比如一个个可执行的jar,web服务? 是不是通过配置文件去修改虚拟机参数的?是一个工程可以配置一套jvm参数么??感谢大神解答下。
最佳回答
JVM调优不是几句话能说明白的,你可以找些书籍了解一下JVM,就知道怎么回事了
Tomcat是运行在JVM之上的,但是Tomcat调优并不等价于JVM调优,因为tomcat毕竟是个服务器,还包含服务器相关的调优;
运行项目的jvm参数,就是在启动的时候...
public class Pet { String name; int age ; //无参构造 public void shout(){ System.out.println("叫了一声"); }
public class Application {
public static void main(String[] args) {
Pet dog = new Pet();
dog.name = "旺财";
dog.age = 3;
System.out.pri...
栈:每个方法执行时,都会创建一个栈桢,记录着局部变量,方法出口等方法的相关信息。方法的执行到结束,对应着一个栈桢入栈到出栈的过程。线程私有,当栈的深度超过JVM所允许的深度时,会抛出StackOverflowError,如果是动态栈,超过可以扩展范围,则会抛出OutOfMemoryError。
堆:线程共享,所有对象实例,数组都在此分配,gc管理的区域。
方法区:用来存在被加载的class,常量,静态变量,已经编译后的代码缓存等,线程共享。
程序计数器:字节码行号指示器。通过改变计数器的值,来决定下一步,执行哪一条字节码指令。每个线程都有一个单独的程序计数器。不会出现OutofMemoryE...
文章链接:https://www.dianjilingqu.com/50929.html
本文章来源于网络,版权归原作者所有,如果本站文章侵犯了您的权益,请联系我们删除,联系邮箱:saisai#email.cn,感谢支持理解。