资料内容:
栈帧里面包含哪些东西?
局部变量表、操作数栈、动态连接、返回地址等
程序计数器有什么作用?
程序计数器是一块较小的内存空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。这里面存的,就是当前线程执行的进度。程序计数器还存储了当前正在运行的流程,包括正在执行的指令、跳转、分支、循环、异常处理等。
字符串常量存放在哪个区域?
1、字符串常量池,已经移动到堆上(jdk8之前是perm区),也就是执行intern 方法后存的地方。
2、类文件常量池, constant pool,是每个类每个接口所拥有的,这部分数据在方法区,也就是元数据区。而运行时常量池是在类加载后的一个内存区域,它们都在元空间。
你熟悉哪些垃圾收集算法?
标记清除(缺点是碎片化) 复制算法(缺点是浪费空间) 标记整理算法(效率比前两者差) 分代收集算法(老年代一般使用“标记-清除”、“标记-整理”算法,年轻代一般用复制算法)
Java里有哪些引用类型?
1、强引用这种引用属于最普通最强硬的一种存在,只有在和GC Roots断绝关系时,才会被消灭掉。
2、软引用软引用用于维护一些可有可无的对象。在内存足够的时候,软引用对象不会被回收,只有在内存不足时,系统则会回收软引用对象,如果回收了软引用对象之后仍然没有足够的内存,才会抛出内存溢出异常。可以看到,这种特性非常适合用在缓存技术上。比如网页缓存、图片缓存等。软引用可以和一个引用队列(ReferenceQueue)联合使用,如果软引用所引用的对象被垃圾回收,Java 虚拟机就会把这个软引用加入到与之关联的引用队列中。
3、弱引用弱引用对象相比较软引用,要更加无用一些,它拥有更短的生命周期。当JVM进行垃圾回收时,无论内存是否充足,都会回收被弱引用关联的对象。弱引用拥有更短的生命周期,在Java中,用java. lang. ref. WeakReference类来表示。它的应用场景和软引用类似,可以在一些对内存更加敏感的系统里采用。
4、虚引用这是一种形同虚设的引用,在现实场景中用的不是很多。虚引用必须和引用队列(ReferenceQueue)联合使用。如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收。实际上,虚引用的get,总是返回null。
JVM怎么判断一个对象是不是要回收?
引用计数法(缺点是对于相互引用的对象,无法进行清除) 可达性分析
GC Roots有哪些?
1、GC Roots是一组必须活跃的引用。用通俗的话来说,就是程序接下来通过直接引用或者间接引用,能够访问到的潜在被使用的对象。
2、GC Roots包括:Java线程中,当前所有正在被调用的方法的引用类型参数、局部变量、临时值等。也就是与我们栈帧相关的各种引用。所有当前被加载的Java 类。Java类的引用类型静态变量。运行时常量池里的引用类型常量(String 或Class类型)WM 内部数据结构的一些引用,比如
sun. jvm. hotspot. memory. Universe 类。用于同步的监控对象,比如调用了对象
的wait()方法。JNI handles,包括global handles和local handles。
3、这些GC Roots大体可以分为三大类,下面这种说法更加好记一些:活动线程相关的各种引用。类的静态变量的引用。JNI引用。
4.有两个注意点:我们这里说的是活跃的引用,而不是对象,对象是不能作为GC Roots 的。GC过程是找出所有活对象,并把其余空间认定为“无用” 而不是找出所有死掉的对象,并回收它们占用的空间。所以,哪怕JVM 的堆非常的大,基于tracing的GC方式,回收速度也会非常快。
你知道哪些GC类型?
Minor GC:发生在年轻代的GC。Major GC:发生在老年代的GC。Full GC:全堆垃圾回收。比如Metaspace区引起年轻代和老年代的回收。
对象都是优先分配在年轻代上的吗?
不是。当新生代内存不够时,老年代分配担保。而大对象则是直接在老年代分配。
你了解过哪些垃圾收集器?
年轻代Serial垃圾收集器(单线程,通常用在客户端应用上。因为客户端应用不会频繁创建很多对象,用户也不会感觉出明显的卡顿。相反,它使用的资源更少,也更轻量级。) ParNew垃圾收集器(多线程,追求降低用户停顿时间,适合交互式应用。) Parallel Scavenge垃圾收集器(追求CPU吞吐量,能够在较短时间内完成指定任务,适合没有交互的后台计算。)
老年代Serial Old 垃圾收集器Parallel Old垃圾收集器CMS 垃圾收集器(以获取最短GC停顿时间为目标的收集器,它在垃圾收集时使得用户线程和GC线程能够并发执行,因此在垃圾收集过程中用户也不会感到明显的卡顿。)
说说CMS垃圾收集器的工作原理
Concurrent mark sweep(CMS)收集器是一种年老代垃圾收集器,其最主要目标是获取最短垃圾回收停顿时间,和其他年老代使用标记-整理算法不同,它使用多线程的标记-清除算法。最短的垃圾收集停顿时间可以为交互比较高的程序提高用户体验。CMS工作机制相比其他的垃圾收集器来说更复杂