我需要随机调整以下数组:
int[] solutionArray = {1, 2, 3, 4, 5, 6, 6, 5, 4, 3, 2, 1};
Run Code Online (Sandbox Code Playgroud)
这有什么功能吗?
如Java博客文章Beware of System.nanoTime()中所述,在x86系统上,Java的System.nanoTime()使用CPU特定计数器返回时间值.现在考虑以下用于测量呼叫时间的情况:
long time1= System.nanoTime();
foo();
long time2 = System.nanoTime();
long timeSpent = time2-time1;
Run Code Online (Sandbox Code Playgroud)
现在在多核系统中,可能是在测量time1之后,线程被调度到不同的处理器,其计数器小于先前CPU的计数器.因此,我们可以得到time2中的值,该值小于 time1.因此,我们将在timeSpent中得到负值.
考虑到这种情况,是不是System.nanotime现在几乎没用?
我知道改变系统时间不会影响纳米时间.这不是我上面描述的问题.问题是每个CPU都会在打开后保留不同的计数器.与第一个CPU相比,第二个CPU上的计数器可以更低.由于在获取time1之后OS可以将线程调度到第二个CPU,因此timeSpent的值可能不正确甚至是负数.
http://java.sun.com/j2se/1.4.2/docs/api/java/lang/System.html#currentTimeMillis()说:
以毫秒为单位返回当前时间.请注意,虽然返回值的时间单位是毫秒,但值的粒度取决于底层操作系统,并且可能更大.例如,许多操作系统以几十毫秒为单位测量时间.
我不清楚我是否保证这段代码将始终打印不断增加(或相同)的数字.
while (1) {
System.out.println(System.currentTimeMillis() );
}
Run Code Online (Sandbox Code Playgroud) 似乎IEEE 754标准将16,777,214个32位浮点值定义为NaN,或所有可能值的0.4%.
我想知道保留这么多有用值的理由是什么,而基本上只需要2个:一个用于信令,一个用于安静的NaN.
对不起,如果这个问题很简单,我在互联网上找不到任何解释.
XX的默认值是什么:MaxDirectMemorySize?
出于某种原因,我常想,java.util.Random是线程安全的,一拉HashMap或BitSet,并且Math.random()被实现为包装访问Random与synchronized块,或ThreadLocalRandom.current().nextDouble().
实际上事实证明它java.util.Random是线程安全的(通过原子).因此需要注意的是:即使我需要在单个线程中使用一些随机输入,使用ThreadLocalRandom也是有意义的,因为内部没有原子读写,编译为锁定指令并发出内存屏障.
而且,由于Java 8 ThreadLocalRandom本质上是一个单例,它的状态保存在某些java.lang.Thread类的字段中.因此,方法ThreadLocalRandom.current()不是访问ThreadLocalMap,而只是静态字段读取,即非常便宜.
我有两个问题:
从计算机科学的角度来看,几个线性同余随机生成器(以ThreadLocalRandoms 的方式初始化)的输出是否与单个线性同余随机生成器(java.util.Random实例)的输出相同"随机" ?
如果回答的第一个问题是肯定的,是否有任何理由写的建设new Random()(不含种子)来代替ThreadLocalRandom.current(),永远不会消失?
更新.我应该调用像ThreadLocalRandom.current().ints().parallel().collect(...)可能是不正确的,因为线程的随机数生成器的状态可能中未初始化ForkJoinPool的工作线程,但看起来,ThreadLocalRandom覆盖方法ints(),longs()以及doubles(),使得上述结构正确.
我试图通过计算两个元素的每个和,相对于主对角线相反,优化每个元素的索引和的方形二维Java数组的填充.但是,代替加速或至少相当的性能,我的代码速度慢了23(!)倍.
我的代码:
@State(Scope.Benchmark)
@BenchmarkMode(Mode.AverageTime)
@OperationsPerInvocation(ArrayFill.N * ArrayFill.N)
@OutputTimeUnit(TimeUnit.NANOSECONDS)
public class ArrayFill {
public static final int N = 8189;
public int[][] g;
@Setup
public void setup() { g = new int[N][N]; }
@GenerateMicroBenchmark
public int simple(ArrayFill state) {
int[][] g = state.g;
for(int i = 0; i < g.length; i++) {
for(int j = 0; j < g[i].length; j++) {
g[i][j] = i + j;
}
}
return g[g.length - 1][g[g.length - 1].length - 1];
} …Run Code Online (Sandbox Code Playgroud) 文档说,
有时您想要在GHC的管道中准确控制INLINE编译指示何时打开.
我为什么要这个?(除非我也使用RULES编译指示,在这种情况下,我可能希望推迟函数的内联,以便触发相关规则.)只有在简化过程的特定阶段才能更好地内联哪些函数?
我正在制作许多索引类型为Bounded且索引范围为的数组(minBound, maxBound).对于这样的数组,边界检查应该是不必要的.我如何说服GHC消除边界检查?
我的特定应用程序使用盒装和非盒装不可变数组,但我对所有类型的Haskell数组感兴趣.
对于堆上和堆外分配.在堆上 - 在三个主要垃圾收集器的上下文中:CMS,Parallel Old和G1.
我所知道的(或者我认为我知道)到目前为止:
-XX:ObjectAlignmentInBytes.对于CMS,我发现的唯一相关信息是
自然旧的空间PLAB模仿索引自由列表空间的结构.每个线程预先分配一定数量的每个大小的块,低于257个堆字(从全局空间分配的大块).
来自http://blog.ragozin.info/2011/11/java-gc-hotspots-cms-promotion-buffers.html.据我所知,提到"全球空间"是主要的旧空间.
问题:
UPD.讨论主题:https://groups.google.com/forum/#!topic/mechanical-sympathy/ A- RImwuiFZE
java memory-management jvm-hotspot heap-fragmentation memory-fragmentation