![](https://img-blog.csdnimg.cn/20201014180756757.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
JVM
文章平均质量分 71
JVM
weixin_46248981
这个作者很懒,什么都没留下…
展开
-
JVM出现了OOM异常如何解决
1.异常出现位置堆溢出、永久代/元空间溢出、方法栈溢出2.堆溢出java.lang.OutOfMemory : Java heap space原因:1.代码中可能存在大对象分配2.可能存在内存泄漏,多次GC之后,还是无法找到一块足够大的内存容纳当前对象解决方法:1.检查是否存在大对象的分配,最有可能是大数组的分配2.通过jmap命令,把堆内存dump下来,使用mat工具分析一下,检查是否存在内存泄漏问题3.如果没有找到明显的内存泄漏,使用-Xmx加大堆内存4.检查是否有大量的自定义的F转载 2021-09-22 22:22:19 · 206 阅读 · 0 评论 -
为什么新生代有两个Survivor分区
分代收集器会把内存空间分为:老年代和新生代两个区域,而新生代又会分为:Eden区和两个Survivor区(From Survivor、To Survivor)。可以看出,Eden区和Survivor分区的默认比例是8:1:1。这个值可以通过:-XX:SurvivorRatio设定,默认值,:-XX:SurvivorRatio=8。新生代和老年代的默认情况下内存占比是1:2,该值可以通过:-XX:NewRatio来设定。1.为什么要有Survivor区如果没有Survivor,Eden区每进行异常M转载 2021-05-17 17:13:30 · 269 阅读 · 0 评论 -
类加载机制
1.类的生命周期整个生命周期将会经历加载、验证、准备、解析、初始化、使用、卸载七个阶段。2.哪些情况会触发类的初始化?遇到new、getstatic、putstatic或invokestatic这四条字节码指令时,如果类型没有进行过初始化,则需要先触发其初始化阶段。使用java.lang.reflect包的方法对类型进行反射调用的时候,如果类型没有进行过初始化,则需要先触发其初始化。当初始化类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化。当虚拟机启动时,用户需要指定一原创 2021-05-07 11:33:56 · 50 阅读 · 0 评论 -
垃圾回收机制
1.JVM运行时数据分区有哪些?分别存储哪些内容?有什么特点?2.垃圾回收主要回收哪些区域?垃圾回收主要关注的是Java堆和方法区。3.如何判断一个对象是否可回收如果一个对象已死,那么就对其进行回收。判断对象存活的算法:1.引用计数算法。在对象中添加一个引用计数器,每当有一个地方引用它时,计数器值就加一;当引用失效时,计数器值就减一;任何时刻计数器为零的对象就是不可能再被使用的。通常情况下,引用计数算法虽然占用了一些额外的内存空间来进行计数,但它的原理简单,判定效率也很高。不过在Java主原创 2021-05-06 22:25:26 · 98 阅读 · 0 评论 -
Java对象的访问方式
主流的访问方式只要有使用句柄和直接指针两种。句柄如果使用句柄访问的话,Java堆中可能会划分出一块内存来作为句柄池,reference中存储的就是对象的句柄地址,而句柄中包含了对象实例数据与类型数据各自的地址信息,其结构如图。直接指针如果使用直接指针访问的话,Java堆中对象的内存布局就必须考虑如何放置访问类型数据的相关信息,reference中存储的直接就是对象地址,如果只是访问对象本身的话,就不需要多一次间接访问的开销。这两种对象访问方式各有优势,使用句柄来访问的最大好处就是referen原创 2021-05-06 11:44:50 · 1068 阅读 · 0 评论 -
运行时数据分区
1.JVM将数据区域划分为哪些部分,分别存储哪些内容Java虚拟机在执行Java程序的过程中会把它的管理的内存划分成若干个不同的数据区域。JDK1.8和之前的版本略有不同。JDK1.8之前:JDK1.82.哪些区域是线程私有的,哪些是线程公有的线程私有的:虚拟机栈、本地方法栈和程序计数器。线程共享的:堆,方法区,直接内存。2.1程序计数器的作用1.字节码解释器通过改变程序计数器来依次读取指令,从而实现代码的流程控制。如:顺序执行、选择、循环、异常处理。2.在多线程的情况下,程序计原创 2021-05-06 11:25:04 · 92 阅读 · 0 评论 -
Java对象在哪里存储?逃逸分析
1.Java对象的存储位置堆是进程中最大的一块内存,主要用于存放新创建的对象(所有对象都在这里分配内存),方法区主要用于存放已被加载的类信息、常量、静态变量,即时编译后的代码等数据。2.成员变量的一个基本数据类型有可能放在栈上吗在Java中只要是成员变量,一旦所在类被实例化后,都是放在堆内存的,不管它是不是基本数据类型。局部变量才是放在栈内存的。局部变量表里面存放的是局部变量,存放方法参数和方法内部定义的局部变量。3.什么是逃逸分析基本原理:分析对象动态作用域,当一个对象在方法里面被定义,它可原创 2021-03-26 10:17:39 · 313 阅读 · 0 评论