/*
* Copyright ( C ) 2025 The Android Open Source Project
*
* Licensed under the Apache License , Version 2 . 0 ( the " License " ) ;
* you may not use this file except in compliance with the License .
* You may obtain a copy of the License at
*
* http : //www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing , software
* distributed under the License is distributed on an " AS IS " BASIS ,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND , either express or implied .
* See the License for the specific language governing permissions and
* limitations under the License .
*/
public class Main {
public static void main(String[] args) throws Exception {
System.loadLibrary(args[0 ]);
if (hasJit()) {
testStringGC();
}
System.out.println("Done" );
}
public static void testStringGC() throws Exception {
// Make sure we resolve the test string.
int h1 = useSomeString();
// JIT-compile the test method.
ensureJitCompiled(Main.class , "useSomeString" );
// Evict the test string from the dex cache.
clobberStringDexCache();
// Request GC twice and give it some time to complete.
Runtime.getRuntime().gc();
Thread .sleep(5000 );
Runtime.getRuntime().gc();
Thread .sleep(5000 );
// Try to use the test string again
int h2 = useSomeString();
if (h1 != h2) {
throw new Error();
}
}
public static int useSomeString() {
String s = "Some unique String for test 738." ;
return calculateHash(s);
}
public static int calculateHash(String s) {
int hash = 0 ;
for (int i = 0 , length = s.length(); i != length; ++i) {
hash = hash * 31 + s.charAt(i);
}
return hash;
}
public static Object[] clobberStringDexCache() {
// `DexCache` has up to 1024 entries.
// Clobber them by using 1024 strings that get consecutive string indexes.
return new Object[] {
"string0000" ,
"string0001" ,
"string0002" ,
"string0003" ,
"string0004" ,
"string0005" ,
"string0006" ,
"string0007" ,
"string0008" ,
"string0009" ,
"string0010" ,
"string0011" ,
"string0012" ,
"string0013" ,
"string0014" ,
"string0015" ,
"string0016" ,
"string0017" ,
"string0018" ,
"string0019" ,
"string0020" ,
"string0021" ,
"string0022" ,
"string0023" ,
"string0024" ,
"string0025" ,
"string0026" ,
"string0027" ,
"string0028" ,
"string0029" ,
"string0030" ,
"string0031" ,
"string0032" ,
"string0033" ,
"string0034" ,
"string0035" ,
"string0036" ,
"string0037" ,
"string0038" ,
"string0039" ,
"string0040" ,
"string0041" ,
"string0042" ,
"string0043" ,
"string0044" ,
"string0045" ,
"string0046" ,
"string0047" ,
"string0048" ,
"string0049" ,
"string0050" ,
"string0051" ,
"string0052" ,
"string0053" ,
"string0054" ,
"string0055" ,
"string0056" ,
"string0057" ,
"string0058" ,
"string0059" ,
"string0060" ,
"string0061" ,
"string0062" ,
"string0063" ,
"string0064" ,
"string0065" ,
"string0066" ,
"string0067" ,
"string0068" ,
"string0069" ,
"string0070" ,
"string0071" ,
"string0072" ,
"string0073" ,
"string0074" ,
"string0075" ,
"string0076" ,
"string0077" ,
"string0078" ,
"string0079" ,
"string0080" ,
"string0081" ,
"string0082" ,
"string0083" ,
"string0084" ,
"string0085" ,
"string0086" ,
"string0087" ,
"string0088" ,
"string0089" ,
"string0090" ,
"string0091" ,
"string0092" ,
"string0093" ,
"string0094" ,
"string0095" ,
"string0096" ,
"string0097" ,
"string0098" ,
"string0099" ,
"string0100" ,
"string0101" ,
"string0102" ,
"string0103" ,
"string0104" ,
"string0105" ,
"string0106" ,
"string0107" ,
"string0108" ,
"string0109" ,
"string0110" ,
"string0111" ,
"string0112" ,
"string0113" ,
"string0114" ,
"string0115" ,
"string0116" ,
"string0117" ,
"string0118" ,
"string0119" ,
"string0120" ,
"string0121" ,
"string0122" ,
"string0123" ,
"string0124" ,
"string0125" ,
"string0126" ,
"string0127" ,
"string0128" ,
"string0129" ,
"string0130" ,
"string0131" ,
"string0132" ,
"string0133" ,
"string0134" ,
"string0135" ,
"string0136" ,
"string0137" ,
"string0138" ,
"string0139" ,
"string0140" ,
"string0141" ,
"string0142" ,
"string0143" ,
"string0144" ,
"string0145" ,
"string0146" ,
"string0147" ,
"string0148" ,
"string0149" ,
"string0150" ,
"string0151" ,
"string0152" ,
"string0153" ,
"string0154" ,
"string0155" ,
"string0156" ,
"string0157" ,
"string0158" ,
"string0159" ,
"string0160" ,
"string0161" ,
"string0162" ,
"string0163" ,
"string0164" ,
"string0165" ,
"string0166" ,
"string0167" ,
"string0168" ,
"string0169" ,
"string0170" ,
"string0171" ,
"string0172" ,
"string0173" ,
"string0174" ,
"string0175" ,
"string0176" ,
"string0177" ,
"string0178" ,
"string0179" ,
"string0180" ,
"string0181" ,
"string0182" ,
"string0183" ,
"string0184" ,
"string0185" ,
"string0186" ,
"string0187" ,
"string0188" ,
"string0189" ,
"string0190" ,
"string0191" ,
"string0192" ,
"string0193" ,
"string0194" ,
"string0195" ,
"string0196" ,
"string0197" ,
"string0198" ,
"string0199" ,
"string0200" ,
"string0201" ,
"string0202" ,
"string0203" ,
"string0204" ,
"string0205" ,
"string0206" ,
"string0207" ,
"string0208" ,
"string0209" ,
"string0210" ,
"string0211" ,
"string0212" ,
"string0213" ,
"string0214" ,
"string0215" ,
"string0216" ,
"string0217" ,
"string0218" ,
"string0219" ,
"string0220" ,
"string0221" ,
"string0222" ,
"string0223" ,
"string0224" ,
"string0225" ,
"string0226" ,
"string0227" ,
"string0228" ,
"string0229" ,
"string0230" ,
"string0231" ,
"string0232" ,
"string0233" ,
"string0234" ,
"string0235" ,
"string0236" ,
"string0237" ,
"string0238" ,
"string0239" ,
"string0240" ,
"string0241" ,
"string0242" ,
"string0243" ,
"string0244" ,
"string0245" ,
"string0246" ,
"string0247" ,
"string0248" ,
"string0249" ,
"string0250" ,
"string0251" ,
"string0252" ,
"string0253" ,
"string0254" ,
"string0255" ,
"string0256" ,
"string0257" ,
"string0258" ,
"string0259" ,
"string0260" ,
"string0261" ,
"string0262" ,
"string0263" ,
"string0264" ,
"string0265" ,
"string0266" ,
"string0267" ,
"string0268" ,
"string0269" ,
"string0270" ,
"string0271" ,
"string0272" ,
"string0273" ,
"string0274" ,
"string0275" ,
"string0276" ,
"string0277" ,
"string0278" ,
"string0279" ,
"string0280" ,
"string0281" ,
"string0282" ,
"string0283" ,
"string0284" ,
"string0285" ,
"string0286" ,
"string0287" ,
"string0288" ,
"string0289" ,
"string0290" ,
"string0291" ,
"string0292" ,
"string0293" ,
"string0294" ,
"string0295" ,
"string0296" ,
"string0297" ,
"string0298" ,
"string0299" ,
"string0300" ,
"string0301" ,
"string0302" ,
"string0303" ,
"string0304" ,
"string0305" ,
"string0306" ,
"string0307" ,
"string0308" ,
"string0309" ,
"string0310" ,
"string0311" ,
"string0312" ,
"string0313" ,
"string0314" ,
"string0315" ,
"string0316" ,
"string0317" ,
"string0318" ,
"string0319" ,
"string0320" ,
"string0321" ,
"string0322" ,
"string0323" ,
"string0324" ,
"string0325" ,
"string0326" ,
"string0327" ,
"string0328" ,
"string0329" ,
"string0330" ,
"string0331" ,
"string0332" ,
"string0333" ,
"string0334" ,
"string0335" ,
"string0336" ,
"string0337" ,
"string0338" ,
"string0339" ,
"string0340" ,
"string0341" ,
"string0342" ,
"string0343" ,
"string0344" ,
"string0345" ,
"string0346" ,
"string0347" ,
"string0348" ,
"string0349" ,
"string0350" ,
"string0351" ,
"string0352" ,
"string0353" ,
"string0354" ,
"string0355" ,
"string0356" ,
"string0357" ,
"string0358" ,
"string0359" ,
"string0360" ,
"string0361" ,
"string0362" ,
"string0363" ,
"string0364" ,
"string0365" ,
"string0366" ,
"string0367" ,
"string0368" ,
"string0369" ,
"string0370" ,
"string0371" ,
"string0372" ,
"string0373" ,
"string0374" ,
"string0375" ,
"string0376" ,
"string0377" ,
"string0378" ,
"string0379" ,
"string0380" ,
"string0381" ,
"string0382" ,
"string0383" ,
"string0384" ,
"string0385" ,
"string0386" ,
"string0387" ,
"string0388" ,
"string0389" ,
"string0390" ,
"string0391" ,
"string0392" ,
"string0393" ,
"string0394" ,
"string0395" ,
"string0396" ,
"string0397" ,
"string0398" ,
"string0399" ,
"string0400" ,
"string0401" ,
"string0402" ,
"string0403" ,
"string0404" ,
"string0405" ,
"string0406" ,
"string0407" ,
"string0408" ,
"string0409" ,
"string0410" ,
"string0411" ,
"string0412" ,
"string0413" ,
"string0414" ,
"string0415" ,
"string0416" ,
"string0417" ,
"string0418" ,
"string0419" ,
"string0420" ,
"string0421" ,
"string0422" ,
"string0423" ,
"string0424" ,
"string0425" ,
"string0426" ,
"string0427" ,
"string0428" ,
"string0429" ,
"string0430" ,
"string0431" ,
"string0432" ,
"string0433" ,
"string0434" ,
"string0435" ,
"string0436" ,
"string0437" ,
"string0438" ,
"string0439" ,
"string0440" ,
"string0441" ,
"string0442" ,
"string0443" ,
"string0444" ,
"string0445" ,
"string0446" ,
"string0447" ,
"string0448" ,
"string0449" ,
"string0450" ,
"string0451" ,
"string0452" ,
"string0453" ,
"string0454" ,
"string0455" ,
"string0456" ,
"string0457" ,
"string0458" ,
"string0459" ,
"string0460" ,
"string0461" ,
"string0462" ,
"string0463" ,
"string0464" ,
"string0465" ,
"string0466" ,
"string0467" ,
"string0468" ,
"string0469" ,
"string0470" ,
"string0471" ,
"string0472" ,
"string0473" ,
"string0474" ,
"string0475" ,
"string0476" ,
"string0477" ,
"string0478" ,
"string0479" ,
"string0480" ,
"string0481" ,
"string0482" ,
"string0483" ,
"string0484" ,
"string0485" ,
"string0486" ,
"string0487" ,
"string0488" ,
"string0489" ,
"string0490" ,
"string0491" ,
"string0492" ,
"string0493" ,
"string0494" ,
"string0495" ,
"string0496" ,
"string0497" ,
"string0498" ,
"string0499" ,
"string0500" ,
"string0501" ,
"string0502" ,
"string0503" ,
"string0504" ,
"string0505" ,
"string0506" ,
"string0507" ,
"string0508" ,
"string0509" ,
"string0510" ,
"string0511" ,
"string0512" ,
"string0513" ,
"string0514" ,
"string0515" ,
"string0516" ,
"string0517" ,
"string0518" ,
"string0519" ,
"string0520" ,
"string0521" ,
"string0522" ,
"string0523" ,
"string0524" ,
"string0525" ,
"string0526" ,
"string0527" ,
"string0528" ,
"string0529" ,
"string0530" ,
"string0531" ,
"string0532" ,
"string0533" ,
"string0534" ,
"string0535" ,
"string0536" ,
"string0537" ,
"string0538" ,
"string0539" ,
"string0540" ,
"string0541" ,
"string0542" ,
"string0543" ,
"string0544" ,
"string0545" ,
"string0546" ,
"string0547" ,
"string0548" ,
"string0549" ,
"string0550" ,
"string0551" ,
"string0552" ,
"string0553" ,
"string0554" ,
"string0555" ,
"string0556" ,
"string0557" ,
"string0558" ,
"string0559" ,
"string0560" ,
"string0561" ,
"string0562" ,
"string0563" ,
"string0564" ,
"string0565" ,
"string0566" ,
"string0567" ,
"string0568" ,
"string0569" ,
"string0570" ,
"string0571" ,
"string0572" ,
"string0573" ,
"string0574" ,
"string0575" ,
"string0576" ,
"string0577" ,
"string0578" ,
"string0579" ,
"string0580" ,
"string0581" ,
"string0582" ,
"string0583" ,
"string0584" ,
"string0585" ,
"string0586" ,
"string0587" ,
"string0588" ,
"string0589" ,
"string0590" ,
"string0591" ,
"string0592" ,
"string0593" ,
"string0594" ,
"string0595" ,
"string0596" ,
"string0597" ,
"string0598" ,
"string0599" ,
"string0600" ,
"string0601" ,
"string0602" ,
"string0603" ,
"string0604" ,
"string0605" ,
"string0606" ,
"string0607" ,
"string0608" ,
"string0609" ,
"string0610" ,
"string0611" ,
"string0612" ,
"string0613" ,
"string0614" ,
"string0615" ,
"string0616" ,
"string0617" ,
"string0618" ,
"string0619" ,
"string0620" ,
"string0621" ,
"string0622" ,
"string0623" ,
"string0624" ,
"string0625" ,
"string0626" ,
"string0627" ,
"string0628" ,
"string0629" ,
"string0630" ,
"string0631" ,
"string0632" ,
"string0633" ,
"string0634" ,
"string0635" ,
"string0636" ,
"string0637" ,
"string0638" ,
"string0639" ,
"string0640" ,
"string0641" ,
"string0642" ,
"string0643" ,
"string0644" ,
"string0645" ,
"string0646" ,
"string0647" ,
"string0648" ,
"string0649" ,
"string0650" ,
"string0651" ,
"string0652" ,
"string0653" ,
"string0654" ,
"string0655" ,
"string0656" ,
"string0657" ,
"string0658" ,
"string0659" ,
"string0660" ,
"string0661" ,
"string0662" ,
"string0663" ,
"string0664" ,
"string0665" ,
"string0666" ,
"string0667" ,
"string0668" ,
"string0669" ,
"string0670" ,
"string0671" ,
"string0672" ,
"string0673" ,
"string0674" ,
"string0675" ,
"string0676" ,
"string0677" ,
"string0678" ,
"string0679" ,
"string0680" ,
"string0681" ,
"string0682" ,
"string0683" ,
"string0684" ,
"string0685" ,
"string0686" ,
"string0687" ,
"string0688" ,
"string0689" ,
"string0690" ,
"string0691" ,
"string0692" ,
"string0693" ,
"string0694" ,
"string0695" ,
"string0696" ,
"string0697" ,
"string0698" ,
"string0699" ,
"string0700" ,
"string0701" ,
"string0702" ,
"string0703" ,
"string0704" ,
"string0705" ,
"string0706" ,
"string0707" ,
"string0708" ,
"string0709" ,
"string0710" ,
"string0711" ,
"string0712" ,
"string0713" ,
"string0714" ,
"string0715" ,
"string0716" ,
"string0717" ,
"string0718" ,
"string0719" ,
"string0720" ,
"string0721" ,
"string0722" ,
"string0723" ,
"string0724" ,
"string0725" ,
"string0726" ,
"string0727" ,
"string0728" ,
"string0729" ,
"string0730" ,
"string0731" ,
"string0732" ,
"string0733" ,
"string0734" ,
"string0735" ,
"string0736" ,
"string0737" ,
"string0738" ,
"string0739" ,
"string0740" ,
"string0741" ,
"string0742" ,
"string0743" ,
"string0744" ,
"string0745" ,
"string0746" ,
"string0747" ,
"string0748" ,
"string0749" ,
"string0750" ,
"string0751" ,
"string0752" ,
"string0753" ,
"string0754" ,
"string0755" ,
"string0756" ,
"string0757" ,
"string0758" ,
"string0759" ,
"string0760" ,
"string0761" ,
"string0762" ,
"string0763" ,
"string0764" ,
"string0765" ,
"string0766" ,
"string0767" ,
"string0768" ,
"string0769" ,
"string0770" ,
"string0771" ,
"string0772" ,
"string0773" ,
"string0774" ,
"string0775" ,
"string0776" ,
"string0777" ,
"string0778" ,
"string0779" ,
"string0780" ,
"string0781" ,
"string0782" ,
"string0783" ,
"string0784" ,
"string0785" ,
"string0786" ,
"string0787" ,
"string0788" ,
"string0789" ,
"string0790" ,
"string0791" ,
"string0792" ,
"string0793" ,
"string0794" ,
"string0795" ,
"string0796" ,
"string0797" ,
"string0798" ,
"string0799" ,
"string0800" ,
"string0801" ,
"string0802" ,
"string0803" ,
"string0804" ,
"string0805" ,
"string0806" ,
"string0807" ,
"string0808" ,
"string0809" ,
"string0810" ,
"string0811" ,
"string0812" ,
"string0813" ,
"string0814" ,
"string0815" ,
"string0816" ,
"string0817" ,
"string0818" ,
"string0819" ,
"string0820" ,
"string0821" ,
"string0822" ,
"string0823" ,
"string0824" ,
"string0825" ,
"string0826" ,
"string0827" ,
"string0828" ,
"string0829" ,
"string0830" ,
"string0831" ,
"string0832" ,
"string0833" ,
"string0834" ,
"string0835" ,
"string0836" ,
"string0837" ,
"string0838" ,
"string0839" ,
"string0840" ,
"string0841" ,
"string0842" ,
"string0843" ,
"string0844" ,
"string0845" ,
"string0846" ,
"string0847" ,
"string0848" ,
"string0849" ,
"string0850" ,
"string0851" ,
"string0852" ,
"string0853" ,
"string0854" ,
"string0855" ,
"string0856" ,
"string0857" ,
"string0858" ,
"string0859" ,
"string0860" ,
"string0861" ,
"string0862" ,
"string0863" ,
"string0864" ,
"string0865" ,
"string0866" ,
"string0867" ,
"string0868" ,
"string0869" ,
"string0870" ,
"string0871" ,
"string0872" ,
"string0873" ,
"string0874" ,
"string0875" ,
"string0876" ,
"string0877" ,
"string0878" ,
"string0879" ,
"string0880" ,
"string0881" ,
"string0882" ,
"string0883" ,
"string0884" ,
"string0885" ,
"string0886" ,
"string0887" ,
"string0888" ,
"string0889" ,
"string0890" ,
"string0891" ,
"string0892" ,
"string0893" ,
"string0894" ,
"string0895" ,
"string0896" ,
"string0897" ,
"string0898" ,
"string0899" ,
"string0900" ,
"string0901" ,
"string0902" ,
"string0903" ,
"string0904" ,
"string0905" ,
"string0906" ,
"string0907" ,
"string0908" ,
"string0909" ,
"string0910" ,
"string0911" ,
"string0912" ,
"string0913" ,
"string0914" ,
"string0915" ,
"string0916" ,
"string0917" ,
"string0918" ,
"string0919" ,
"string0920" ,
"string0921" ,
"string0922" ,
"string0923" ,
"string0924" ,
"string0925" ,
"string0926" ,
"string0927" ,
"string0928" ,
"string0929" ,
"string0930" ,
"string0931" ,
"string0932" ,
"string0933" ,
"string0934" ,
"string0935" ,
"string0936" ,
"string0937" ,
"string0938" ,
"string0939" ,
"string0940" ,
"string0941" ,
"string0942" ,
"string0943" ,
"string0944" ,
"string0945" ,
"string0946" ,
"string0947" ,
"string0948" ,
"string0949" ,
"string0950" ,
"string0951" ,
"string0952" ,
"string0953" ,
"string0954" ,
"string0955" ,
"string0956" ,
"string0957" ,
"string0958" ,
"string0959" ,
"string0960" ,
"string0961" ,
"string0962" ,
"string0963" ,
"string0964" ,
"string0965" ,
"string0966" ,
"string0967" ,
"string0968" ,
"string0969" ,
"string0970" ,
"string0971" ,
"string0972" ,
"string0973" ,
"string0974" ,
"string0975" ,
"string0976" ,
"string0977" ,
"string0978" ,
"string0979" ,
"string0980" ,
"string0981" ,
"string0982" ,
"string0983" ,
"string0984" ,
"string0985" ,
"string0986" ,
"string0987" ,
"string0988" ,
"string0989" ,
"string0990" ,
"string0991" ,
"string0992" ,
"string0993" ,
"string0994" ,
"string0995" ,
"string0996" ,
"string0997" ,
"string0998" ,
"string0999" ,
"string1000" ,
"string1001" ,
"string1002" ,
"string1003" ,
"string1004" ,
"string1005" ,
"string1006" ,
"string1007" ,
"string1008" ,
"string1009" ,
"string1010" ,
"string1011" ,
"string1012" ,
"string1013" ,
"string1014" ,
"string1015" ,
"string1016" ,
"string1017" ,
"string1018" ,
"string1019" ,
"string1020" ,
"string1021" ,
"string1022" ,
"string1023" ,
};
}
static native boolean hasJit();
static native void ensureJitCompiled(Class <?> klass, String methodName);
}
Messung V0.5 in Prozent C=85 H=91 G=87
¤ Dauer der Verarbeitung: 0.19 Sekunden
(vorverarbeitet am 2026-06-29)
¤
*© Formatika GbR, Deutschland