- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
在执行 GC 时,JVM 会遍历 Activity 对象,并清除未标记的对象。
根据: How to Tune Java Garbage Collection
“Full GC的执行时间相对Minor GC要长一些”
会一直这样吗?
如果我们在老年代空间中有大约 100 个对象,并且伊甸园空间中 Activity 对象(创建和清理对象)的平均数量超过 100,这仍然正确吗?
此外,假设我们执行压缩阶段,那么一条经验法则是复制少量大尺寸对象比复制大量小尺寸对象获得更好的性能。
那么我在这里错过了什么?
最佳答案
"The execution time of Full GC is relatively longer than that of Minor GC"
是的。
当垃圾收集发生时,内存被分成代,即单独的池保存不同年龄的对象。几乎所有最常用的配置都使用两代,一组用于年轻对象(年轻一代),另一组用于旧对象(老一代)
不同的算法可用于在不同的世代中执行垃圾收集,每种算法都根据该特定世代的普遍观察到的特征进行优化。
分代垃圾回收利用以下观察结果,称为弱分代假设,关于用多种编程语言(包括 Java 编程语言)编写的应用程序:
大多数分配的对象都不会长时间被引用(被认为是存活的),也就是说,它们会早逝。
很少有从旧对象到新对象的引用。
年轻代收集发生的频率相对较高,效率高,速度快,因为年轻代空间通常很小,很可能包含很多不再被引用的对象。
在一定数量的新生代收集中幸存下来的对象最终会被提升或保留到老年代。
这一代通常大于年轻一代及其占用长得更慢。因此,年老代收集并不频繁,但需要更长的时间才能完成。
为年轻代选择的垃圾收集算法通常会优先考虑速度,因为年轻代收集很频繁。
另一方面,老年代通常由算法管理这更节省空间,因为老年代占用了大部分堆,而老年代算法必须在低垃圾密度下运行良好。
阅读此 white paper为了更好地理解。以上内容是从那里引用的。
关于java - 为什么老年代的 gc 比年轻代的 gc 花费的时间更长,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34670751/
我一直在读一本分配给类(class)的书,它提到数组访问需要 O(1) 时间。我意识到这非常快(也许尽可能快),但是如果您有一个循环必须多次引用它,那么分配一个临时变量以在数组中查找值有什么好处吗?或
我一直试图找出为什么这个查询花了这么长时间。以前,它的执行时间约为 150 毫秒到 200 毫秒,但现在需要 25 秒或更长时间。这是从昨晚到今天之间的事。唯一改变的就是将数据添加到表中。 根据下面的
我有一个 ng repeat 重复数据。 - data.image(src)部分为null,src=null的不再重复。 我用一个简单的 ng-if 解决了它。
我有一个包含大量测试的 Laravel 项目。我正在使用 pcov 来计算代码覆盖率,大约需要 4 分钟。但是 pcov 不支持分支覆盖,所以我决定使用 xdebug。 使用 xdebug 测试执行,
我已经被这个问题困扰了一段时间了,我被难住了。 Automapper 需要 4 秒来映射 19 个对象。在我的机器(24GB 内存,3.6Ghz i7)上,该操作应该花费毫秒或纳秒。 这是映射调用。
我有一个包含大量测试的 Laravel 项目。我正在使用 pcov 来计算代码覆盖率,大约需要 4 分钟。但是 pcov 不支持分支覆盖,所以我决定使用 xdebug。 使用 xdebug 测试执行,
我在机器 A 上有一个 java 进程通过 TCP 与机器 B 上的 Tomcat 通信。 TCP 连接(只是 syn-syn/ack 交换)始终需要 100 毫秒的数量级,而 ping 请求需要 1
我做了一项任务,从 sqlserver 获取超过 200 万条记录并将它们填充到 Asp.net GridView 中。 问题是,查询需要超过 2 分钟才能获得记录,而我的查询现在已经完全优化。 当我
我希望将 165 秒变成 2:40 而不是 0:2:45 函数需要能够适应秒值的大小。 我知道有无数种方法可以做到这一点,但我正在寻找一种干净的方法来做到这一点,除了 jQuery 之外没有任何外部库
我是一名优秀的程序员,十分优秀!