Skip to content

Commit 0f80b1b

Browse files
authored
Merge pull request #314 from graalvm/ni-demos-refactoring-11
[GR-60094] Add demo for Specify Class Initialization Explicitly guide.
2 parents dbcf356 + a2f2783 commit 0f80b1b

File tree

5 files changed

+120
-0
lines changed

5 files changed

+120
-0
lines changed
Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
name: native-image/specify-class-init
2+
on:
3+
push:
4+
paths:
5+
- 'native-image/specify-class-init/**'
6+
- '.github/workflows/native-image-specify-class-init.yml'
7+
pull_request:
8+
paths:
9+
- 'native-image/specify-class-init/**'
10+
- '.github/workflows/native-image-specify-class-init.yml'
11+
schedule:
12+
- cron: "0 0 1 * *" # run every month
13+
workflow_dispatch:
14+
permissions:
15+
contents: read
16+
jobs:
17+
run:
18+
name: Run 'native-image/specify-class-init'
19+
runs-on: ubuntu-latest
20+
timeout-minutes: 15
21+
strategy:
22+
matrix:
23+
java-version: ['21', '24-ea']
24+
steps:
25+
- uses: actions/checkout@v4
26+
- uses: graalvm/setup-graalvm@v1
27+
with:
28+
java-version: ${{ matrix.java-version }}
29+
distribution: 'graalvm'
30+
github-token: ${{ secrets.GITHUB_TOKEN }}
31+
native-image-job-reports: 'true'
32+
- name: Run 'native-image/specify-class-init'
33+
run: |
34+
cd native-image/specify-class-init
35+
./run.sh
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
.class
2+
buildtime-parser
3+
runtime-parser
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
# Specify Class Initialization Explicitly
2+
3+
You can find the steps to run this demo on [the website](https://www.graalvm.org/jdk23/reference-manual/native-image/guides/specify-class-initialization/).
Lines changed: 69 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,69 @@
1+
/*
2+
* Copyright (c) 2024, Oracle and/or its affiliates. All rights reserved.
3+
* DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
4+
*
5+
* The Universal Permissive License (UPL), Version 1.0
6+
*
7+
* Subject to the condition set forth below, permission is hereby granted to any
8+
* person obtaining a copy of this software, associated documentation and/or
9+
* data (collectively the "Software"), free of charge and under any and all
10+
* copyright rights in the Software, and any and all patent rights owned or
11+
* freely licensable by each licensor hereunder covering either (i) the
12+
* unmodified Software as contributed to or provided by such licensor, or (ii)
13+
* the Larger Works (as defined below), to deal in both
14+
*
15+
* (a) the Software, and
16+
*
17+
* (b) any piece of software and/or hardware listed in the lrgrwrks.txt file if
18+
* one is included with the Software each a "Larger Work" to which the Software
19+
* is contributed by such licensors),
20+
*
21+
* without restriction, including without limitation the rights to copy, create
22+
* derivative works of, display, perform, and distribute the Software and make,
23+
* use, sell, offer for sale, import, export, have made, and have sold the
24+
* Software and the Larger Work(s), and to sublicense the foregoing rights on
25+
* either these or other terms.
26+
*
27+
* This license is subject to the following condition:
28+
*
29+
* The above copyright notice and either this complete permission notice or at a
30+
* minimum a reference to the UPL must be included in all copies or substantial
31+
* portions of the Software.
32+
*
33+
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
34+
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
35+
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
36+
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
37+
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
38+
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
39+
* SOFTWARE.
40+
*/
41+
42+
import java.util.ArrayList;
43+
import java.util.List;
44+
import java.util.Scanner;
45+
46+
public class TalkParser {
47+
private static final List<Talk> TALKS = new ArrayList<>();
48+
static {
49+
Scanner s = new Scanner("""
50+
Asynchronous Programming in Java: Options to Choose from by Venkat Subramaniam
51+
Anatomy of a Spring Boot App with Clean Architecture by Steve Pember
52+
Java in the Cloud with GraalVM by Alina Yurenko
53+
Bootiful Spring Boot 3 by Josh Long
54+
""");
55+
while (s.hasNextLine()) {
56+
TALKS.add(new Talk(s.nextLine()));
57+
}
58+
s.close();
59+
}
60+
61+
public static void main(String[] args) {
62+
System.out.println("Talks loaded using scanner:");
63+
for (Talk talk : TALKS) {
64+
System.out.println("- " + talk.name());
65+
}
66+
}
67+
}
68+
69+
record Talk (String name) {}
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
#!/usr/bin/env bash
2+
set -ex
3+
4+
javac TalkParser.java
5+
native-image -Ob -o runtime-parser TalkParser
6+
time ./runtime-parser
7+
du -sh runtime-parser
8+
native-image -Ob --initialize-at-build-time=TalkParser,Talk -o buildtime-parser TalkParser
9+
time ./buildtime-parser
10+
du -sh buildtime-parser

0 commit comments

Comments
 (0)