温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

如何理解Java垃圾回收

发布时间:2021-10-20 16:46:57 来源:亿速云 阅读:168 作者:iii 栏目:编程语言

这篇文章主要介绍“如何理解Java垃圾回收”,在日常操作中,相信很多人在如何理解Java垃圾回收问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”如何理解Java垃圾回收”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

 Java内存区域

Q:Java虚拟机规范将JVM虚拟机所管理的内存分为几部分?如果是多选题,估计会给一些不在里面的,例如直接内存。

A:程序计数器、java虚拟机栈、本地方法栈、方法区、堆。

如何理解Java垃圾回收

java对象在内存上的分配:

如何理解Java垃圾回收

§ GC策略

Q:java使用根搜索算法来确定对象是否存货,哪些对象可以作为GC Roots?

A:

  •  虚拟机栈(栈帧中的本地变量表)中的引用的对象

  •  方法区中的类静态属性引用的对象

  •  方法区中的常量引用的对象

  •  本地方法栈中JNI(Native方法)的引用对象

Q:标记清除、标记整理、复制算法哪个块?

A:复制算法较快。

3个算法含义如下:

如何理解Java垃圾回收

Q:SerialOld用的是什么算法?

A:标记整理算法,属于处理老年代算法。

各收集器的变化图如下,主要关注一下变化和区别,

如何理解Java垃圾回收

如何理解Java垃圾回收

Q:fullGC 会发生在老年代区还是新生代区?

A: 会发生在老年代区。相反,minorGC一般发送在新生代区。

新生代、老生代以及minorGC、fullGC的发生流程如下:

如何理解Java垃圾回收

Q:方法区里的class对象(即类对象)什么时候会被回收?

A:所有实例都被回收、对应classLoader也被回收、class对象不会再被引用或者反射(这个咋确定?当初书里看到的,没懂)

§ finalized与GC

Q:什么时候会调用对象的finalized方法

A:JVM启动垃圾回收,且该对象要被回收时。

finalized应该更多是规范吧,很多规范里都要求我们不要自己实现finalized了,毕竟不确定性太大。

§ Java虚拟机GC参数配置

突然想起来当初看java虚拟机时,把那些参数给跳过了,感觉记不住。

但现在发现还是得学的,赶紧恶补一下。

Q:

-client和-server的对比

()启动较快

()性能和内存管理效率高(注意启动快和性能好不是一回事)

桌面应用一般使用(), 服务器一般使用()

A:

(-clien)启动较快

(-server)性能和内存管理效率高

桌面应用一般使用(-clien), 服务器一般使用(-server)

有4个跟内存相关的参数

-Xmn -Xms -Xmx -Xss

回答下面的问题:

Q:

用于配置java初始堆内存的是()

A:

-Xms。

-X、memory、size ,内存大小

Q:

用于配置java堆的最大值的是()

A:

-Xmx。

-X、memory、max

最大内存

如何理解Java垃圾回收

Q:如果不设置,-Xms和-Xmx的大小分别默认是多少?

A:

不设置的话,二者相等,默认是 物理内存/64(小于1G)

Q:用于配置新生代内存大小的最大值是:()

你问我什么是新生代内存?

就是下面这个,1个E区加2个S区的这个内存大小

A:

-Xmn。

-X、memory、new

相类似的还有-XX:NewSize 和 -XX:MaxNewSize。

Q:如何根据上面的参数计算老年代内存大小?

A:

Xmx的值(堆最大值)- Xmn的值(新生代内存)

Q:用于配置线程栈内存的是()?替代的还有哪个参数?

A:

-Xss。另一个是-XX:ThreadStackSize

-Xss指 -X stack size

有下面3个和gc相关的参数

-Xnoclassgc -Xincgc -Xloggc:file

回答以下问题:

Q:

可用于关闭针对类对象的gc功能的是()

可用于减少gc的程序停顿时间的是()

用于输出gc相关日志的是()

A:

可用于关闭针对类对象的gc功能的是(-Xnoclassgc)

可用于减少gc的程序停顿时间的是(-Xincgc)

用于输出gc相关日志的是(-Xloggc:file)

Q:-verbose 一般是用于什么的?

A:

查询gc问题。

  •  -verbose:class 输出jvm载入类的相关信息,当jvm报告说找不到类或者类冲突时可此进行诊断。

  •  -verbose:gc 输出每次GC的相关情况,后面会有更详细的介绍。

  •  -verbose:jni 输出native方法调用的相关情况,一般用于诊断jni调用错误信息。

Q: -XX:PermSize和-XX:MaxPermSize设置的是什么内存?

A:

方法区的内存。就是最开始那个图里的这个

如何理解Java垃圾回收

通过配置-XX:PermSize以及-XX:MaxPermSize来控制这块内存的大小,jvm在启动的时候会根据-XX:PermSize初始化分配一块连续的内存块,这样的话,如果-XX:PermSize设置过大,可能会很浪费。而Max如果设置小了,可能会omm。

Q:-XX:MetaspaceSize和-XX:MaxMetaspaceSize又是什么内存?

A:

元数据区内存。java8引入的,用于替代上面的perm区。

无论-XX:MetaspaceSize和-XX:MaxMetaspaceSize两个参数如何设置,随着类加载越来越多不断扩容调整,直到MetaspaceSize(如果没有配置就是默认20.8m)触发FGC,上限是-XX:MaxMetaspaceSize,默认是几乎无穷大

到此,关于“如何理解Java垃圾回收”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注亿速云网站,小编会继续努力为大家带来更多实用的文章!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI