Java JVM and GC

Java JVM and GC

类加载

方法区

内容:类信息和类静态变量,常量池

类信息:非常多

主要使用的类信息:1. 类型的字段信息 2. 类型的方法信息

Heap

Java的对象和数组申请的空间都是从Heap中分配的。(引用是在栈中)

所有的线程都是共享一个Heap的。

Stack

保存基本数据类型和自定义类型的引用。但是对于包装类型:Boolean,Long等存放于Heap中。

每一个线程都有自己的stack。

本地方法Stack

用于存储本地方法的局部变量表,和JVM stack功能类似

程序计数器

每一个线程都有独立的程序计数器

JVM 常量池

存在在方法区中,存储的是常量的引用

GC 内容

Young generation

新生代空间较小,被分为3个区域:Eden,From,To三个区域。

创建的对象在Eden区,Eden区域GC后存活对象存放在幸存者空间(存放在同一个幸存者区间);当一个幸存者空间饱和,还存活的幸存者会被移动到另一个幸存者空间,然后清零另一个幸存者空间。如果被一定多次的对象,就会被移动到老年代。

这里发生的GC 为Minor GC。

Old generation

大部分内容都是由于新生代移动过来的。

这里发生的GC为Major GC或者Full GC。

Permanent generation

方法区,保存常量和字符串常量。

GC 算法

根搜索算法:

类似一个图遍历,能够从root遍历到的节点就是不会被GC。

标记清除算法:

扫描,存活对象进行标记,不存活对象进行清理。

会造成内存的碎片化。

复制算法

两个空间:活动区间 or 空闲区间

把存活对应复制到空间区间中。一次性回收所有的活动区间中的内容。

标记-整理算法

类似于标记-清除,只是在清除不存活的对象以后,把存活对象进行移动,从而使得内存碎片化降低。

算法的使用

一般新生带使用 复制算法,老生带一般使用 标记-整理算法。

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 这篇文章是我之前翻阅了不少的书籍以及从网络上收集的一些资料的整理,因此不免有一些不准确的地方,同时不同JDK版本的...
    高广超阅读 15,934评论 3 83
  • 原文阅读 前言 这段时间懈怠了,罪过! 最近看到有同事也开始用上了微信公众号写博客了,挺好的~给他们点赞,这博客我...
    码农戏码阅读 11,223评论 2 31
  • JVM架构 当一个程序启动之前,它的class会被类装载器装入方法区(Permanent区),执行引擎读取方法区的...
    cocohaifang阅读 5,669评论 0 7
  • Java 虚拟机(Java virtual machine,JVM)是运行 Java 程序必不可少的机制。JVM实...
    Rick617阅读 4,392评论 0 0
  • 1.什么是垃圾回收? 垃圾回收(Garbage Collection)是Java虚拟机(JVM)垃圾回收器提供...
    简欲明心阅读 90,171评论 17 311

友情链接更多精彩内容