SlideShare a Scribd company logo
GraalVM超入門 / Getting Started GraalVM
2018/12/15
JJUG CCC 2018 Fall #ccc_c2
@tamtam180
テーマ 2
Polyglot/Truffle
多言語Mix
Graal/GraalVM
Native Image おまけ
前提
• 初心者向けの内容です
• 少しでもGraalで遊んだことがある人に
は、
何も得るものはありません
3
アジェンダ
• 自己紹介
• GraalVMとは
–用語の説明/おさらい含む
• Polyglotサンプル
• JavaプログラムをNative Imageに変換
する
• こぼれ話(サンプル集)
4
自己紹介
自己紹介
• Name: Kiyotaka Suzuki
• Twitter: @tamtam180
• Main works
– SquareEnix (約5.5年)
• PlayOnline, FF-XIV, etc.
– SmartNews (約5年)
• Cross-functional Expert Team
• Senior Software Engineer
• 広告事業, 公共事業
• データストア系OSSが好き
• パフォーマンスチューニングが好き
6
用語の説明
用語の説明
• Graal
• GraalVM
• Polyglot
• Truffle
• Substrate VM
• JVMCI, Compiler Interface
• JIT Compiler
• AOT
• HotSpotVM
8
用語の説明
• Graal
• GraalVM
• Polyglot
• Truffle
• Substrate VM
• JVMCI, Compiler Interface
• JIT Compiler
• AOT
• HotSpotVM
9
用語の説明 10
HotSpot VM
Compiler Interface
C1 (Client) C2 (Server)
• HotSpotVM
C++
← JIT Compiler
階層型コンパイラ
実行中にC1/C2両方使う
用語の説明 11
HotSpot VM
Compiler Interface
C1 (Client) Graal
• GraalVM
–多言語用の仮想マシン
C++
← JIT Compiler
C2の代わりにGraalを
JVMCI
Java
JITをJavaで書くためのInterface
用語の説明 12
HotSpot VM
Compiler Interface
C1 (Client) Graal
• Graal
–Javaで書かれたJITコンパイラ
C++
← JIT Compiler
C2の代わりにGraalを
JVMCI
Java
JITをJavaで書くためのInterface
用語の説明 13
HotSpot VM
Graal
• Truffle
–言語実装用フレームワーク
–ASTインタプリタ
C++
JVMCI Java
TruffleJVM Lang
Sulong(LLVM)JS R Ruby Python
C, C++, Rust
用語の説明
• Polyglot
–他の言語を呼び出してデータのやりと
りが出来る
–JavaからRuby
–JSからJava
–などなど
14
用語の説明
• AOT (Ahead of Time)
–事前コンパイルの事だよ
–jaotcとかjava9から入ってるよ
• Substrate VM
–Truffleで書かれたASTインタプリタを
コンパイルしてくれる
15
https://www.oracle.com/technetwork/java/jvmls2015-wimmer-2637907.pdf
つまり GraalVM とは
GraalVM
• GraalVMは
–仮想マシンである
–OpenJDK8と置き換える事が可能
–他の言語とコラボレーション出来る
17
GraalVM 18
• GraalVM
–NativeImageを作れる
• OneBinaryが出来る
• Native Imge
–起動速度が速い
–メモリフットプリントが小さい
さっそくやってみよう
開発環境の作り方
• GraalVM CE 1.0.0-RC10
を使います
• OSはUbuntu18.04
20
# ダウンロード
$ wget https://github.com/oracle/graal/releases/download/vm-
1.0.0-rc10/graalvm-ce-1.0.0-rc10-linux-amd64.tar.gz
# 展開
$ tar zxf graalvm-ce-1.0.0-rc10-linux-amd64.tar.gz ¥
-C /usr/lib/jvm
# パスを通す
$ export GRAAL_HOME=/usr/lib/jvm/graalvm-ce-1.0.0-rc10
$ export PATH=$GRAAL_HOME/bin:$PATH
開発環境の作り方 21
$ ls /usr/lib/jvm/graalvm-ce-1.0.0-rc10/bin/
appletviewer javah jps native-image rmiregistry
extcheck javap jrunscript native2ascii schemagen
gu jcmd js node serialver
idlj jconsole jsadebugd npm servertool
jar jdb jstack orbd tnameserv
jarsigner jdeps jstat pack200 unpack200
java jhat jstatd policytool wsgen
java-rmi.cgi jinfo jvisualvm polyglot wsimport
javac jjs keytool rmic xjc
javadoc jmap lli rmid
$ node -v
v10.9.0
$ java -version
openjdk version "1.8.0_192"
OpenJDK Runtime Environment (build 1.8.0_192-
20181024121959.buildslave.jdk8u-src-tar--b12)
GraalVM 1.0.0-rc10 (build 25.192-b12-jvmci-0.53, mixed mode)
開発環境の作り方
• Native buildに必要なライブラリをイ
ンストールします
–zlib.hが必要
22
# native buildに必要なライブラリをインストールします
$ apt-get install zlib1g-dev
開発環境の作り方
• 他の言語もインストールする
23
# 他の言語も使えるようにする
$ gu --catalog list
Downloading: Component catalog
ComponentId Version Component name
----------------------------------------------------------------
python 1.0.0-rc10 Graal.Python
R 1.0.0-rc10 FastR
ruby 1.0.0-rc10 TruffleRuby
# Install Ruby
$ gu install ruby
$ ${GRAAL_HOME}/jre/languages/ruby/lib/truffle/post_install_hook.sh
# Install Python
$ gu install python
$ ruby -v
ruby 2.5.1p57 (2018-03-29 revision 63029) [x86_64-linux-gnu]
$ graalpython -V
Graal Python 3.7.0 (GraalVM CE Native 1.0.0-rc10)
サンプル
サンプル
• 言語入り乱れて実行する(Polyglot)
• Nativeイメージを作る
– HelloWorld
– ちょっと実用的なCLI
– Redisに接続する
– MySQLに接続する
– SpringBootを使う
– Node / Single Binary
– Ruby / Single Binary
25
サンプル
他の言語を呼び出す
Sample:Polyglot
• Javaから他の言語を呼び出す
27
import org.graalvm.polyglot.*;
public class Sample {
public static void main(String[] args) {
try (Context context =
Context.newBuilder().allowAllAccess(true).build()) {
System.out.println(
context.getEngine().getLanguages().keySet());
context.eval("ruby", "puts 'hello, ruby’”);
context.eval("python", "print('hello, python')");
context.eval("js", "console.log('hello, JS¥n')");
context.eval("R", "cat('hello, R')");
} catch (PolyglotException e) {
e.printStackTrace(); // こういうの本当は駄目!!
}
}
}
Sample:Polyglot
• 実行結果
28
[R, js, python, llvm, ruby]
hello, ruby
hello, python
hello, JS
hello, R
$ javac -cp $GRAAL_HOME/jre/lib/boot/graal-sdk.jar Sample.java
$ java Sample
Sample:Polyglot:LLVM
• Javaから他の言語を呼び出す(LLVM)
–BitCodeをJavaからCALLする
29
#include <stdio.h>
int main() {
printf("Hello from GraalVM!¥n");
return 0;
}
# BitCode生成
$ clang -c -O1 -emit-llvm hello.c
# 実行
$ lli hello.bc
Hello from GraalVM!
Sample:Polyglot:LLVM
• Javaから他の言語を呼び出す(LLVM)
30
import org.graalvm.polyglot.*;
import java.io.*;
public class Sample2 {
public static void main(String[] args) throws Exception {
File f = new File("hello.bc");
Source source = Source.newBuilder("llvm",
new File("hello.bc")).build();
try (Context context =
Context.newBuilder().allowAllAccess(true).build()) {
context.eval(source).execute();
}
}
}
$ java Sample2
Hello from GraalVM!
Sample:Polyglot
• 値を受け取る
31
import org.graalvm.polyglot.*;
public class Sample3 {
public static void main(String[] args) {
try (Context context =
Context.newBuilder().allowNativeAccess(true).build()) {
Value value = context.eval("ruby", "[2,4,8]");
int v = value.getArrayElement(1).asInt();
System.out.println(v); // 4が表示される
} catch (PolyglotException e) {
e.printStackTrace(); // こういうの本当は駄目!!
}
}
}
$ java Sample3
4
Sample:Polyglot
• 双方向で実行可能!!
–Node から Java
–Rubyから Python
–などなど..
• サーバをJavaで書いてPluginを
Pythonで書く等が可能
– (JRubyやJPythonで今までも出来たけど)
• ちゃんと使う場合はSourceクラスを
使ったりしてキャッシュ化しましょう
32
https://www.graalvm.org/docs/reference-manual/polyglot/
サンプル
Nativeイメージを作る
Sample: Nativeイメージを作る
• まずは基本に忠実にHello World
34
public class HelloWorld {
public static void main(String[] args) {
System.out.println("Hello, World!");
}
}
# コンパイル
$ javac HelloWorld.java
# 普通に実行
$ java HelloWorld
Hello, World!
Sample: Nativeイメージを作る
• Native Imageを作る
– ビルドサーバが立ち上がってそこで実行される
– --no-server をつけた方がトラブルが少ない
– -H:Nameで出力ファイル名を指定する(省略可)
35
$ native-image –H:Name=hello --no-server HelloWorld
[helloworld:5620] classlist: 1,487.46 ms
[helloworld:5620] (cap): 988.10 ms
[helloworld:5620] setup: 2,169.08 ms
[helloworld:5620] (typeflow): 3,763.17 ms
[helloworld:5620] (objects): 655.53 ms
[helloworld:5620] (features): 131.40 ms
[helloworld:5620] analysis: 4,616.25 ms
[helloworld:5620] universe: 199.90 ms
[helloworld:5620] (parse): 1,029.82 ms
[helloworld:5620] (inline): 1,138.66 ms
[helloworld:5620] (compile): 5,375.45 ms
[helloworld:5620] compile: 7,758.60 ms
[helloworld:5620] image: 247.74 ms
[helloworld:5620] write: 144.12 ms
[helloworld:5620] [total]: 16,690.46 ms
$ ./hello
Hello, World!
Sample: Nativeイメージを作る
• 中身を確認する
– Nativeイメージだけど、libcの依存がある
36
$ file ./hello
./hello: ELF 64-bit LSB shared object, x86-64, version 1 (SYSV),
dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0,
BuildID[sha1]=32f1dede2061d81be1f5573b20db12b9044212f7, with debug_info, not stripped
$ ldd ./hello
linux-vdso.so.1 (0x00007ffe5696d000)
libpthread.so.0 => /lib/x86_64-linux-gnu/libpthread.so.0 (0x00007f00c17a5000)
librt.so.1 => /lib/x86_64-linux-gnu/librt.so.1 (0x00007f00c159d000)
libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f00c11ac000)
/lib64/ld-linux-x86-64.so.2 (0x00007f00c1dc4000)
$ ls -hs ./hello
2.2M ./hello
Sample: Nativeイメージを作る
• Libcの依存も無くそう!!
– --staticでsingle binaryが生成できる
37
$ native-image –H:Name=hello --no-server --static HelloWorld
$ file ./hello
./hello: ELF 64-bit LSB executable, x86-64, version 1 (GNU/Linux),
statically linked, for GNU/Linux 3.2.0,
BuildID[sha1]=db0a71c9360fe7b8a21e1c5cdcedad965643152e, with debug_info, not stripped
$ ldd ./hello
not a dynamic executable
$ ls -hs ./hello
3.4M ./hello
$ ./hello
Hello, World!
Sample: Nativeイメージを作る
• Nativeイメージは起動がはやい
38
$ time java Hello
real 0m0.051s
user 0m0.032s
sys 0m0.016s
$ time ./hello
real 0m0.028s
user 0m0.000s
sys 0m0.025s
Java Native
0.051s 0.028s
Sample: Nativeイメージを作る
• フットプリントも小さい
39
$ /usr/bin/time -f "Memory:%M KB time:%E" java HelloWorld
Memory:23380 KB time:0:00.05
$ /usr/bin/time -f "Memory:%M KB time:%E" ./hello
Memory:2484 KB time:0:00.02
Java Native
23,380 KB 2,484KB
注意事項
注意事項
• Native-imageは制限が多い
– いくつか後述します
– SpringBootのような凝ったライブラリは茨の道です
• 頑張れば実行はできます(これも後述)
– Commonsは素直な実装が多いのでおすすめ
• Native-image化する時の制限です!!
– GraalVMを通常のOpenJDKの代わりに使う分にはC2コ
ンパイラが異なるだけなので制限はありません
41
サンプル
CLIを作る + 外部依存ライブラリ
Sample: CLI
• 外部依存ライブラリ有りでNativeイ
メージを作る
– FatJarを作るのが一番楽です
– maven-shade-plugin を使います
43
Sample: CLI 44
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.1</version>
<executions>
<execution>
<goals><goal>shade</goal></goals>
<configuration>
<createDependencyReducedPom>false</createDependencyReducedPom>
<transformers>
<transformer
implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<manifestEntries>
<Main-Class>MyCLI</Main-Class>
</manifestEntries>
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
• FatJarにするPlugin
Sample: CLI 45
public class MyCLI {
public static void main(String[] args) throws Exception {
Options options = new Options();
options.addOption("t", false, "display current time");
options.addOption("h", false, "display help");
CommandLineParser parser = new DefaultParser();
CommandLine cmd = parser.parse( options, args );
if (cmd.hasOption("h")) {
HelpFormatter formatter = new HelpFormatter();
formatter.printHelp( "mycli", options );
return;
}
if (cmd.hasOption("t")) {
System.out.println(new Date());
return;
}
}
}
Sample: CLI 46
• FatJarをnative build
# FAT JARを作る
$ mvn package
# native-imageを作る
$ native-image --no-server ¥
-jar target/mycli-1.0-SNAPSHOT.jar
# 実行
$ ./mycli-1.0-SNAPSHOT –t
Thu Dec 13 10:16:31 UTC 2018
# ファイルサイズ
$ ls -hs ./mycli-1.0-SNAPSHOT
4.1M ./mycli-1.0-SNAPSHOT
サンプル
Redisに接続する
Sample: Redis
• コマンド化したいよくあるケース
– サービスクラスが既に存在する
– それを使った便利コマンドを作りたい
– データソースにアクセス事がある
• RedisやMySQLなど
48
Sample: Redis 49
• Jedisを使う
–いくつか追加の設定が必要
–POMは省略
• JEDISの依存追加
• FatJarを作る事
Sample: Redis 50
• Mainのコード
public class App {
public static void main( String[] args )
throws Exception {
Jedis jedis = new Jedis("localhost", 6379);
jedis.set("foo", "bar");
String value = jedis.get("foo");
System.out.println("value: " + value);
}
}
Sample: Redis 51
• 単純にビルドしても怒られます
[hello-1.0-SNAPSHOT:7248] classlist: 2,885.53 ms
[hello-1.0-SNAPSHOT:7248] (cap): 1,210.36 ms
[hello-1.0-SNAPSHOT:7248] setup: 2,941.58 ms
SLF4J: slf4j-api 1.6.x (or later) is incompatible with this binding.
SLF4J: Your binding is version 1.5.5 or earlier.
SLF4J: Upgrade your binding to version 1.6.x.
[hello-1.0-SNAPSHOT:7248] analysis: 6,413.27 ms
error: Class initialization failed: redis.clients.jedis.HostAndPort
Detailed message:
Error: Class initialization failed: redis.clients.jedis.HostAndPort
Original exception that caused the problem: java.lang.NoSuchMethodError:
org.slf4j.impl.StaticLoggerBinder.getSingleton()Lorg/slf4j/impl/StaticLogger
Binder;
at org.slf4j.LoggerFactory.bind(LoggerFactory.java:150)
Sample: Redis 52
• リフレクションやDynamicProxyの制限
–外部設定でいろいろ指定してあげる
–初期化を遅延させたり
$ native-image --no-server ¥
--allow-incomplete-classpath ¥
--delay-class-initialization-to-
runtime=redis.clients.jedis.HostAndPort ¥
-jar target/hello-1.0-SNAPSHOT.jar
Sample: Redis 53
• これでRedisの利用はできます
• このようにLogger, リフレクション, Proxy
を利用しているところは、外から設定を追
加していく必要があります。
$ ./hello-1.0-SNAPSHOT
value: bar
サンプル
MySQL JDBC Driver
Sample: MySQL JDBC Driver 55
• JDBCをNativeImage化するのは辛みがあ
る!!
Class.forName("com.mysql.cj.jdbc.Driver");
String url = “jdbc:mysql://127.0.0.1:3306/mysql?..(省略)";
try (Connection conn = DriverManager.getConnection(url,
"root", "" )) {
try (PreparedStatement pst = conn.prepareStatement("select
help_keyword_id, name from mysql.help_keyword")) {
try (ResultSet rs = pst.executeQuery()) {
while (rs.next()) {
int id = rs.getInt(1);
String name = rs.getString(2);
System.out.printf("%10d -> %s%n", id, name);
}
}
}
}
Sample: MySQL JDBC Driver 56
• リフレクションで生成されるクラスを書い
ていく
-H:ReflectionConfigurationFiles=app.json
[
{
"name" : "com.mysql.cj.conf.url.SingleConnectionUrl",
"allDeclaredConstructors" : true,
"allPublicConstructors" : true,
"allDeclaredMethods" : true,
"allPublicMethods" : true
}, /* … */
]
Sample: MySQL JDBC Driver 57
• 例えば、接続URLによって5種類の
ConnectionUrlクラスを動的に生成する
https://github.com/mysql/mysql-connector-j/blob/8.0.13/src/main/
core-api/java/com/mysql/cj/conf/ConnectionUrl.java#L199
Sample: MySQL JDBC Driver 58
• ひたすら書いていく..
[
{
"name" : "com.mysql.cj.conf.url.SingleConnectionUrl",
},
{
"name" : "com.mysql.cj.conf.url.FailoverConnectionUrl",
},
{
"name" : "com.mysql.cj.conf.url.LoadbalanceConnectionUrl",
},
{
"name" : "com.mysql.cj.conf.url.ReplicationConnectionUrl",
},
]
Sample: MySQL JDBC Driver 59
• 時にはクラスを書き換える!!
import com.oracle.svm.core.annotate.*;
@TargetClass(com.mysql.cj.log.LogFactory.class)
final class my_replace_test1 {
@Substitute
public static Log getLogger(String className, String
instanceName) {
//return new com.mysql.cj.log.NullLogger(instanceName);
return new com.mysql.cj.log.StandardLogger(instanceName);
}
}
https://github.com/mysql/mysql-connector-j/blob/8.0.13/src/main/core-impl/java/com/mysql/cj/log/LogFactory.java
Sample: MySQL JDBC Driver 60
• Compile時に実装を乗っ取ることができる
– AOPのCompile Time版みたいなイメージ
import com.oracle.svm.core.annotate.*;
@TargetClass(com.mysql.cj.log.LogFactory.class)
final class my_replace_test1 {
@Substitute
public static Log getLogger(String className, String
instanceName) {
//return new com.mysql.cj.log.NullLogger(instanceName);
return new com.mysql.cj.log.StandardLogger(instanceName);
}
}
• jre/lib/svm/builder/svm.jarをリンクする
Sample: MySQL JDBC Driver 61
• StandardSocketFactory
• NativeProtocol
• このあたりまで潜ったけど、connection
errorを解決できず.. time over
誰か挑戦してください!!
SpringBootを使う
Sample: SpringBoot 63
• こちらを参照ください
– https://github.com/dsyer/spring-boot-micro-apps/
• ちゃんと動いている
• すごい頑張っている..
Sample: SpringBoot 64
SpringBootが40msで起動している
スゴイ!!
Sample: SpringBoot 65
• でも昨日試したらLogger周りでエラー出る
!
サンプル
NodeJSのSingle Binary生成
Sample: NodeJS Single Binary 67
• 今までの機能を使えばNodeJSでも
SingleBinaryが作れるのでは?
できます!!
Sample: NodeJS Single Binary 68
• Polyglotでjsを呼び出すサンプル
import org.graalvm.polyglot.*;
public class JSNative {
public static void main(String[] args) {
try (Context context = Context.create("js")) {
context.eval("js", "console.log('hello');");
} catch (PolyglotException e) {
e.printStackTrace();
}
}
}
Sample: NodeJS Single Binary 69
• ビルドする
– めっちゃ重い
– メモリ6GBくらい消費する
– CPUもほぼ全部ぶんまわる
$ javac -cp $GRAAL_HOME/jre/lib/boot/graal-sdk.jar
JSNative.java
$ native-image --language:js --tool:truffle --no-server
JSNative
Sample: NodeJS Single Binary 70
• できた!!
– サイズはでかい..
$ ./jsnative
hello
$ ls -hs ./jsnative
65M ./jsnative
サンプル
RubyのSingle Binary生成
Sample: Ruby Single Binary 72
• 同じ感じで出来ます
$ javac -cp $GRAAL_HOME/jre/lib/boot/graal-sdk.jar
RubyNative.java
$ native-image --language:ruby --tool:truffle --no-server
RubyNative
Sample: Ruby Single Binary 73
• 今はNodeやRubyを直接Native化でき
ない
• JavaからPolyglot使えば出来る
制限事項
制限事項
• 基本的にはここに書いてあります
• https://github.com/oracle/graal/blob/master/substratevm/LIMITATIONS.md
• いくつかピックアップ
–Static Initializer
–Synchronized
–Lambda/INDY
–Dynamic Proxy / Reflection
75
制限事項: static initializer
制限事項: Static Initializer
• CompileTimeに実行される
–動的な処理は避ける
77
public class StaticInitializersSample {
private static final int MyConstInt;
private static final String MyConstString;
static {
MyConstInt = 20181215;
MyConstString = "JJUG CCC";
System.out.println("static init");
}
public static void main(String[] args) {
System.out.println(MyConstInt);
System.out.println(MyConstString);
System.out.println("main print");
}
}
制限事項: Static Initializer
• ビルド
78
$ javac StaticInitializersSample.java
$ native-image StaticInitializersSample
Build on Server(pid: 14906, port: 46301)
[staticinitializerssample:14906] classlist: 251.47 ms
[staticinitializerssample:14906] (cap): 645.03 ms
[staticinitializerssample:14906] setup: 942.31 ms
static init
[staticinitializerssample:14906] (typeflow): 2,296.96 ms
…
コンパイル時に実行される
制限事項: Static Initializer
• 実行
79
$ ./staticinitializerssample
20181215
JJUG CCC
main print
static {} は実行されない!!
→ static initは表示されない
制限事項: Static Initializer
• こういうコードは危険
80
public class MyInit {
private static String defaultEnv = "dev";
static {
String env = System.getenv("MY_ENV");
if (env != null) defaultEnv = env;
}
public static void main(String[] args) {
System.out.println("env=" + defaultEnv);
}
}
$ java MyInit
env=dev
$ MY_ENV=stg java MyInit
env=stg
Java
制限事項: Static Initializer
• こういうコードは危険
81
public class MyInit {
private static String defaultEnv = "dev";
static {
String env = System.getenv("MY_ENV");
if (env != null) defaultEnv = env;
}
public static void main(String[] args) {
System.out.println("env=" + defaultEnv);
}
}
$ MY_ENV=prod native-image --no-server MyInit
$ ./myinit
env=prod
$ MY_ENV=stg ./myinit
env=prod
Native
制限事項: Static Initializer
• 回避策
– --rerun-class-initialization-at-runtime
– カンマ区切りでクラスを渡す
– 実行時にstatic initializerを実行する
82
$ native-image ¥
--rerun-class-initialization-at-runtime=MyInit ¥
--no-server MyInit
$ ./myinit
env=prod
$ MY_ENV=dev ./myinit
env=dev
制限事項: synchronized
制限事項: synchronized
• java.util.concurrent.locksが利用される
– エスケープ解析が実行されないので、不要な同期処理で
も実行されてしまう
– HotSpot VMよりも不利
84
制限事項: synchronized 85
import java.util.ArrayList;
public class Sync2 {
static String hoge() {
ArrayList<String> v = new ArrayList<>();
v.add("Me"); v.add("You"); v.add("Her");
return v.toString();
}
public static void main(String[] args) {
for (int i = 0; i < 10000000; i++) {
String v = hoge();
}
}
}
real 0m2.099s
user 0m3.578s
sys 0m0.393s
real 0m1.700s
user 0m1.591s
sys 0m0.102s
Java Native
Synchronized無しは
Nativeの方が若干速いけど、
制限事項: synchronized 86
import java.util.Vector;
public class Sync2 {
static String hoge() {
Vector<String> v = new Vector<>();
v.add("Me"); v.add("You"); v.add("Her");
return v.toString();
}
public static void main(String[] args) {
for (int i = 0; i < 10000000; i++) {
String v = hoge();
}
}
}
real 0m2.075s
user 0m3.789s
sys 0m0.238s
real 0m4.004s
user 0m3.901s
sys 0m0.090s
Java Native
Synchronizedがあると、
Nativeはとても遅い!!
制限事項: Lambda/INDY
制限事項: Lambda/Indy
• InvokeDynamicはサポートされない
• LambdaはInvokeDynamic
–Lambda自体はサポートされる
• RunTimeではなくCompileTime
88
制限事項: Dynamic Proxy / Reflection
制限事項:Dynamic Proxy/Reflection
• 今までのサンプルを見て分かったと思
います..
• 詳細はこちらを
– https://github.com/oracle/graal/blob/master/substratevm/DYNAMIC_PROXY.md
90
まとめ
まとめ
• GraalVMは日々進化しています
– まだ出来ない事も多い
– そのうち出来るようになる
• Polyglot / Native Imageで
Happy Hacking!!
92

More Related Content

What's hot

イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知るShuhei Fujita
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
佑哉 廣岡
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
Taku Miyakawa
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
Amazon Web Services Japan
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
ichirin2501
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
Tetsutaro Watanabe
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
Takuto Wada
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
土岐 孝平
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
Y Watanabe
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
Takuto Wada
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
Yoshitaka Kawashima
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
NTT DATA Technology & Innovation
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
Yahoo!デベロッパーネットワーク
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
onozaty
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
Amazon Web Services Japan
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
yoku0825
 
Metaspace
MetaspaceMetaspace
Metaspace
Yasumasa Suenaga
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
NTT DATA Technology & Innovation
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
kwatch
 
コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!
オラクルエンジニア通信
 

What's hot (20)

イベント・ソーシングを知る
イベント・ソーシングを知るイベント・ソーシングを知る
イベント・ソーシングを知る
 
JVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニングJVMのGCアルゴリズムとチューニング
JVMのGCアルゴリズムとチューニング
 
Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方Javaのログ出力: 道具と考え方
Javaのログ出力: 道具と考え方
 
マルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのことマルチテナント化で知っておきたいデータベースのこと
マルチテナント化で知っておきたいデータベースのこと
 
なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?なかったらINSERTしたいし、あるならロック取りたいやん?
なかったらINSERTしたいし、あるならロック取りたいやん?
 
MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法MongoDBが遅いときの切り分け方法
MongoDBが遅いときの切り分け方法
 
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
SQLアンチパターン - 開発者を待ち受ける25の落とし穴 (拡大版)
 
怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション怖くないSpring Bootのオートコンフィグレーション
怖くないSpring Bootのオートコンフィグレーション
 
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
 
例外設計における大罪
例外設計における大罪例外設計における大罪
例外設計における大罪
 
Mavenの真実とウソ
Mavenの真実とウソMavenの真実とウソ
Mavenの真実とウソ
 
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
今こそ知りたいSpring Batch(Spring Fest 2020講演資料)
 
ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開ヤフー社内でやってるMySQLチューニングセミナー大公開
ヤフー社内でやってるMySQLチューニングセミナー大公開
 
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
今からでも遅くないDBマイグレーション - Flyway と SchemaSpy の紹介 -
 
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
[Aurora事例祭り]Amazon Aurora を使いこなすためのベストプラクティス
 
MySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいことMySQL 5.7にやられないためにおぼえておいてほしいこと
MySQL 5.7にやられないためにおぼえておいてほしいこと
 
Metaspace
MetaspaceMetaspace
Metaspace
 
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
PostgreSQLのロール管理とその注意点(Open Source Conference 2022 Online/Osaka 発表資料)
 
O/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐO/Rマッパーによるトラブルを未然に防ぐ
O/Rマッパーによるトラブルを未然に防ぐ
 
コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!コンテナ環境でJavaイメージを小さくする方法!
コンテナ環境でJavaイメージを小さくする方法!
 

Similar to Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2

Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
Kazuhiro Hara
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Akira Shimosako
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
shigeki_ohtsu
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradlekimukou_26 Kimukou
 
Yesod on Heroku
Yesod on HerokuYesod on Heroku
Yesod on Heroku
Takahiro Himura
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
Tsuyoshi Yamamoto
 
sbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころsbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころ
Kazuhiro Hara
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!Yohei Fushii
 
Sbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞSbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
Yoshitaka Fujii
 
Cloud OS「Apache CloudStack」をお手軽に使ってみる方法
Cloud OS「Apache CloudStack」をお手軽に使ってみる方法Cloud OS「Apache CloudStack」をお手軽に使ってみる方法
Cloud OS「Apache CloudStack」をお手軽に使ってみる方法
samemoon
 
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイPlaybay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイKazuhiro Hara
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングterurou
 
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC WebアプリケーションPlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
Kazuhiro Hara
 
Inside frogc in Dart
Inside frogc in DartInside frogc in Dart
Inside frogc in Dart
Goro Fuji
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
Nobuhiro Sue
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料
cryks
 
TruffleSqueakの紹介
TruffleSqueakの紹介TruffleSqueakの紹介
TruffleSqueakの紹介
Masashi Umezawa
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Koichi Sakata
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
Kiwamu Okabe
 

Similar to Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2 (20)

Play framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレードPlay framework 2.0のおすすめと1.2からのアップグレード
Play framework 2.0のおすすめと1.2からのアップグレード
 
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみようGroovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
 
node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成node-gypを使ったネイティブモジュールの作成
node-gypを使ったネイティブモジュールの作成
 
明日から使えるgradle
明日から使えるgradle明日から使えるgradle
明日から使えるgradle
 
Yesod on Heroku
Yesod on HerokuYesod on Heroku
Yesod on Heroku
 
Grailsのススメ(仮)
Grailsのススメ(仮)Grailsのススメ(仮)
Grailsのススメ(仮)
 
sbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころsbtマルチプロジェクトビルドの使いどころ
sbtマルチプロジェクトビルドの使いどころ
 
ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!ホームディレクトリに埋もれた便利なコードをさがせ!
ホームディレクトリに埋もれた便利なコードをさがせ!
 
Sbtのマルチプロジェクトはいいぞ
SbtのマルチプロジェクトはいいぞSbtのマルチプロジェクトはいいぞ
Sbtのマルチプロジェクトはいいぞ
 
Cloud OS「Apache CloudStack」をお手軽に使ってみる方法
Cloud OS「Apache CloudStack」をお手軽に使ってみる方法Cloud OS「Apache CloudStack」をお手軽に使ってみる方法
Cloud OS「Apache CloudStack」をお手軽に使ってみる方法
 
Playbay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイPlaybay Play 2.0 plugin イロハのイ
Playbay Play 2.0 plugin イロハのイ
 
DLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミングDLR言語によるSilverlightプログラミング
DLR言語によるSilverlightプログラミング
 
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC WebアプリケーションPlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
PlayFramework 2.0 Javaと WebSocketでつくる リアルタイムMVC Webアプリケーション
 
Inside frogc in Dart
Inside frogc in DartInside frogc in Dart
Inside frogc in Dart
 
Grails 2.0.0.M1の話
Grails 2.0.0.M1の話 Grails 2.0.0.M1の話
Grails 2.0.0.M1の話
 
Gws 20130315 gradle_handson
Gws 20130315 gradle_handsonGws 20130315 gradle_handson
Gws 20130315 gradle_handson
 
第8回KPF発表資料
第8回KPF発表資料第8回KPF発表資料
第8回KPF発表資料
 
TruffleSqueakの紹介
TruffleSqueakの紹介TruffleSqueakの紹介
TruffleSqueakの紹介
 
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
Guide to GraalVM (Oracle Groundbreakers APAC 2019 Tour in Tokyo)
 
ocamloptの全体像
ocamloptの全体像ocamloptの全体像
ocamloptの全体像
 

More from tamtam180

Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
tamtam180
 
Japanese font test
Japanese font testJapanese font test
Japanese font test
tamtam180
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
tamtam180
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180
 
PipelineDBとは?
PipelineDBとは?PipelineDBとは?
PipelineDBとは?
tamtam180
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツールtamtam180
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented featuretamtam180
 

More from tamtam180 (7)

Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
Introduction httpClient on Java11 / Java11時代のHTTPアクセス再入門
 
Japanese font test
Japanese font testJapanese font test
Japanese font test
 
Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)Getting Started GraalVM (再アップロード)
Getting Started GraalVM (再アップロード)
 
jjugccc2018 app review postmortem
jjugccc2018 app review postmortemjjugccc2018 app review postmortem
jjugccc2018 app review postmortem
 
PipelineDBとは?
PipelineDBとは?PipelineDBとは?
PipelineDBとは?
 
動画共有ツール
動画共有ツール動画共有ツール
動画共有ツール
 
Hive undocumented feature
Hive undocumented featureHive undocumented feature
Hive undocumented feature
 

Recently uploaded

This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
chiefujita1
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
Osaka University
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
t m
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
Toru Tamaki
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
Takayuki Nakayama
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
azuma satoshi
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
CRI Japan, Inc.
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
Matsushita Laboratory
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
tazaki1
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
嶋 是一 (Yoshikazu SHIMA)
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
osamut
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
harmonylab
 

Recently uploaded (12)

This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.This is the company presentation material of RIZAP Technologies, Inc.
This is the company presentation material of RIZAP Technologies, Inc.
 
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
生成AIがもたらすコンテンツ経済圏の新時代  The New Era of Content Economy Brought by Generative AI
 
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
遺伝的アルゴリズムと知識蒸留による大規模言語モデル(LLM)の学習とハイパーパラメータ最適化
 
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
論文紹介:Deep Learning-Based Human Pose Estimation: A Survey
 
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援しますキンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
キンドリル ネットワークアセスメントサービスご紹介 今のネットワーク環境は大丈夫? 調査〜対策までご支援します
 
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobodyロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
ロジックから状態を分離する技術/設計ナイト2024 by わいとん @ytnobody
 
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアルLoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
LoRaWAN 4チャンネル電流センサー・コンバーター CS01-LB 日本語マニュアル
 
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
ReonHata_便利の副作用に気づかせるための発想支援手法の評価---行為の増減の提示による気づきへの影響---
 
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライドHumanoid Virtual Athletics Challenge2024 技術講習会 スライド
Humanoid Virtual Athletics Challenge2024 技術講習会 スライド
 
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
「進化するアプリ イマ×ミライ ~生成AIアプリへ続く道と新時代のアプリとは~」Interop24Tokyo APPS JAPAN B1-01講演
 
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMMハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
ハイブリッドクラウド研究会_Hyper-VとSystem Center Virtual Machine Manager セッションMM
 
Generating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language ModelsGenerating Automatic Feedback on UI Mockups with Large Language Models
Generating Automatic Feedback on UI Mockups with Large Language Models
 

Getting Started GraalVM / GraalVM超入門 #jjug_ccc #ccc_c2