原文 Java 堆内存被划分为新生代和老年代两部分,因此 JVM 通常采用分代回收算法。新生代主要使用复制和标记-清除垃圾回收算法 ,老年代主要使用标记-整理垃圾回收算法。JVM 中针对新生代和年老代分别提供了多种不同的垃圾收集器。 根据线程特点,可以将收集器分为三类: 串行收集器:Serial 收 ...
分类:
其他好文 时间:
2020-05-15 10:05:25
阅读次数:
70
1|0如何确定垃圾 想要回收垃圾,必须得先知道,哪些对象可以被认定为垃圾。关于垃圾确定方式,主要有两种,分别是引用计数法与可访问性分析法,其原理分别如下: 1|1引用计数法 在 Java 中,引用与对象相关联,如果要操作对象,则必须使用引用。因此,可以通过引用计数来确定对象是否可以回收。实现原则是, ...
分类:
编程语言 时间:
2020-05-15 09:25:26
阅读次数:
85
GC垃圾收集算法 堆空间 分代: 年轻代: Eden区: 对象创建的区域: gc最频繁,99%的对象都是在这里创建和销毁的,经过一次youngGC,Eden区基本就空了 Survival区: from: 经过一次youngGC,Eden和to区还存活的对象放入from区, from和to区角色互换 ...
分类:
编程语言 时间:
2020-05-14 19:39:29
阅读次数:
73
(本文中的全部观点,仅代表个人观点)主线程、用户线程、守护线程的区分:主线程:一个进程只有一个主线程(Main),其他都是子线程。(重点:个人认为主线程也是用户线程!!!)用户线程:非守护线程(这个解释有点......废话)守护线程:与系统,程序共存亡的线程就是守护线程。最常见的就是GC垃圾回收器。... ...
分类:
编程语言 时间:
2020-05-14 15:46:12
阅读次数:
65
1:复制算法 将内存平均分为两份:A和B。当A部分内存使用完了,将A部分内存中还在使用的对象copy到B部分内存中,然后清空A部分内存。以此类推... 这种算法缺点是内存利用率只用50%;2:标记-清除算法 先标记所有要回收的对象,然后在清除所有标记好的对象;这种算法的缺点是会有大量的不连续内存碎片... ...
分类:
编程语言 时间:
2020-05-14 15:07:30
阅读次数:
56
垃圾回收算法: 标记-清除法:当发现需要回收的内容时,标记并直接清除。 缺点:需要遍历全堆,复杂度高,并且会带来内存碎片等问题 标记-整理法:将不需要回收的内容标记并整理到一起,然后清除剩下的部分 优缺点:没有内存碎片问题;但是如果存活的多,会产生多次搬运,降低效率。 复制法:将内存分两块,每次将存 ...
分类:
其他好文 时间:
2020-05-14 11:05:38
阅读次数:
63
1.内存的增长主要在binary上 1.binary有两处存储位置 --1. size <= 64 字节(bytes)时,存储在进程的单独heap中,bianry叫做Heap-binary。 --2. size > 64 字节(bytes)时,存储在虚拟机分配出来的单独heap中,bianry叫做R ...
分类:
其他好文 时间:
2020-05-14 10:48:28
阅读次数:
76
文章链接:https://www.jianshu.com/p/1e375fb40506 Garbage collection(GC) 现在的高级语言如java,c#等,都采用了垃圾收集机制,而不再是c,c++里用户自己管理维护内存的方式。自己管理内存极其自由,可以任意申请内存,但如同一把双刃剑,为大 ...
分类:
编程语言 时间:
2020-05-12 21:59:35
阅读次数:
101
Java8新特性 https://blog.csdn.net/sanri1993/article/details/101176712 jdk1.7和1.8的区别: 添加了红黑树,增加查询效率 gc算法(垃圾回收算法) https://www.jianshu.com/p/3fc4450e1bbd st ...
分类:
编程语言 时间:
2020-05-12 13:58:05
阅读次数:
69
0、如果想要实现一门语言的内存管理,该怎么设计? 1.内存池:向系统申请大块内存,然后进行管理和分配(管理内存分配)。 2.垃圾回收:当分配的内存使用完之后,不直接归还给系统,而是归还给内存池,方便进行下一次复用。至于垃圾回收选择标记回收,还是分代回收算法应该符合语言设计初衷。 3.大小切分:使用单 ...
分类:
编程语言 时间:
2020-05-08 20:12:18
阅读次数:
102