Forwarded from dnaugsuz
Dalvik 不清楚,反正 HotSpot 什么的所有 GC 都是纯正的 tracing 算法,循环引用不会泄漏内存
JDK 的 WeakReference 是为了应付应用的特殊情况的,比如说
JDK 的 WeakReference 是为了应付应用的特殊情况的,比如说
static 的(perm)拿来存 instance 级别的东西,就可以用 WeakReferenceForwarded from dnaugsuz
真阴性…… 我还以为这个裙讨论话题突然变『学术』了呢…… (跑
这里有啥意味呢?是指对象真的可回收?
这里有啥意味呢?是指对象真的可回收?
Forwarded from dnaugsuz
别人说 Python 也是 Rc,然后有个专门的什么内存模块还可以解决循环引用的问题,PHP 上循环引用好像是等满了再扫描的(之前都是 refcount)
Forwarded from dnaugsuz
复制一般要求更大的堆…… 反正我也没写过 GC 就是了。
Ruby MRI 之前是用空闲链表,然后扫描算法比 Lua 简单一点(Lua 是三色实际上四色,Black/Gray/两种 White,White 是垃圾),还不是最开始 Lisp 的那一套,就是 BFS 啦。
后来我听说有什么半空间算法什么伊甸堆…… (弱代假说)
复制主要还是类似磁盘碎片整理一样整齐化内存使用(也可以很好的提升性能和缩减总体内存使用),缺点是比较慢(所以不能用来做终生代和永久代的收集,当然我不知道永久代是怎么回事,成熟代也可以用),实现要更新引用也复杂,据说一些 GC 实现用的是对象 Handle,二重查找,所以不必麻烦地更新每个引用?
如果不能理解内存里放的内容,就无法正常复制移动其中的对象了,就是说以前的 ExactVM,知道哪里是针对要移动对象的引用,可以更新句柄
GC 是很复杂的东西,至少说可调节的参数很多吧…… 何况现在还有什么 C4 什么 G1 的…… 我连 Serial, Parallel, CMS 都搞不懂
这时候我想想,我不就是个应用编程的吗?我想这么多干什么……
Ruby MRI 之前是用空闲链表,然后扫描算法比 Lua 简单一点(Lua 是三色实际上四色,Black/Gray/两种 White,White 是垃圾),还不是最开始 Lisp 的那一套,就是 BFS 啦。
后来我听说有什么半空间算法什么伊甸堆…… (弱代假说)
复制主要还是类似磁盘碎片整理一样整齐化内存使用(也可以很好的提升性能和缩减总体内存使用),缺点是比较慢(所以不能用来做终生代和永久代的收集,当然我不知道永久代是怎么回事,成熟代也可以用),实现要更新引用也复杂,据说一些 GC 实现用的是对象 Handle,二重查找,所以不必麻烦地更新每个引用?
如果不能理解内存里放的内容,就无法正常复制移动其中的对象了,就是说以前的 ExactVM,知道哪里是针对要移动对象的引用,可以更新句柄
GC 是很复杂的东西,至少说可调节的参数很多吧…… 何况现在还有什么 C4 什么 G1 的…… 我连 Serial, Parallel, CMS 都搞不懂
这时候我想想,我不就是个应用编程的吗?我想这么多干什么……
Forwarded from dnaugsuz
我的天啊,这作者也真是牛
我之前一直以为 C++ 程序员什么都强,看啥都比 Java 程序员清楚,没想到居然有人沉迷 C++ 模型居然连当今 Java 的 GC 方案都弄错,难道是真的吗……
我之前一直以为 C++ 程序员什么都强,看啥都比 Java 程序员清楚,没想到居然有人沉迷 C++ 模型居然连当今 Java 的 GC 方案都弄错,难道是真的吗……
Forwarded from dnaugsuz
其实可以写成网格的形式,就会很直白,如果你用
takeUntilElem 和 takeUntilEqual 都可以定义出来一个实现(当然一定要用 DP 的话也不是不可以)Forwarded from dnaugsuz
missing 代表 xs 缺了东西,added 代表 ys 比 xs 多了的东西,填充这个网格,是从上到下从左到右的,不过理论上不应该访问第 n 列第 n-1 行之前的项目
我们知道在处理某一个项目时不可能是不看后继项目的,因为 abc, ac, aebc,他们一个是 delete, 一个是 insert, 可是第二项都不是 b 了,这就是说需要根据任何一个可能的后继项目来判断到底是删还是填,删了多少、填了什么
abcd, 删除 bc 变成 ad,如果我们只在处理 b 的时候看 c,肯定啥都找不到,最终会输出错误的结果,所以是说任何一个可能的后继都要找(最极端的情况是除了末尾的项目全都删了),不过也不一定很麻烦,因为我们可以用后继集合
所以这个算法其实就是一个大生成循环(只要 xs, ys 都还有下一项),然后只要接受到的项目不相同,就去找他们的某个共同后继 c,那 inserted / deleted 就很容易通过这个 c 算出来了
因为这个完全没有必要用 DP 写(它只『需要』填充 m=n 的格子……),所以就说不算是一个 DP 的问题……
我们知道在处理某一个项目时不可能是不看后继项目的,因为 abc, ac, aebc,他们一个是 delete, 一个是 insert, 可是第二项都不是 b 了,这就是说需要根据任何一个可能的后继项目来判断到底是删还是填,删了多少、填了什么
abcd, 删除 bc 变成 ad,如果我们只在处理 b 的时候看 c,肯定啥都找不到,最终会输出错误的结果,所以是说任何一个可能的后继都要找(最极端的情况是除了末尾的项目全都删了),不过也不一定很麻烦,因为我们可以用后继集合
所以这个算法其实就是一个大生成循环(只要 xs, ys 都还有下一项),然后只要接受到的项目不相同,就去找他们的某个共同后继 c,那 inserted / deleted 就很容易通过这个 c 算出来了
因为这个完全没有必要用 DP 写(它只『需要』填充 m=n 的格子……),所以就说不算是一个 DP 的问题……
Forwarded from dnaugsuz
就是那个支持『lookahead 1』的 Feeder 写得很不爽,总感觉是在贴代码
一共 166 行,好像没有 bug,有些逻辑不是很清楚,想必风格在 Java 程序员里还是很奇葩(我写了很多
基本上快用了三个小时……
一共 166 行,好像没有 bug,有些逻辑不是很清楚,想必风格在 Java 程序员里还是很奇葩(我写了很多
interface……)基本上快用了三个小时……
Forwarded from dnaugsuz
>>> Diff.diff(listOf(1,2), listOf(1,3,4))
1 (2) [3,4]
>>> Diff.diff("abc", "ac")
a (b) c
>>> Diff.diff("abc", "acd")
a (b) c [d]
Forwarded from 永久封存 | Yuuta 台 | 😷 #Pray4Wuhan (Yuuta ⠀)
https://t.iss.one/FuckU_GaoShangXuan/1079 儿子 / 生 / 性病母 / 倍感安慰
Telegram
Eric Chen's Public Channel
#今天有什么好笑的