Skip to content

Commit bb5d47c

Browse files
committed
Utilize VT if possible
Also, do not pre-create as many threads as many cores reported by Java as many times they are simply unused.
1 parent 7ed88ad commit bb5d47c

File tree

4 files changed

+100
-3
lines changed

4 files changed

+100
-3
lines changed

pom.xml

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,26 @@
147147

148148
<build>
149149
<plugins>
150+
<plugin>
151+
<groupId>org.apache.maven.plugins</groupId>
152+
<artifactId>maven-compiler-plugin</artifactId>
153+
<executions>
154+
<execution>
155+
<id>java21</id>
156+
<goals>
157+
<goal>compile</goal>
158+
</goals>
159+
<phase>compile</phase>
160+
<configuration>
161+
<release>21</release>
162+
<compileSourceRoots>
163+
<compileSourceRoot>${project.basedir}/src/main/java21</compileSourceRoot>
164+
</compileSourceRoots>
165+
<multiReleaseOutput>true</multiReleaseOutput>
166+
</configuration>
167+
</execution>
168+
</executions>
169+
</plugin>
150170
<plugin>
151171
<groupId>org.apache.maven.plugins</groupId>
152172
<artifactId>maven-release-plugin</artifactId>

src/main/java/org/codehaus/plexus/archiver/zip/ConcurrentJarCreator.java

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,6 @@
2323
import java.io.SequenceInputStream;
2424
import java.io.UncheckedIOException;
2525
import java.util.concurrent.ExecutionException;
26-
import java.util.concurrent.Executors;
2726
import java.util.zip.Deflater;
2827
import java.util.zip.ZipEntry;
2928

@@ -119,8 +118,8 @@ public ConcurrentJarCreator(boolean compressAddedZips, int nThreads) throws IOEx
119118
manifest = createDeferred(defaultSupplier);
120119
directories = createDeferred(defaultSupplier);
121120
synchronousEntries = createDeferred(defaultSupplier);
122-
parallelScatterZipCreator =
123-
new ParallelScatterZipCreator(Executors.newFixedThreadPool(nThreads), defaultSupplier);
121+
parallelScatterZipCreator = new ParallelScatterZipCreator(
122+
ConcurrentJarCreatorExecutorServiceFactory.createExecutorService(nThreads), defaultSupplier);
124123
}
125124

126125
/**
Lines changed: 45 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,45 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*/
18+
package org.codehaus.plexus.archiver.zip;
19+
20+
import java.util.concurrent.ExecutorService;
21+
import java.util.concurrent.LinkedBlockingQueue;
22+
import java.util.concurrent.ThreadFactory;
23+
import java.util.concurrent.ThreadPoolExecutor;
24+
import java.util.concurrent.TimeUnit;
25+
import java.util.concurrent.atomic.AtomicInteger;
26+
27+
public class ConcurrentJarCreatorExecutorServiceFactory {
28+
private static final AtomicInteger POOL_COUNTER = new AtomicInteger();
29+
30+
static ExecutorService createExecutorService(int poolSize) {
31+
ThreadGroup threadGroup = Thread.currentThread().getThreadGroup();
32+
int poolCount = POOL_COUNTER.incrementAndGet();
33+
AtomicInteger threadCounter = new AtomicInteger();
34+
ThreadFactory threadFactory = new ThreadFactory() {
35+
@Override
36+
public Thread newThread(Runnable r) {
37+
Thread thread =
38+
new Thread(threadGroup, r, "plx-arch-" + poolCount + "-" + threadCounter.incrementAndGet());
39+
thread.setDaemon(true);
40+
return thread;
41+
}
42+
};
43+
return new ThreadPoolExecutor(1, poolSize, 1L, TimeUnit.SECONDS, new LinkedBlockingQueue<>(), threadFactory);
44+
}
45+
}
Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*
17+
*/
18+
package org.codehaus.plexus.archiver.zip;
19+
20+
import java.util.concurrent.ExecutorService;
21+
import java.util.concurrent.Executors;
22+
import java.util.concurrent.atomic.AtomicInteger;
23+
24+
public class ConcurrentJarCreatorExecutorServiceFactory {
25+
private static final AtomicInteger POOL_COUNTER = new AtomicInteger();
26+
27+
static ExecutorService createExecutorService(int poolSize) {
28+
int poolCount = POOL_COUNTER.incrementAndGet();
29+
AtomicInteger threadCounter = new AtomicInteger();
30+
return Executors.newThreadPerTaskExecutor(
31+
Thread.ofVirtual().name("plx-arch-" + poolCount + "-" + threadCounter.incrementAndGet()).factory());
32+
}
33+
}

0 commit comments

Comments
 (0)