Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mobile
Path: blob/master/test/hotspot/jtreg/vmTestbase/gc/gctests/gctest04/reqgen.java
41155 views
1
/*
2
* Copyright (c) 2002, 2018, Oracle and/or its affiliates. All rights reserved.
3
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4
*
5
* This code is free software; you can redistribute it and/or modify it
6
* under the terms of the GNU General Public License version 2 only, as
7
* published by the Free Software Foundation.
8
*
9
* This code is distributed in the hope that it will be useful, but WITHOUT
10
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
11
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
12
* version 2 for more details (a copy is included in the LICENSE file that
13
* accompanied this code).
14
*
15
* You should have received a copy of the GNU General Public License version
16
* 2 along with this work; if not, write to the Free Software Foundation,
17
* Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
18
*
19
* Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
20
* or visit www.oracle.com if you need additional information or have any
21
* questions.
22
*/
23
24
package gc.gctests.gctest04;
25
26
import nsk.share.test.*;
27
import nsk.share.gc.*;
28
29
//reqgen.java
30
31
/* stress testing
32
reqgen is a subtype of Thread which generates
33
request to allocate small objects ( 8 ~ 32k), short live time ( 5 ~ 10 ms)
34
reqdisp is a subtype of Thread which dispatches request
35
and create a livethread object to allocate the requested memory
36
and simulate its life time.
37
*/
38
39
class bufreq
40
{
41
int bufsz; // memory size
42
int life; // live time of the object
43
bufreq next;
44
45
bufreq(int bufsz, int t)
46
{
47
this.bufsz = bufsz;
48
this.life = t;
49
this.next = null;
50
}
51
52
public void setnext(bufreq b)
53
{
54
next = b;
55
}
56
57
public bufreq getnext()
58
{
59
return next;
60
}
61
62
public int getsize()
63
{
64
return bufsz;
65
}
66
67
public int livetime()
68
{
69
return life;
70
}
71
}
72
73
class queue
74
{
75
bufreq head;
76
bufreq tail;
77
int limit;
78
int count;
79
80
queue(int newLimit)
81
{
82
head = null;
83
tail = null;
84
limit = newLimit;
85
count = 0;
86
}
87
88
public boolean okToContinue()
89
{
90
return (count < limit);
91
}
92
93
public synchronized void append(bufreq b)
94
{
95
count++;
96
if ( tail == null ) // head must be null too
97
{
98
head = tail = b;
99
return;
100
}
101
tail.setnext(b);
102
tail = b;
103
}
104
105
public synchronized bufreq remove()
106
{
107
if ( head == null ) return null;
108
bufreq buf = head;
109
head = head.getnext();
110
if ( head == null ) // only one element in the queue
111
{
112
tail = head = null;
113
}
114
return buf;
115
}
116
}
117
118
class reqgen extends Thread {
119
queue req;
120
int maxsz;
121
int minsz;
122
int maxlive;
123
int minlive;
124
int amda;
125
126
reqgen(queue req, int t)
127
{
128
this.req = req;
129
amda = t;
130
}
131
132
public void setsize(int s1, int s2)
133
{
134
maxsz = s2;
135
minsz = s1;
136
}
137
138
public void setlive(int t1, int t2)
139
{
140
maxlive = t2;
141
minlive = t1;
142
}
143
144
public void run()
145
{
146
bufreq buf;
147
int sz;
148
int t;
149
150
sz = minsz;
151
t = minlive;
152
while ( req.okToContinue() )
153
{
154
buf = new bufreq(sz, t);
155
156
sz = ( 2*sz);
157
158
if ( sz > maxsz)
159
{
160
sz = minsz;
161
}
162
163
t = ( 2 * t );
164
if ( t > maxlive)
165
{
166
t = minlive;
167
}
168
169
req.append(buf);
170
171
try
172
{
173
sleep(amda);
174
}
175
catch(InterruptedException e) {}
176
}
177
}
178
179
public bufreq nextreq()
180
{
181
return req.remove();
182
}
183
184
}
185
186
// buffer request dispatcher and allocator
187
class reqdisp extends Thread {
188
queue req;
189
190
reqdisp(queue q )
191
{
192
req = q;
193
}
194
195
public void run()
196
{
197
bufreq r;
198
livethread lt;
199
200
while ( req.okToContinue() )
201
{
202
r = req.remove();
203
if ( r != null )
204
{
205
lt = new livethread(r);
206
lt.start();
207
}
208
// simulate the interarrival time
209
try
210
{
211
sleep((int)(LocalRandom.random() * 20));
212
}
213
catch (InterruptedException e) {}
214
}
215
}
216
217
218
}
219
220
class livethread extends Thread {
221
bufreq req;
222
223
livethread(bufreq r)
224
{
225
req = r;
226
}
227
228
public void run()
229
{
230
int buf[];
231
232
buf = new int[req.getsize()];
233
234
// simulate the life time of the created object
235
// if live time is 0, that means forever
236
if ( req.livetime() == 0 )
237
{
238
while ( true )
239
{
240
try
241
{
242
sleep(10000);
243
}
244
catch (InterruptedException e) {}
245
}
246
}
247
else
248
{
249
try
250
{
251
sleep(req.livetime());
252
}
253
catch (InterruptedException e) {}
254
255
}
256
// live object is outdated, should be GC'ed
257
}
258
}
259
260