java-内存管理

java-内存管理

一、jvm内存结构

程序计数器(Program Counter Register)、JVM虚拟机栈(JVM Stacks)、本地方法栈(Native Method Stacks)、堆(Heap)、方法区(Method Area)

(1)PCR

尾随线程生命周期,记录当前运行到的.class字节码行数,用于多线程操作

(2)JVM Stacks

尾随线程生命周期,在方法运行中存储数据

Java虚拟栈帧.bmp 

(3)Native Method Stacks

处理native方法,如object中的hashCodes()等

(4)Heap

存储全部实例对象和数组对象,内置GC

(5)Method Area

堆的组成部分,但不强制GC。存储的对象为执行时常量池、静态变量、JVM载入的类信息等


二、垃圾回收

堆和方法区须要进行垃圾回收,其它三个随线程生命周期创建销毁

垃圾判定算法

(1)引用计算器:对循环引用的对象无法回收

(2)根搜索:效率较低


垃圾清除算法

(1)标记、清除算法

  过程:内存紧张时,停止程序,遍历GC Root将可达的对象标记出可存活的对象,清除全部未使用的对象

  缺点:效率较低;清理出来的空暇内存不连续

(2)复制算法

  过程:将内存分成活动区间和空暇区间两块,新分配的内存在活动区间,内存紧张时进行GC,将活动区间中

            存活的对象,按顺序放入空暇区间

  缺点:浪费一半内存;对象存活率高时比較费复制操作

(3)标记、整理算法

  过程:类似(1)标记全部存活对象,又一次移动按内存顺序排列对象,将末端内存清除

  缺点:效率不高

(4)分代搜索算法

  过程:针对不同对象进行不同的回收算法。

  夭折对象(局部变量、暂时变量):复制算法(80%内存分配对象+10%活动区间+10%空暇区间)

  老不死对象(缓存对象、数据库连接对象、单例对象):标记、整理算法

  不灭对象(String池对象、class类信息):标记、整理算法

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/119267.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • PotPlayer的官网「建议收藏」

    PotPlayer的官网「建议收藏」访问PotPlayer的官网,需要先能访问到外面的网络。http://potplayer.tv/http://potplayer.daum.net/如果无法访问外面的网络,可以使用下面的阿里云盘链接阿里云盘分享

    2022年7月27日
    24
  • Java冒泡排序实现

    Java冒泡排序实现Java冒泡排序原理:依次比较相邻的两个书,将较大的数放右边思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第2个数和第3个数,将小数放前,大数放后,如此继续,直至比较最后两个数,将小数放前,大数放后。重复第一趟步骤,直至全部排序完成。冒泡排序的优点:每进行一趟排序,就会少比较一次,因为每进行一趟排序都会找出一个较大值。代码演示:…

    2022年7月8日
    21
  • centos强制删除非空文件夹

    centos强制删除非空文件夹命令详情: rm -rf /var/www/html 上面命令会强制删除html这个文件夹,即使是非空文件夹,也会删除,使用的时候要小心加谨慎,linux没有回收站,所以一定要谨慎操作。

    2022年5月20日
    41
  • .NET软件工程师网络在线培训就业课程「建议收藏」

    .NET软件工程师网络在线培训就业课程「建议收藏」.NET软件工程师网络在线培训就业课程课程讲师:北风.NET专职讲师团队 课程分类:套餐适合人群:高级课时数量:2000课时用到技术:MVC5,EF6,BootStrap,HTML5,JqueryMobile,VS,.NET,ASP.NET 北风团队精心打造的42个经典案例,囊括了企业常见项目开发90%的典型应用 1、典型登录

    2022年7月19日
    19
  • Class类 和 class对象(运行时的类型信息)

    Class类 和 class对象(运行时的类型信息)什么是类?可以理解为。class文件某种意义上来说,java有两种对象:实例对象和Class对象。每个类的运行时的类型信息就是用Class对象表示的。它包含了与类有关的信息。其实我们的实例对象就通过Class对象来创建的。Java使用Class对象执行其RTTI(运行时类型识别,Run-TimeTypeIdentification),多态是基于RTTI实现的每一个类都有一个Class对…

    2022年5月11日
    43
  • java获取当前日期是周几_根据日期获取当前周

    java获取当前日期是周几_根据日期获取当前周1、使用Calendar类 /**    *获取当前日期是星期几    *     *@paramdt    *@return当前日期是星期几    */   publicstaticStringgetWeekOfDate(Datedt){       String[]weekDays={“星期日”,”星期一”,”星期

    2025年9月17日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号