JVM
文章平均质量分 83
jvm
@Autowire
这个作者很懒,什么都没留下…
展开
-
请你谈谈对Java虚拟机的组成部分理解?
1Java虚拟机的组成部分1对虚拟机栈的理解每个线程都有自己的栈,栈中的数据都是以栈帧的格式存在。对于栈帧的理解在每个线程上正在执行的每个方法都各自对应一个栈帧每个栈帧都存放对于局部变量表、操作数栈、动态链接、方法出口的理解局部变量表:定义一个数字数组,主要用于存储方法参数和定义在方法体内的局部变量,这些数据类型包括各类基本数据类型、对象引用。注意:局部变量表中也是重要的垃圾回收根节点,只要被局部变量表中直接或间接引用的对象都不会被回收。0: iconst_1 将int类原创 2021-03-07 20:43:49 · 230 阅读 · 0 评论 -
请你谈谈对象的内存分配策略&&JVM内存问题
1 JVM内存分配策略对象优先在 Eden 区分配多数情况,对象都在新生代 Eden 区分配,当 Eden 区分配没有足够的空间进行分配时,虚拟机将会发起一次 Minor GC,如果本次 GC 后还是没有足够的空间,则将启用分配担保机制在老年代中分配内存。Minor GC 是指发生在新生代的 GC,因为 Java 对象大多都是朝生夕死,所有 Minor GC 非常频繁,一般回收速度也非常快;Major GC是指发生在老年代的 GC,出现了 Major GC 通常会伴随至少一次 Minor GC。Maj原创 2021-08-03 12:08:02 · 399 阅读 · 0 评论 -
请你谈谈类加载过程、类加载器的分类、双亲委派机制?
1类的加载过程加载过程:链接阶段:初始化阶段:2类加载器的分类public class Test { public static void main(String[] args) { ClassLoader systemClassLoader = ClassLoader.getSystemClassLoader(); //AppClassLoader ClassLoader extensionClassLoader = systemClassL原创 2021-03-07 21:25:46 · 316 阅读 · 0 评论 -
请你谈谈新生代、老年代、永久代的区别&&Minor GC、Major GC、Full GC?
1新生代、老年代、永久代的区别?Java7及以前版本的Hotspot中方法区位于永久代中。同时,永久代和堆是相互隔离的,但它们使用的物理内存是连续的。堆被划分成两个不同的区域:新生代 ( Young )、老年代 ( Old )。而新生代 ( Young ) 又被划分为三个区域:Eden、From Survivor、To Survivor。这样划分的目的是为了使 JVM 能够更好的管理堆内存中的对象,包括内存的分配以及回收。新生代中一般保存新出现的对象,所以每次垃圾收集时都发现大批对象死去,只有少量对原创 2021-08-03 08:50:27 · 9388 阅读 · 1 评论 -
请你谈谈Java垃圾回收及其相关算法?
1什么是垃圾?垃圾是指在运行程序中没有任何指针指向的对象,这个对象就是需要被回收的垃圾。如果不及时对内存中的垃圾进行清理,那么,这些垃圾对象所占的内存间会一直保留到应用程序结束,被保留的空间无法被其他对象使用。甚至可能导致内存溢出。2为什么需要GC?3早期的垃圾回收4Java垃圾回收机制在java中,程序员是不需要显示的去释放一个对象的内存的,而是由虚拟机自行执行。在JVM中,有一个垃圾回收线程,它是低优先级的,在正常情况下是不会执行的,只有在虚拟机空闲或者当前堆内存不足时,才会触发执行,扫原创 2021-03-08 10:44:25 · 174 阅读 · 1 评论 -
请你谈谈对垃圾回收器的理解?
1GC分类与性能指标2不同垃圾回收器概述3Serial回收器:串行回收4ParNew回收器:并行回收5Parallel回收器:吞吐量优先6CMS回收器:低延迟7G1回收器:区域化分代式8垃圾回收器总结...原创 2021-03-09 08:07:43 · 544 阅读 · 0 评论 -
请你谈谈对ThreadLocal的理解?
1理解Java的强引用、软引用、弱引用和虚引用1强引用(StrongReference)强引用是使用最普遍的引用,如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足时,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。 如果强引用对象不使用时,需要弱化从而使GC能够回收,如下: strongReference = null;方法的内部使用强引用:这个引用保存在Java栈中,而真正的引用内容(Obj原创 2021-08-02 10:08:05 · 188 阅读 · 0 评论 -
请你谈谈System.gc()&&STW&&垃圾回收的并发与并行&&安全点与安全区域的理解
1System.gc()2内存溢出和内存泄漏3STW(Stop The World)4垃圾回收的并行与并发5安全点与安全区域6强引用7软引用8弱引用9虚引用原创 2021-03-08 15:31:29 · 313 阅读 · 0 评论 -
请你谈谈频繁full gc怎么排查?
通常的处理,我们还是要在FULLGC时取到当时的dump文件,来分析内存里都有哪些数据占居着内存。这里有两种办法来获取dump文件:1.通过在jvm里添加参数配置:+HeapDumpBeforeFullGC,+HeapDumpAfterFullGC 这种方法需要在应用启动前要提前配置好,如果不需要的话,还需要修改jvm参数重启应用。2.使用jinfo命令进行设置。(生产环境常用的方法)无需重启jvm,即时生效,dump文件生成后,清除JVM参数,通常fullgc 会频繁发生,不需要一直导出dump,转载 2021-04-19 18:14:54 · 1331 阅读 · 0 评论 -
请你谈谈如何破坏双亲委派模型?
1什么是双亲委派模型?https://blog.csdn.net/zs18753479279/article/details/1144975062如何破坏双亲委派模型?典型的两个方法:1自定义类加载器,重写loadClass方法;2使用线程上下文类加载器;1 重写loadclass()方法破坏双亲委派模型loadclass的作用就是通过指定的全限定名加载class。这里最主要的是重写loadclass()方法,因为**双亲委派机制的实现就是通过这个方法实现的,这个方法可以指定类通过什么加载器来加原创 2021-04-10 14:04:59 · 2066 阅读 · 0 评论 -
从jvm深入了解String
1String基本特性public final class String implements java.io.Serializable, Comparable<String>, CharSequence字符串常量池是不会存储相同内容的字符串的。2String的内存分配两者看似都是创建了一个字符串对象,但在内存中确是各有各的想法。String str1= “abc”; 在编译期,JVM会去常量池来查找是否存在“abc”,如果不存在,就在常量池中开辟一个空间来存储“abc”原创 2021-03-09 21:04:53 · 138 阅读 · 0 评论 -
从JVM谈谈对象的创建到销毁的整个过程?
1从创建对象A来谈谈对象的创建到销毁A a = new A();:1、用户创建了一个A对象,运行时JVM 首先会去方法区寻找该对象的类信息,没有则使用类加载器Classloader加载A.class字节码文件,过程:类加载过程: ClassLoader负责Class文件的加载,加载的类信息存放于一块称为方法区的内存空间,除了类信息外,方法区还存放运行时常量池的信息,常量,静态变量;类的加载阶段: 1通过一个类的全限定名获取定义此类的二进制字节流;2将这个字节流所代表的静态存储结构转化为方法区的运行时数据原创 2021-04-10 13:18:45 · 1182 阅读 · 0 评论