- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我刚刚阅读了 Java 杂志文章 Loop Unrolling .作者在那里演示了简单的 for
带有 int
的循环计数器是用循环展开优化编译的:
private long intStride1()
{
long sum = 0;
for (int i = 0; i < MAX; i += 1)
{
sum += data[i];
}
return sum;
}
然而,他们随后表明,通过将计数器类型切换为
long
,一切都会发生变化。 :
private long longStride1()
{
long sum = 0;
for (long l = 0; l < MAX; l++)
{
sum += data[(int) l];
}
return sum;
}
这会通过以下方式更改输出程序集:
long
执行循环展开柜台?为什么第二种情况需要安全点,而第一种情况不需要?
最佳答案
从 JDK 16 开始,HotSpot JVM 支持循环展开和对具有 64 位计数器的循环进行其他优化。
JDK-8223051的说明回答您的两个问题:
Many core loop transformations apply to counted loops, which are thosewith a calculated trip count. Transformations include unrolling,iteration range splitting (array RCE), and strip mining (JDK-8186027).The optimizer performs many complicated pattern matches to detect andtransform counted loop.
Most or all of these pattern matches and transformations apply toloops with 32-bit control variables and arithmetic. This makes senseas long as bulk operations apply only to Java arrays, since thosearrays can only span a 31-bit index range. Newer APIs for largerblocks of bulk data will introduce 64-bit indexes, such as Panama'snative arrays and (possibly) range-expanded byte buffers. Under thehood, the Unsafe API routinely works with 64-bit addresses and addressarithmetic. Loops which work on such data structures naturally use64-bit values, either as direct Java longs, or as wrapped cursorstructure with incrementing long components (Panama pointers).
There needs to be a story for transforming such long-running loops.This RFE is a request for that story.
A complicating factor is that sometimes counted loops have nosafepoints, on the assumption that the largest possible iteration(across 32 bits of dynamic range) won't cause the JVM's safepointmechanism to malfunction due to a non-responsive thread stuck in sucha counted loop. This assumption is invalid in the 64-bit case.Luckily, we have a (relatively new) optimization which can addressthis problem, by strip-mining a single very long running loop into asequence (outer loop) of loops of with appropriately bounded tripcounts.
关于java - 为什么 Hotspot JIT 不为长计数器执行循环展开?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66699950/
我在leetcode上看到这段代码,是一道求众数的题,下面是题目描述: 给定一个大小为 n 的数组,找到多数元素。众数元素是出现次数超过 ⌊ n/2 ⌋ 次的元素。 你可以假设数组是非空的并且多数元素
每次在 JavaScript 中执行特定操作时,例如: $(function() { $('#typing').keyup(function () { switch($(this)
我一直在为网页设计一个计数器,但我一直被这个我无法解决的功能所困扰。 我有一个 4 个 div 的计数器,因为其中两个是小数字,另外两个是大数字,所以第一个运行得很快,我看不到它们的功能。 有人知道如
我已经在文档中进行了一些搜索,并在网上花了一段时间,但找不到解决方案!我希望警报告诉我单击 .thumb 时它处于each() 的哪一次迭代。 EG:有六个.thumb,我点击数字3,浏览器弹出3!
在 Handlebars 中,假设我有 names 的集合.我能怎么做 {{#each names}} {{position}} {{name}} {{/each}} 在哪里 {{position}}
这个问题在这里已经有了答案: Numbering rows within groups in a data frame (9 个回答) 4年前关闭。 我们如何在数据帧的每组中生成唯一的 ID 号?以下
我正在努力解决以下问题。我希望为给定的“一”序列创建一个计数器。例如,我有以下内容: 1 1 1 1 0 0 1 1 1 0 0 1 1 1 1 鉴于该序列,我希望为 1 的每个序列设置一个计数器直到
我正在努力解决以下问题。我希望为给定的“一”序列创建一个计数器。例如,我有以下内容: 1 1 1 1 0 0 1 1 1 0 0 1 1 1 1 鉴于该序列,我希望为 1 的每个序列设置一个计数器直到
我有一个jsfiddle here 这是一个简单的 JavaScript 函数,可以计算出设定的数字。 是否可以进行这种计数,但也保留一位小数 所以它算 1.1、1.2、1.3 等。 func
我正在构建一个计数器,当我按下鼠标时,它应该增加到 maxValue 并且减少不超过 0。我还可以选择将计数器重置为其初始值:0。另外,如果 maxValue 是偶数,它应该计数到该数字。但是,如果
所以我成功地为字母和单词构建了其他计数器,但现在我只能用这个来计算句子。我的代码如下,当我运行它时,它会返回很多错误消息: #include #include #include int main
Closed. This question is off-topic。它当前不接受答案。
我需要一个计数器,它会随着某些任务的完成而递增。我们只需要最后一小时的值,即窗口将移动而不是静态时间。 解决此问题的最佳方法是什么?我能想到的一种方法是拥有一个大小为 60 的数组,每分钟一个,并更新
我希望使用计数器来为我提供独特的引用系统。我想单击一个按钮,然后检查一个字段/文件中的最后一个数字,然后简单地向其添加 1,然后将其插入到屏幕上的字段中? 不确定执行此操作的最佳方法或具体如何执行此操
我有一个用 php 制作的表格,在该表格内我显示了数据库中的一些内容。我在每个 td 中创建了一个简单的按钮(类似于 Like),我希望每次点击它都会增加 1。这是带有按钮的行: echo "
如何将数据库中的值转换为可用于 if else 函数的 int 值? 例如:在我的数据库“armnumber = 3”中,如何在 if else 函数中使用它? 代码 string myConnect
我需要生成唯一的“ids”,问题是,它只能在 1 - 99999 之间。 “好”的是,它仅在与另一列组合时必须是唯一的。 我们有组,每个组都有自己的“group_id”,每个组都需要类似 unique
有这个简单的代码: UPDATE counter SET c= c +1 where id = 1; 并且它在开头的 c 字段中为 null 的情况下不起作用。它只有在已经输入了一些数字时才有效,也就
我正在尝试在 python 中构建一个具有闭包属性的计数器。以下工作中的代码: def generate_counter(): CNT = [0] def add_one():
我使用 CSS 来计算 HTML 文档中的部分: body {counter-reset: sect;} section:before { counter-increment: sect;
我是一名优秀的程序员,十分优秀!