JVM 哪些内存区域需要GC?

(1)虚拟机栈:

        描述的是方法执行时的内存模型,是线程私有的,其生命周期与线程一致,方法执行时入栈,执行完出栈,所以这块区域不需要GC;

(2)本地方法栈:

        与虚拟机栈相似,主要区别在于虚拟机栈为虚拟机执行方法时服务,而本地方法栈为虚拟机执行本地方法时服务。这块区域也不需要GC;

(3)程序计数器:

        线程独有的,可以把它看成线程执行时的信号指示器。记录这些数字(指令地址)有啥用呢,我们知道 Java 虚拟机的多线程是通过线程轮流切换并分配处理器的时间来完成的,在任何一个时刻,一个处理器只会执行一个线程,如果这个线程被分配的时间片执行完了(线程被挂起),处理器会切换到另外一个线程执行,当下次轮到执行被挂起的线程(唤醒线程)时,怎么知道上次执行到哪了呢,通过记录在程序计数器中的行号指示器即可知道,所以程序计数器的主要作用是记录线程运行时的状态,方便线程被唤醒时能从上一次被挂起时的状态继续执行,需要注意的是,程序计数器是唯一一个在 Java 虚拟机规范中没有规定任何 OOM 情况的区域,所以这块区域也不需要进行 GC;

​​​​​​​

(4)永久代:

java8之前的概念实际上指的是HotSpot虚拟机上的永久代,它用永久代实现了JVM规范定义的方法区功能,只要储存类的信息、常量、静态变量、即时编译器编译后的代码等,这部分由于是在堆中实现,受GC的管理,不过由于永久代有 -XX:MaxPermSize的上限,所以如果动态生成类(将信息放入永久代)或大量执行String.intern(将字符串放入永久代的常量区),很容易造成OOM,有人说可以把永久代设置足够大,但很难确定一个合适的大小,受类数量、常量数量的大小的影响很大。java8之前的永久代是需要进行GC的。

(5)本地内存:

线程共享区域,在java8中,本地内存也就是我们常说的堆外内存,包含元空间和直接内存,java8这一区域不需要GC,原因的是什么呢?java8取消永久代,将方法区移到了本地内存中的元空间中,这样方法区就不受JVM控制了,也不会进行GC,也因此提升了性能(发生GC会发生Stop The Word,性能会受到一定影响,后文会提到),也就不存在由于永久代限制大小而导致的OOM异常了(加上总内存1G,JVM被分配内存100M,理论上元空间可以分配1.9G空间大小足够),也方便在元空间中统一管理。综上,不需要GC;

(6)堆:

对象实例和数组都是在堆上分配的,GC也主要对着两类数据进行回收。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JVM 调优是保证 Java 应用程序高性能运行的关键之一。以下是一些 JVM 调优的注意事项: 1. 观察 JVM 运行状态:使用 JVM 监控工具,例如 jstat、jconsole、jvisualvm 等,观察 JVM 的运行状态,包括内存使用情况、CPU 占用率、线程数等指标,以便及时发现问题并进行调整。 2. 调整堆内存大小:堆内存是 Java 程序最重要的内存区域需要根据实际情况进行调整。一般情况下,可以通过设置 JVM 参数 -Xms 和 -Xmx 来调整初始堆大小和最大堆大小。 3. 选择合适的垃圾回收器:JVM 支持多种垃圾回收器,例如 Serial、Parallel、CMS、G1 等。不同的垃圾回收器具有不同的优缺点,需要根据实际情况进行选择。 4. 避免频繁 Full GC:Full GC 是一种比较耗时的垃圾回收操作,一般情况下应该尽量避免频繁触发。可以通过调整垃圾回收器的参数、优化代码实现等方式来避免频繁 Full GC。 5. 合理使用线程:线程是 Java 程序中的重要资源,需要根据实际情况进行合理的使用。过多的线程占用过多的内存和 CPU 资源,导致程序性能下降,甚至引起死锁等问题。 6. 避免内存泄漏:内存泄漏是 Java 程序中常见的问题,占用大量内存空间导致程序性能下降。需要及时发现并修复内存泄漏问题,例如使用工具进行内存泄漏检测、优化代码实现等方式。 7. 充分利用硬件资源:JVM 调优不仅仅是针对软件层面的优化,还需要充分利用硬件资源,例如使用 SSD 硬盘、增加 CPU 核数等方式来提高程序性能。 需要注意的是,JVM 调优是一个复杂的过程,需要根据具体的应用场景进行调整。同时,JVM 调优也需要进行充分测试和评估,以确保调整后的 JVM 能够稳定运行并提高程序性能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值