You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by ah...@apache.org on 2019/06/06 08:00:15 UTC

[commons-rng] 02/11: RNG-75: Limit use of the synchronized method when creating array seeds.

This is an automated email from the ASF dual-hosted git repository.

aherbert pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-rng.git

commit 190922b427e586e6e6a977ed292a914760cbc8bd
Author: Alex Herbert <ah...@apache.org>
AuthorDate: Wed May 29 22:01:55 2019 +0100

    RNG-75: Limit use of the synchronized method when creating array seeds.
---
 .../apache/commons/rng/simple/internal/ProviderBuilder.java    | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/ProviderBuilder.java b/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/ProviderBuilder.java
index 98c1c85..a3aa745 100644
--- a/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/ProviderBuilder.java
+++ b/commons-rng-simple/src/main/java/org/apache/commons/rng/simple/internal/ProviderBuilder.java
@@ -183,7 +183,9 @@ public final class ProviderBuilder {
         INT_ARRAY {
             @Override
             public Object createSeed(int size) {
-                return SeedFactory.createIntArray(size);
+                // Limit the number of calls to the synchronized method. The generator
+                // will support self-seeding.
+                return SeedFactory.createIntArray(Math.min(size, RANDOM_SEED_ARRAY_SIZE));
             }
             @Override
             protected int[] convert(Integer seed, int size) {
@@ -210,7 +212,9 @@ public final class ProviderBuilder {
         LONG_ARRAY {
             @Override
             public Object createSeed(int size) {
-                return SeedFactory.createLongArray(size);
+                // Limit the number of calls to the synchronized method. The generator
+                // will support self-seeding.
+                return SeedFactory.createLongArray(Math.min(size, RANDOM_SEED_ARRAY_SIZE));
             }
             @Override
             protected long[] convert(Integer seed, int size) {
@@ -234,6 +238,8 @@ public final class ProviderBuilder {
             }
         };
 
+        /** Maximum length of the seed array (for creating array seeds). */
+        private static final int RANDOM_SEED_ARRAY_SIZE = 128;
         /** Convert {@code Long} to {@code Integer}. */
         private static final Long2Int LONG_TO_INT = new Long2Int();
         /** Convert {@code Integer} to {@code Long}. */