JVM内存模型和GC算法

方法区:

(线程共有)
虚拟机加载的类型信息,静态变量、常量、类信息、运行时的常量池
static ,final,Class,常量池
可理解为堆的一部分,永久代和元空间都是方法区的实现,就像类和接口

程序计数器:

一个指针(线程私有)
为了让每个线程正常工作就提出了程序计数器(Programe Counter Register),每个线程都有自己的程序计数器这样当线程执行切换的时候就可以在上次执行的基础上继续执行,仅仅从一条线程线性执行的角度而言,代码是一条一条的往下执行的,这个时候就是程序计数器;JVM就是通过读取程序计数器的值来决定下一条需要执行的字节码指令,进而进行选择语句、循环、异常处理等;

栈:

栈帧(局部变量表,操作数栈,动态链接,方法出口等)
基本数据值、对对象的引用和方法的位置(引用)
new 一个对象就是在栈中添加一个引用,再再堆里面实例一个对象,然后让引用指向那个对象(线程私有)

本地方法栈(线程私有)

堆:

(线程公有)
实例变量,类,方法,常量
新生代:伊甸园区(new出来的对象),幸存区0区,幸存区1区 采用复制算法
老年代:养老区 标记-整理-清除算法
永久区:常驻内存,存放JDK自身携带的class对象。interface元数据,java运行时的环境或类信息,这个区域不存在垃圾回收,关闭虚拟机时释放内存
jdk1.6前:新生代,常量池在方法区
jdk1.7: 永久代逐渐退化,去永久代,常量池在堆中
jdk1.8后:无永久代,常量池在元空间

GC算法

判断对象是不是垃圾:
引用计数法:有对象引用加一,无对象引用减一,为0时回收,较难处理循环引用
可达性分析法:维护了一个对象引用树,在判断垃圾时,从GC根节点开始遍历,如果一个对象不在这个可达性树中,则这个对象为垃圾,
复制算法:伊甸园区和幸存者区大小为8:1:1,也就是新生代中有百分之九十的区域可用,用于新生代,伊甸园区满了进行一次GC,将活着的复制到from区,再次GC时则扫描伊甸园区和from区,将活着的复制到to区,然后将伊甸园区和from区清空,from区和to区互换。复制之后有交换,谁空谁是to区,每次复制将对象年龄加一,当达到JVM参数设置的次数则进入老年代。无内存碎片,但是很浪费空间,有些大的对象复制起来比较耗时。
标记清除算法:标记出存活对象,清除要回收的对象。产生了大量的内存碎片。
标记整理算法:在标记清除的基础上,增加了压缩,将存活对象压缩到一端。无内存碎片但要付出移动对象的成本。
复制算法用于新生代,标记清除和标记整理用于老年代。
内存效率(时间复杂度) :复制算法 > 标记清除 > 标记压缩
内存整齐度 :复制算法 == 标记清除 > 标记压缩 > 标记清除

内存利用率:标记压缩 == 标记清除 > 复制算法

垃圾收集器

Serial收集器#

特点:

出现的最早的,发展最悠久的垃圾收集器。
单线程垃圾收集器。
主要针对新生代内存进行收集

运行机制如下所示

缺点:慢

用处:在客户端上运行还是比较有效。没有线程的开销,所以在客户端还是比较好用的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jvm内存模型和垃圾回收(GC)是Java程序中重要的概念。 Java虚拟机(JVM内存模型定义了Java程序中对象的分配和回收。它包括了堆、栈、方法区和程序计数器。Java内存模型(JMM)则用于规定多线程环境下的内存访问和操作顺序。 GC是垃圾收集器自动完成的过程,用于回收不再使用的对象,释放内存空间。JVM会根据系统环境和内存需求来决定何时进行GC。我们也可以通过调用System.gc()方法手动触发一次垃圾回收,但是具体的回收时机由JVM决定。需要注意的是,手动调用System.gc()方法并不推荐,因为它会消耗较多的资源。 垃圾收集器是实现垃圾回收的具体实现。它们采用不同的算法和策略来收集和回收垃圾对象。Java中有多种垃圾收集器可供选择,如Serial、Parallel、CMS(Concurrent Mark Sweep)和G1(Garbage-First)等。每个垃圾收集器都有不同的特点和适用场景,可以根据应用程序的需求进行选择和配置。 因此,JVM内存模型定义了对象的分配和回收方式,而垃圾回收器则是具体实现了垃圾回收的过程,根据不同的算法和策略来回收不再使用的对象。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [JVM内存模型与垃圾回收](https://blog.csdn.net/weixin_40980639/article/details/125934179)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值