/*
* Copyright ( c ) 2013 , 2022 , Oracle and / or its affiliates . All rights reserved .
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER .
*
* This code is free software ; you can redistribute it and / or modify it
* under the terms of the GNU General Public License version 2 only , as
* published by the Free Software Foundation .
*
* This code is distributed in the hope that it will be useful , but WITHOUT
* ANY WARRANTY ; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE . See the GNU General Public License
* version 2 for more details ( a copy is included in the LICENSE file that
* accompanied this code ) .
*
* You should have received a copy of the GNU General Public License version
* 2 along with this work ; if not , write to the Free Software Foundation ,
* Inc . , 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA .
*
* Please contact Oracle , 500 Oracle Parkway , Redwood Shores , CA 94065 USA
* or visit www . oracle . com if you need additional information or have any
* questions .
*/
import java.util.ArrayList;
import java.util.List;
import java.util.stream.Collectors;
import java.net.*;
import java.io.*;
import java.nio.file.FileSystem;
import java.nio.file.FileSystems;
import java.nio.file.FileSystemNotFoundException;
import java.nio.file.ProviderNotFoundException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.util.function .Predicate;
abstract class Task<T> implements Runnable {
private transient boolean working = true ;
private final List<T> methods;
private final Thread thread ;
Task(List<T> methods) {
this .methods = methods;
this .thread = new Thread (this );
this .thread .start();
}
boolean isAlive() {
return this .thread .isAlive();
}
boolean isWorking() {
boolean working = this .working && this .thread .isAlive();
this .working = false ;
return working;
}
@Override
public void run() {
long time = -System.currentTimeMillis();
for (T method : this .methods) {
this .working = true ;
try {
for (int i = 0 ; i < 100 ; i++) {
process(method);
}
} catch (NoSuchMethodException ignore) {
}
}
time += System.currentTimeMillis();
print("thread done in " + time / 1000 + " seconds" );
}
protected abstract void process(T method) throws NoSuchMethodException;
static synchronized void print(Object message) {
System.out.println(message);
System.out.flush();
}
static List<Class <?>> getClasses(int count) throws Exception {
List<Class <?>> classes = new ArrayList<>();
FileSystem fs = null ;
try {
fs = FileSystems.getFileSystem(URI.create("jrt:/" ));
} catch (ProviderNotFoundException | FileSystemNotFoundException e) {
throw new RuntimeException("FAIL - JRT Filesystem not found" );
}
List<String> fileNames;
Path modules = fs.getPath("/modules" );
Predicate<String> startsWithJavaBase = path -> path.toString().startsWith("java.base/java" );
Predicate<String> startsWithJavaDesktop = path -> path.toString().startsWith("java.desktop/java" );
Predicate<String> startsWithJavaDataTransfer = path -> path.toString().startsWith("java.datatransfer/java" );
Predicate<String> startsWithJavaRMI = path -> path.toString().startsWith("java.rmi/java" );
Predicate<String> startsWithJavaSmartCardIO = path -> path.toString().startsWith("java.smartcardio/java" );
Predicate<String> startsWithJavaManagement = path -> path.toString().startsWith("java.management/java" );
Predicate<String> startsWithJavaXML = path -> path.toString().startsWith("java.xml/java" );
Predicate<String> startsWithJavaScripting = path -> path.toString().startsWith("java.scripting/java" );
Predicate<String> startsWithJavaNaming = path -> path.toString().startsWith("java.naming/java" );
Predicate<String> startsWithJavaSQL = path -> path.toString().startsWith("java.sql/java" );
Predicate<String> startsWithJavaCompiler = path -> path.toString().startsWith("java.compiler/java" );
Predicate<String> startsWithJavaLogging = path -> path.toString().startsWith("java.logging/java" );
Predicate<String> startsWithJavaPrefs = path -> path.toString().startsWith("java.prefs/java" );
fileNames = Files.walk(modules)
.map(Path::toString)
.filter(path -> path.toString().contains("java" ))
.map(s -> s.substring(9 )) // remove /modules/ from beginning
.filter(startsWithJavaBase
.or(startsWithJavaDesktop)
.or(startsWithJavaDataTransfer)
.or(startsWithJavaRMI)
.or(startsWithJavaSmartCardIO)
.or(startsWithJavaManagement)
.or(startsWithJavaXML)
.or(startsWithJavaScripting)
.or(startsWithJavaNaming)
.or(startsWithJavaSQL)
.or(startsWithJavaCompiler)
.or(startsWithJavaLogging)
.or(startsWithJavaPrefs))
.map(s -> s.replace('/' , '.' ))
.filter(path -> path.toString().endsWith(".class" ))
.map(s -> s.substring(0 , s.length() - 6 )) // drop .class
.map(s -> s.substring(s.indexOf("." )))
.filter(path -> path.toString().contains("java" ))
.map(s -> s.substring(s.indexOf("java" )))
.collect(Collectors.toList());
ClassLoader scl = ClassLoader.getSystemClassLoader();
for (String name : fileNames) {
classes.add(Class .forName(name, false , scl));
if (count == classes.size()) {
break ;
}
}
return classes;
}
}
Messung V0.5 in Prozent C=94 H=79 G=86
¤ Dauer der Verarbeitung: 0.4 Sekunden
¤
*© Formatika GbR, Deutschland