Java知识点学习(第8天)

JVM中哪些是线程共享区

线程共享的:

  • 方法区:主要存储类的信息。
  • 堆:主要存储类所产生的各个对象。

线程独有的:

  • 虚拟机栈:存储某一个线程在执行过程中执行了哪些方法。一个栈有很多栈帧,每个栈帧就表示线程执行了哪些方法。
  • 程序计数器:每一个线程在执行方法的时候,程序计数器会告诉线程需要执行哪一行的代码。所以必然需要每个线程独有。
  • 本地方法栈:类似于虚拟机栈,区别是虚拟机栈执行Java方法服务,而本地方法栈执行Native方法服务。

项目如何排查JVM问题?

对于还在正常运行的系统

一个对象从加载到JVM,再到被GC清除,都经历了什么过程?

  1. 首先字节码文件(.class文件)内容加载到方法区。
  2. 然后再根据类信息在堆区创建对象。
  3. 对象首先会分配在堆区中年轻代的Eden区,经过一次Minor GC后,就会进入Suvivor区。在后续的每次Minor GC中,如果对象一直存活,就会在Suvivor区来回拷贝,每移动一次,年龄加1。
  4. 当年龄超过15后,对象依旧存活,对象就会进入老年代。
  5. 如果经过Full GC,被标记为垃圾对象,那么就会被GC线程清理掉。

怎么确定一个对象到底是不是垃圾?

  1. 引用计数算法:这种方法就是给堆内存中的每个对象记录一个引用个数。引用个数为0的就认为是垃圾。这是早期JDK中使用的方法。这种方法无法解决循环引用的问题(两个对象互相引用)。
  2. 可达性算法:这种方式在内存中,从根对象向下一直找引用,找到的对象就不是垃圾,没找到的对象就是垃圾。

JVM中有哪些垃圾回收算法?

​​​​

本文链接:https://my.lmcjl.com/post/4698.html

展开阅读全文

4 评论

留下您的评论.