问题标签 [escape-analysis]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - 在 JVM 上启用逃逸分析的经验
我刚刚尝试了在jdk6-u18-XX:+DoEscapeAnalysis
VM(在 solaris 上)上启用的选项,但体验相当令人失望。我正在运行一个 scala 应用程序,它有很多演员(其中 20,000 个)。这是制造垃圾的秘诀!
通常,应用程序可以在 256Mb 的堆上运行,但会产生大量垃圾。在其稳定状态下:
- 在 GC 上花费 10% 的时间
- 在 <30 秒内生成 >150Mb 的垃圾,然后被 GC 处理
我认为逃逸分析可能会有所帮助,因此我启用了该选项并重新运行了该应用程序。我发现该应用程序越来越无法清除它收集的垃圾,直到它似乎最终将整个时间都花在了GC 上,并且该应用程序在其全部分配时“扁平化”了。
在这一点上,我应该说该应用程序没有抛出OutOfMemoryError
我所期望的。也许JConsole
(我用来执行分析)没有正确显示带有此选项的 GC 统计信息(我不相信)?
然后我删除了该选项并重新启动,应用程序再次变得“正常”!有人知道会发生什么吗?
java - 带有转义分析的静态java字节码优化器(如proguard)?
基于逃逸分析的优化是 Proguard 的一项计划功能。同时,是否有任何现有的工具,如 proguard,已经进行了需要逃逸分析的优化?
c# - .NET CLR VM 中的逃逸分析
CLR 编译器/JIT 是否执行了任何转义分析?例如,在 Java 中,循环变量和分配在循环中的对象似乎不会转义循环被分配在堆栈上而不是堆上(请参阅Java 中的转义分析)。
为了澄清,在下面的示例中,编译器是否会优化堆分配,foo
因为它永远不会逃脱循环。
java - 使用 Java 7 进行逃逸分析/堆栈分配的资格
我正在 Java 7 中使用逃逸分析进行一些测试,以便更好地了解哪些对象有资格进行堆栈分配。
这是我为测试堆栈分配而编写的代码:
这是它在 Linux 上使用 Java 7 输出的内容
我正在使用 GC 日志来了解是否在堆栈上分配了对象(来自Java 中的 Escape 分析的想法),这可能不是 100% 可靠,但似乎给出了很好的提示。
根据输出,堆栈分配适用于 test1、test3、test4 和 test6,不适用于 test2 和 test5。我不明白为什么这不适用于 for 循环中的迭代器,尽管它可以工作
- 在 for 循环外有一个迭代器(参见 test4),
- 在 for 循环中使用另一个对象(参见 test6)。
我已经阅读了ArrayList 迭代器的代码,但我不明白为什么它不符合测试 2 和 5 中的堆栈分配条件,因为它既不转义当前方法也不转义当前线程。
任何的想法?
android - android dalvik vm 是否使用逃逸分析优化?
关于 dalvik 逃逸分析的任何想法?或者何时以及是否计划添加?
我认为逃逸分析是 GC 语言中非常重要的特性,以避免每次调用方法时都产生对象,目前我在类中预分配一个对象并在方法开始时将其重置,所以我避免分配(我正在写android 的 3D 游戏......在 java 中),但我发现这种方法很丑陋,并且内存被预分配的对象占用。
java - Java 7 逃逸分析不起作用
对于下面给出的代码,我看到了很多 GC 活动。据我了解,这是适合 EA 的场景。为什么 EA 无效。DummyObject 内部没有分配任何内容。使用的 JVM 选项:-server、-verbosegc。
c - C 变量的 CLANG/LLVM Escape 分析
我想使用 clang 进行逃逸分析。我的代码所做的是解析 C 代码并提取所有变量语句等。有没有一种简单的方法来找出我的局部变量是否逃逸?还是我必须全部手动完成?
java - profiling the jvm where most garbage is generated and what type it has, escape analysis optimization
I know that my program invokes the gc in regular intelvals, but I would like to analyse only the generated garbage. I want to know which classes are most frequently abandoned, and much more important, where are those instances created. Generally I want to optimize for escape analysis to reduce the garbage collection to a minimum.
Edit: I am not interested in live objects.
java - 为什么跟随数组放在堆而不是Java中的堆栈
我最近了解到对象可以放置在堆栈上或堆上,并且放置位置由逃逸分析确定。(声明包含 64 个元素的多个数组比声明包含 65 个元素的数组快 1000 倍)
在下面的例子中,我认为对象“test”被放置在堆上,使得运行时间更长:
如果删除了 while 循环或“test[0] = 10;” 声明,对象测试被放置在堆栈上(我从在这种情况下没有调用垃圾收集器的事实得出这一点,而当两者都存在时。运行时间是 350 毫秒而不是 6803 毫秒)。
我的问题是,如果我在 while 循环之后更改/访问对象的内容,为什么将对象测试放在堆上?