Java基础随笔

1.关于gc

原文:详细了解gc可以看看这篇文章

1.java JVM将堆区分代成新生代,年老代,永久代三部分:

新生代中分为一个E区,两个S区。新创建的对象会被分配到E区。每个对象身上会有一个年龄一开始为0。当E区内存不足时会进行一次minor gc,剩下的对象会被复制到其中的一个S区。同时每个对象年龄+1,垃圾对象会被清除。等到E区内存再次不足时再次进行minor gc。E区剩下的对象和其中一个S区的对象会被复制到另一个S区中并且所有对象年龄+1。同时清除E区中的垃圾对象。当S区中对象达到一定年龄,对象会被复制到年老代中。年老代中的内存不足时会进行full gc清除垃圾对象释放空间。永久代中主要是存放类的class文件,静态变量,字符串这类数据。

2.gc算法有标记-清除算法,标记-压缩算法,复制算法:

标记过程指gc通过遍历内存对哪些数据在使用,哪些数据没有在使用会做标记。

清除过程会将标记没有在使用的对象回收,同时会将清除对象后空闲空间维护成一个链表,以便再次新建对象时使用。

压缩指对象被清除后内存中会产生许多大的内存碎片,对象与对象之间的地址不连续。如果再次插入对象时进行空闲空间链表的遍历,然后插入到内存中很费时。所以会将内存区的对象全部移动到内存区的头部。把琐碎的内存碎片整理成一个大的内存块。这样在下次新建对象,分配内存时提高效率。

3.为什么要采用分带回收?

因为根据经验所谈,新创建的对象可能会很快的被回收,如果不分带,就需要经常进行gc。分带以后将存活时间短的对象和存活时间长的对象进行分开。存活时间短的对象经常进行gc,存活时间长的对象gc慢一些。提高gc效率。

2.类的生命周期(简述)

一个类文件的生命周期分为 编译-加载-链接-初始化-销毁

编译阶段:.java文件编译成.class文件。

加载阶段:.class二进制字节码文件通过相应的classloader加载到jvm虚拟机内存中。

链接阶段:分为验证-准备-解析三个步骤。验证主要是验证类结构的合法性,语法语义词法,类的字节码文件是否合法,类与类的引用关系是否正确,比如A类中有B的引用,会检查是否存在B类。如果存在B类会先加载B类再加载A类。准备会为类中的静态变量分配内存,设置默认的静态变量。解析时会将类中的符号引用转化为具体的直接引用。

初始化阶段:为类的静态变量分配具体的值。

销毁阶段:类被加载到JVM内存中基本上不会被销毁了,它会随着JVM的停止而释放内存。

3.JDK与JRE

链接:一篇关于jdk和jre讲的很好的文章

jdk是java开发环境,jdk中包括jre(java运行环境,jre中包括jvm和java核心类库)、java工具(像是java和javac命令)、java标准类库(rt.jar)。如果你只安装了jre那么恭喜你可以在电脑上运行java程序,如果你安装了jdk那么既可以开发java程序进行编译也可以将程序运行在你的电脑上。

不定时更新中..

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值