首页 > 其他分享 >JVM-垃圾回收

JVM-垃圾回收

时间:2023-12-01 23:35:32浏览次数:29  
标签:Java 虚拟机 回收 永久 GC 垃圾 JVM 方法 内存

虚拟机栈:

描述的是方法执行时的内存模型,是线程私有的,生命周期与线程相同,
每个方法被执行的同时会创建栈桢(下文会看到),主要保存执行方法时的局部变量表、操作数栈、
动态连接和方法返回地址等信息,方法执行时入栈,方法执行完出栈,出栈就相当于清空了数据,
入栈出栈的时机很明确,所以这块区域不需要进行 GC。


本地方法栈:

与虚拟机栈功能非常类似,主要区别在于虚拟机栈为虚拟机执行 Java 方法时服务,而本地方法栈为虚拟机执行本地方法时服务的。这块区域也不需要进行 GC。

程序计数器:

线程独有的, 可以把它看作是当前线程执行的字节码的行号指示器,比如如下字节码内容,在每个字节码`前面都有一个数字(行号),我们可以认为它就是程序计数器存储的内容程序计数器是唯一一个在 Java 虚拟机规范中没有规定任何 OOM 情况的区域,所以这块区域也不需要进行 GC。

本地内存:

1.线程共享区域,Java 8 中,本地内存,也是我们通常说的堆外内存,包含元空间和直接内存。
2.在 Java 8 之前有个永久代的概念,实际上指的是 HotSpot 虚拟机上的永久代,它用永久代实现了 JVM 规范定义的方法区功能,主要存储类的信息,常量,静态变量,即时编译器编译后代码等,这部分由于是在堆中实现的,受 GC 的管理,不过由于永久代有 -XX:MaxPermSize 的上限,所以如果动态生成类(将类信息放入永久代)或大量地执行。

3.String.intern (将字段串放入永久代中的常量区),很容易造成 OOM,有人说可以把永久代设置得足够大,但很难确定一个合适的大小,受类数量,常量数量的多少影响很大。所以在 Java 8 中就把方法区的实现移到了本地内存中的元空间中,这样方法区就不受 JVM 的控制了,也就不会进行 GC,也因此提升了性能(发生 GC 会发生 Stop The Word,造成性能受到一定影响,后文会提到),也就不存在由于永久代限制大小而导致的 OOM 异常了(假设总内存1G,JVM 被分配内存 100M, 理论上元空间可以分配 2G-100M = 1.9G,空间大小足够),也方便在元空间中统一管理。综上所述,在 Java 8 以后这一区域也不需要进行 GC。


堆:

前面几块数据区域都不进行 GC,那只剩下堆了,是的,这里是 GC 发生的区域!对象实例和数组都是在堆上分配的,GC 也主要对这两类数据进行回收,这块也是我们之后重点需要分析的区域。

标签:Java,虚拟机,回收,永久,GC,垃圾,JVM,方法,内存
From: https://www.cnblogs.com/nxjblog/p/17871082.html

相关文章

  • Java环境变量配置及报错java --version Error: could not open `D:\APP\Develop\JA
    C:\Users\Administrator>java--versionError:couldnotopen`D:\APP\Develop\JAVA\jre\lib\amd64\jvm.cfg'Java环境变量的配置控制面板→系统→高级系统设置→环境变量在下方系统变量中新建在下方系统变量中找到Path,双击打开,新建两个%JAVA_HOME%\bin%JAVA_HOME%\jre\b......
  • 垃圾收集器
    G1垃圾收集器遵循分代收集理论设计的,但其堆内存的布局与其他收集器有非常明显的差异:G1不再坚持固定大小以及固定数量的分代区域划分,而是把连续的Java堆划分为多个大小相等的独立区域(Region),每一个Region都可以根据需要,扮演新生代的Eden空间、Survivor空间,或者老年代空间。收集器能......
  • JVM内存模型
    JVM内存模型堆:新生代老年代常量池字符串常量池运行时常量池虚拟机栈:栈帧方法区:元空间本地方法栈:程序计数器:java内存结构(JMM内存模型)主内存:工作内存:java线程高速缓存操作变量时的规则:Java内存模型规定了所有的变量都存储在主内存线程的工作内存中保存了被该......
  • 查看JVM默认参数
    java-XX:+PrintFlagsFinal-version[Globalflags]uintxAdaptiveSizeDecrementScaleFactor=4{product}uintxAdaptiveSizeMajorGCDecayTimeScale=10{product}u......
  • 垃圾收集算法
    垃圾收集算法在Java内存运行时区域中,堆和方法区有着显著的不确定性:接口的多个实现类需要的内存可能不同方法执行中不同条件需要的内存空间也不同这部分内存的分配和回收是动态的。两个问题,回收谁、怎么回收回收谁——可回收垃圾(算法)当对象没有被任何地方引用时,显然是可回......
  • 智慧垃圾分拣站:解决城市垃圾分类难题的创新科技
    随着城市化进程的不断加快,垃圾处理问题日益凸显。为了更好地解决垃圾分类问题,越来越多的城市开始推广智慧垃圾分拣站,利用创新科技实现高效垃圾分类处理。 山海鲸使用三维建模技术,建立了一个智慧垃圾分拣站数字孪生模型,它是一种新型的垃圾分类处理设备,可以通过智能化的方式,对垃......
  • 2023-11-29 闲话 垃圾桶是这里吗
    算法竞赛学不了一点。刷点b站视频吧。纯纯当作水博客用,看再多哔哩哔哩也和研究怎么拍个照片让机器把力矩学了没有半毛钱关系是吧。昨天刷了一个参加IROS2022kyoto的分享。现在仍然有印象的几点是:advisor觉得他很social,问他有没有经验。他说大概可以先加入一些小团体......
  • 6、oracle授予普通用户dba权限以及回收
    oracle授予普通用户dba权限以及回收1、授予dba权限grantdbato普通用户;2、回收dba权限revokedbafrom普通用户;......
  • 智能垃圾桶丨悦享便捷生活
    垃圾桶是人们日常生活所必不可少的必需品,它让生活中所产生的垃圾有了一个正确的存放地方。随着生产技术的迅速发展,垃圾桶也得以更新换代。由最初的简单式的圆筒式垃圾桶,到现在出现的感应式垃圾桶、智能语音控制垃圾桶,垃圾桶也变得越来越智能,让人们切实感受到了科技的进步所带来的的......
  • JVM学习记录六(JVM调优实战案例)
    这几期的文章都通过学习黑马课程里老师的内容总结出来的,想看视频的伙伴可以上B站搜索《黑马程序员》一、内存溢出内存溢出的位置有三个,如图所示:思路:1.获取堆内存快照2.VisualVM分析dump文件3.通过查看对内信息的情况,定位内存溢出的问题4.找到代码,找到问题代码进行修复二、CPU飚高......