RFR: 8184765: Dynamically resize SystemDictionary

Doerr, Martin martin.doerr at sap.com
Mon Oct 30 16:01:01 UTC 2017


Hi Gerard,

I guess something like the following was meant.
(I assume overflow will not happen.)

Best regards,
Martin

int next_prime(int n) {
    if (n < 2) return 2;
    int p = (n+1)|1, d=3;
    while (d <= p/d) {
        if (p%d == 0) {
            p+=2; d=3;
        } else {
            d+=2;
        }
     }
    return p;
}

-----Original Message-----
From: hotspot-runtime-dev [mailto:hotspot-runtime-dev-bounces at openjdk.java.net] On Behalf Of Gerard Ziemski
Sent: Monday, October 30, 2017 4:52 PM
To: coleen.phillimore at oracle.com
Cc: hotspot-runtime-dev at openjdk.java.net
Subject: Re: RFR: 8184765: Dynamically resize SystemDictionary


> On Oct 30, 2017, at 10:36 AM, coleen.phillimore at oracle.com wrote:
> 
> 
> 
> On 10/30/17 11:24 AM, Gerard Ziemski wrote:
>> hi Coleen,
>> 
>> 
>>> On Oct 30, 2017, at 10:12 AM, coleen.phillimore at oracle.com wrote:
>>> 
>>> 
>>> Hi Gerard,
>>> 
>>> This looks great.  One small question:
>>> + // straight forward brute force
>>> + inline static int _next_prime(int n) {
>>> +   int p = n;
>>> +   for (int i = n; i < (n * n); i++) {
>>> +     if ((i % 2) != 0) {
>>> +       p = i;
>>> +       break;
>>> +     }
>>> +   }
>>> +   return p;
>>> + }
>>> 
>>> Is this how you calculate next prime?  Wouldn't you check if it can mod by 3 and 5 as well?
>> As long as it’s not even i.e. mod 2 (and strictly speaking larger than 1). 3 and 5 are prime, so no need to check them.
> 
> If you passed in 214 (2*107), 215 would look prime but it's not.   I think the prime table would be better and limit resizing occurrences.

Right, need something a bit more clever here. A precomputed prime table might be good enough, but let me see how complex (a correct) function has to be.


cheers


More information about the hotspot-runtime-dev mailing list