赞
踩
答:
答:
可以使用 javap -v 字节码文件.Class
命令反编译查看对应字节码的信息
答:
运行时数据区指的是JVM所管理的内存区域,其中分成两大类:
静态变量
也是在堆内存(Class对象中)。答:
OutOfMemoryError
,并提示是Java heap Space
导致的。
-Xmx值
(max的最大值) -Xms值
(初始的total)StackOverflowError
。
-Xss栈大小
OutOfMemoryError
,JDK7及之前提示永久代,JDK8及之后提示元空间。
-XX:MaxPermSize=值
),调整元空间(-XX:MaxMetaspaceSize=值
)OutOfMemoryError
。
-XX:MaxDirectMemorySize=值
答:
答:
final
修饰的基本数据类型的静态变量,准备阶段直接会将代码中的值进行赋值。clinit
部分的字节码指令。答:
类加载器: 负责把字节码文件读取到JVM内存中。
安装目录/jre/lib
下的类文件,比如rt.jar,tools.jar,resources.jar等。安装目录/jre/lib/ext
下的类文件应用程序classpath
下的类文件。ClassLoader
抽象类,重写findClass
方法。在findClass
方法中,定义从哪里读取字节码文件,然后调用defineClass
方法,在方法区和堆区创建对象。答:
好处:
答:
ClassLoader
抽象类,重写loadClass
方法,将双亲委派机制的代码去除。defineClass
方法,在方法区和堆区创建对象。答:
可以使用引用计数法和可达性分析法来判断
答:
SoftReference类
实现。当一个对象只被软引用对象引用,并且内存空间不足时,进行垃圾回收,则会回收被软引用指向的对象。可以把软引用对象本身放到引用队列中,回收软引用对象本身。WeakReference类
实现。不管内存空间够不够,在垃圾回收时,弱引用指向的对象都会被回收。弱引用对象本身也可以使用引用队列回收。PhantomReference类
实现。作用:告诉直接内存,当前指向直接内存的对象不再使用,回收直接内存空间吧。答:
ThreadLocalMap
对象(哈希表),ThreadLocalMap
中存放的是多个Entry
对象。Entry
对象继承自弱引用,指向ThreadLocal对象
。同时强引用指向ThreadLocal对应的value值。Entry
对象强引用。答:
1、标记清除算法
根据可达性分析算法,将所有存活的对象进行标记
在清除阶段,将未被标记的对象进行清除
缺点: 容易产生大量的内存碎片
2、复制算法
将堆内存空间划分成两部分,from区和to区
新创建的对象会被放入到from区。进行垃圾回收的时候,将from区中存活的对象复制到to区
然后将from区和to区互相换个名字
缺点: 堆内存空间利用低
3、标记整理算法
根据可达性分析算法,将所有存活的对象进行标记
整理阶段,将所有存活的对象放到堆的一端,之后清理掉这些对象的内存。
缺点: 整理的效率低
4、分代垃圾回收
将堆内存分为新生代、老年代
新生代又分为:伊甸园、幸存区from、幸存区to
新创建的对象会被放到伊甸园中。
如果伊甸园满了,则会进行Minor GC。
将伊甸园和幸存区from中的存活对象复制到幸存区to中。
清理伊甸园和幸存区from。之后幸存区from、幸存区to互换名字
每次发生MInor GC时,存活的对象年龄 + 1,当到达15时,则会被放到老年代中。
如果老年代满了,首先会触发Minor GC,如果新生代还是放不下,则会触发Full GC。
如果Full GC之后,老年代还放不下,则会爆出OOM。
答:
答:
单线程的垃圾回收器:
多线程的垃圾回收器:
G1垃圾回收器
答:
赞
踩
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。