{"id":1153,"date":"2020-11-16T13:26:13","date_gmt":"2020-11-16T12:26:13","guid":{"rendered":"https:\/\/www.loicmathieu.fr\/wordpress\/?p=1153"},"modified":"2020-11-16T13:27:58","modified_gmt":"2020-11-16T12:27:58","slug":"profiler-une-image-native-graalvm-avec-perf","status":"publish","type":"post","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/profiler-une-image-native-graalvm-avec-perf\/","title":{"rendered":"Profiler une image native GraalVM avec perf"},"content":{"rendered":"<p>L&rsquo;outil GraalVM native-image permet de g\u00e9n\u00e9rer un ex\u00e9cutable natif (ou image native) depuis votre application Java.<\/p>\n<p>Cet ex\u00e9cutable natif va d\u00e9marrer tr\u00e8s rapidement et avoir une empreinte m\u00e9moire beaucoup plus faible qu&rsquo;une application Java traditionnelle; au prix de performances en pic r\u00e9duites et d&rsquo;un temps de cr\u00e9ation de ce package natif assez \u00e9lev\u00e9. Plus d&rsquo;informations sur les ex\u00e9cutables natifs <a href=\"https:\/\/www.graalvm.org\/reference-manual\/native-image\/\" target=\"_blank\" rel=\"noopener noreferrer\">ici<\/a>.<\/p>\n<p>Un ex\u00e9cutable natif contient une JVM minimaliste appel\u00e9e SubstratVM, celle-ci a quelques limitations :<\/p>\n<ul><li>Support partiel de la reflection<\/li>\n\n<li>Support partiel des proxies dynamiques<\/li>\n\n<li>Support partiel du chargement dynamique des classes<\/li>\n\n<li>Pas de JNI<\/li>\n\n<li>Pas de JVMTI<\/li>\n<\/ul>\n<p>Pas de support de <strong>JVMTI<\/strong> signifie pas de support des agents Java, de JMX, des profilers Java, des debuggers Java, de Java Flight Recorder et Java Mission Control, ainsi que de tous les outils livr\u00e9s avec le JDK (jps, jstack, jmap).<\/p>\n<p>Pour tous les besoins couverts par ces outils, il faut donc utiliser une solution int\u00e9gr\u00e9e \u00e0 l&rsquo;application (par exemple, remplacer les m\u00e9triques JMX par des m\u00e9triques Prometheus), ou des outils standards fournit par votre syst\u00e8me d&rsquo;exploitation.<\/p>\n<p>Pour profiler l&rsquo;ex\u00e9cution d&rsquo;une application, l&rsquo;OS Linux a un outil tr\u00e8s puissant : <strong>perf<\/strong>.<\/p>\n<p>L&rsquo;outil perf a de nombreuses fonctionnalit\u00e9s, il peut acc\u00e9der \u00e0 toutes les m\u00e9triques de l&rsquo;OS et du CPU (performance counters, d&rsquo;o\u00f9 son nom : perf) et profiler l&rsquo;application de plein de mani\u00e8res diff\u00e9rentes.<\/p>\n<h3>Utiliser perf pour profiler le CPU<\/h3>\n<p>L&rsquo;outil perf va utiliser les symboles int\u00e9gr\u00e9s au binaire de votre application pour faire le lien entre un pointeur m\u00e9moire et la m\u00e9thode Java correspondante (ou l&rsquo;appel syst\u00e8me).<\/p>\n<p>Par d\u00e9faut, ces symboles ne sont pas int\u00e9gr\u00e9s aux ex\u00e9cutables natifs, il faut donc demander \u00e0 l&rsquo;outil native-image de les y laisser via les options <code>H:-DeleteLocalSymbols -H:+PreserveFramePointer<\/code>.<\/p>\n<p>Si vous voulez testez ces \u00e9tapes, vous pouvez utiliser l&rsquo;application <a href=\"https:\/\/github.com\/quarkusio\/quarkus-quickstarts\/tree\/master\/getting-started\" target=\"_blank\" rel=\"noopener noreferrer\">getting-started<\/a> de Quarkus. Quarkus a un support facilit\u00e9 de l&rsquo;outil native-image, il suffit d&rsquo;ajouter \u00e0 l&rsquo;<code>application.properties<\/code> de votre application la propri\u00e9t\u00e9 <code>quarkus.native.additional-build-args=-H:-DeleteLocalSymbols,-H:+PreserveFramePointer<\/code> et celui-ci va automatiquement ajouter ces options \u00e0 la ligne de commande de l&rsquo;outil native-image.<\/p>\n<p>Apr\u00e8s avoir g\u00e9n\u00e9r\u00e9 votre ex\u00e9cutable natif, vous pouvez le lancer, puis r\u00e9cup\u00e9rer son PID; nous utiliserons celui-ci dans la ligne de commande de l&rsquo;outil perf.<\/p>\n<p>Une fois votre application lanc\u00e9e, et id\u00e9alement sous charge (vous pouvez utiliser un outil tel que wrk pour g\u00e9n\u00e9rer de la charge), vous pouvez la profiler via la commande perf suivante : <code>perf record -F 99 -p PID --call-graph dwarf sleep 10<\/code>.<\/p>\n<ul><li><strong>record<\/strong> : demande \u00e0 perf de commencer \u00e0 profiler l&rsquo;application.<\/li>\n\n<li><strong>-F 99<\/strong> : profile \u00e0 99 Hertz, ce qui veut dire 99 samples par seconde.<\/li>\n\n<li><strong>-p PID<\/strong> : demande \u00e0 perf de profiler ce PID en particulier (celui de votre application).<\/li>\n\n<li><strong>&#8211;call-graph dwarf<\/strong> : indique \u00e0 perf d&rsquo;utiliser les symboles int\u00e9gr\u00e9s \u00e0 votre application (symbole ELF).<\/li>\n\n<li><strong>sleep 10<\/strong> : comme perf profile un PID et pas une commande, il faut lui passer une commande \u00e0 ex\u00e9cuter. Quand cette commande sera termin\u00e9e, perf arr\u00eatera le profilage de votre application. En utilisant <code>sleep 10<\/code> comme commande, on va donc profiler l&rsquo;application pendant 10 secondes.<\/li>\n<\/ul>\n<p>Quand la commande est termin\u00e9e, perf aura g\u00e9n\u00e9r\u00e9 un fichier de donn\u00e9es qui contiendra le profil de votre application (profil CPU ici, car on ne lui a pas pr\u00e9cis\u00e9 quel \u00e9v\u00e9nement il devait profiler) : <code>perf.data<\/code>.<\/p>\n<p>Vous pouvez utiliser la commande suivante pour visualiser ce profil dans la console : <code>perf report --stdio<\/code>, vous aurez alors un r\u00e9sultat proche de celui-ci :<\/p>\n<pre># Children      Self  Command          Shared Object                        Symbol                                                                                                                        &gt;\n# ........  ........  ...............  ...................................  ..............................................................................................................................&gt;\n#\n    13.47%     0.00%  tloop-thread-19  libpthread-2.31.so                   [.] start_thread\n            |\n            ---start_thread\n               IsolateEnterStub_PosixJavaThreads_pthreadStartRoutine_e1f4a8c0039f8337338252cd8734f63a79b5e3df_06195ea7c1ac11d884862c6f069b026336aa4f8c\n               JavaThreads_threadStartRoutine_241bd8ce6d5858d439c83fac40308278d1b55d23\n               Thread_run_857ee078f8137062fcf27275732adf5c4870652a\n               FastThreadLocalRunnable_run_0329ad2c5210a091812879bcecd155c58e561e60\n               ThreadExecutorMap$2_run_66c8943ee6536a10df07f979fb6cd278adcf96bc\n               SingleThreadEventExecutor$4_run_1b47df7867e302a2fb7f28d7657a73e92f89d91f\n               |          \n               |--12.64%--NioEventLoop_run_be89580b4d16514bef6e948913d2ed21c5e4f679\n               |          |          \n               |          |--5.14%--NioEventLoop_processSelectedKeys_9a76c58d657b781ee037bbb65f41f01d2eb54e7c\n               |          |          NioEventLoop_processSelectedKeysOptimized_c36ca161e53573665bc03cb5392e91c123bcd359\n               |          |          NioEventLoop_processSelectedKey_3a0d92ce472db6c251df4485227a85acb9d3a1ca\n               |          |          AbstractNioByteChannel$NioByteUnsafe_read_45358e803c643a6380776021e488e79d981b159d\n<\/pre>\n<p>Et ce sur des milliers de lignes &#8230; pas facile \u00e0 analyser hein ?<\/p>\n<p>Pour analyser facilement un profil g\u00e9n\u00e9r\u00e9 par perf, on peut utiliser l&rsquo;outil FlameGraph, accessible ici : <a href=\"https:\/\/github.com\/brendangregg\/FlameGraph\" target=\"_blank\" rel=\"noopener noreferrer\"><a href=\"https:\/\/github.com\/brendangregg\/FlameGraph\">https:\/\/github.com\/brendangregg\/FlameGraph<\/a><\/a><\/p>\n<p>Un FlameGraph est une mani\u00e8re de visualiser le profil d&rsquo;une application permettant de d\u00e9tecter instantan\u00e9ment le chemin de code le plus fr\u00e9quent. Il va afficher, en abscisse, la population (g\u00e9n\u00e9ralement la m\u00e9thode) dont la taille est proportionnelle aux nombres de samples du profil, et en ordonn\u00e9e la profondeur dans la stack. Plus d&rsquo;informations sur les FlameGraphs <a href=\"http:\/\/www.brendangregg.com\/flamegraphs.html\" target=\"_blank\" rel=\"noopener noreferrer\">ici<\/a>.<\/p>\n<p>On peut noter un petit soucis dans les donn\u00e9es de profil, la colonne <strong>Command<\/strong> au lieu de contenir la commande pass\u00e9e, contient le nom du thread (tronqu\u00e9 qui plus est). C&rsquo;est un bug dans l&rsquo;outil native-image, pour le contourner, nous allons utiliser <strong>sed<\/strong> pour modifier les donn\u00e9es de profil avant des les utiliser dans l&rsquo;outil FlameGraph. La valeur de la colonne <strong>Command<\/strong> se retrouve \u00e0 la base du FlameGraph, elle doit normalement \u00eatre unique pour que l&rsquo;aggr\u00e9gation des stacks se fassent.<\/p>\n<p>La premi\u00e8re \u00e9tape est d&rsquo;utiliser <code>perf script<\/code> pour extraire les donn\u00e9es du profil dans un format textuel, puis d&rsquo;utiliser <code>sed<\/code> pour corriger les probl\u00e8mes de nom de commande pour pouvoir ensuite g\u00e9n\u00e9rer un FlameGraph.<\/p>\n<pre>perf script &gt; out.perf\nsed -i -E \"s\/cutor-thread-[0-9]*\/executor-thread\/\" out.perf\nsed -i -E \"s\/ntloop-thread-[0-9]*\/eventloop-thread\/\" out.perf\nsed -i -E \"s\/tloop-thread-[0-9]*\/eventloop-thread\/\" out.perf\n~\/FlameGraph\/stackcollapse-perf.pl out.perf | ~FlameGraph\/flamegraph.pl &gt; perf.svg\n<\/pre>\n<p>Voici un exemple de FlameGraph g\u00e9n\u00e9r\u00e9 :<\/p>\n<img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1158\" src=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/flamegraph-1.png?resize=640%2C502&#038;ssl=1\" alt=\"\" width=\"640\" height=\"502\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/flamegraph-1.png?w=957&amp;ssl=1 957w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/flamegraph-1.png?resize=300%2C235&amp;ssl=1 300w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/flamegraph-1.png?resize=768%2C603&amp;ssl=1 768w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/flamegraph-1.png?resize=344%2C270&amp;ssl=1 344w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/>\n<p>Ce que j\u2019appr\u00e9cie le plus avec les FlameGraphs c&rsquo;est que l&rsquo;on peut zoomer dessus en cliquant sur une frame :<\/p>\n<img data-recalc-dims=\"1\" loading=\"lazy\" decoding=\"async\" class=\"alignnone size-full wp-image-1159\" src=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/flamegraph-2.png?resize=640%2C615&#038;ssl=1\" alt=\"\" width=\"640\" height=\"615\" srcset=\"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/flamegraph-2.png?w=959&amp;ssl=1 959w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/flamegraph-2.png?resize=300%2C288&amp;ssl=1 300w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/flamegraph-2.png?resize=768%2C738&amp;ssl=1 768w, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/flamegraph-2.png?resize=281%2C270&amp;ssl=1 281w\" sizes=\"auto, (max-width: 640px) 100vw, 640px\" \/>\n<h3>Utiliser perf pour profiler la m\u00e9moire<\/h3>\n<p>Pour profiler la m\u00e9moire, nous allons utiliser la m\u00eame technique avec une commande l\u00e9g\u00e8rement modifi\u00e9e.<\/p>\n<p>Il y a plusieurs mani\u00e8res de profiler la m\u00e9moire avec perf, on peut demander \u00e0 perf d&rsquo;enregistrer des \u00e9v\u00e9nements OS li\u00e9s \u00e0 la m\u00e9moire, profiler une des m\u00e9thodes syst\u00e8me qui alloue la m\u00e9moire, ou utiliser <code>pef mem<\/code>. C&rsquo;est cette derni\u00e8re solution que l&rsquo;on va utiliser.<\/p>\n<p>Pour cela, il faut d\u00e9marrer votre application via l&rsquo;outil perf : <code>perf mem record --call-graph dwarf -F 99 .\/getting-started-1.0-SNAPSHOT-runner<\/code>.<\/p>\n<p>Quand l&rsquo;application s&rsquo;arr\u00eate, perf va enregistrer sur le disque les donn\u00e9es de profil qui pourront alors \u00eatre utilis\u00e9es de la m\u00eame mani\u00e8re que celles du profil CPU (via perf report, perf script et l&rsquo;outil FlameGraph).<\/p>\n<h3>Pour aller plus loin<\/h3>\n<p>Un talk que j&rsquo;ai donn\u00e9 sur le sujet (en anglais), d\u00e9marre \u00e0 la minute 44 : <a href=\"https:\/\/www.youtube.com\/watch?v=TXnJ9eyoEhw\" target=\"_blank\" rel=\"noopener noreferrer\"><iframe loading=\"lazy\" width=\"356\" height=\"200\" src=\"https:\/\/www.youtube.com\/embed\/TXnJ9eyoEhw?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" allowfullscreen title=\"RemoteClazz Singapore - Engineering Applications with GraalVM\"><\/iframe><\/a>.<\/p>\n<p>Des conseils pour utiliser perf avec plein de recettes toutes faites : <a href=\"http:\/\/www.brendangregg.com\/perf.htm\" target=\"_blank\" rel=\"noopener noreferrer\"><a href=\"http:\/\/www.brendangregg.com\/perf.html\">http:\/\/www.brendangregg.com\/perf.html<\/a><\/a>.<\/p>\n<p>Un article d\u00e9crivant en d\u00e9tail ce qu&rsquo;est un FlameGraph : <a href=\"https:\/\/queue.acm.org\/detail.cfm?id=2927301\" target=\"_blank\" rel=\"noopener noreferrer\"><a href=\"https:\/\/queue.acm.org\/detail.cfm?id=2927301\">https:\/\/queue.acm.org\/detail.cfm?id=2927301<\/a><\/a>.<\/p>","protected":false},"excerpt":{"rendered":"<p>L&rsquo;outil GraalVM native-image permet de g\u00e9n\u00e9rer un ex\u00e9cutable natif (ou image native) depuis votre application Java. Cet ex\u00e9cutable natif va d\u00e9marrer tr\u00e8s rapidement et avoir une empreinte m\u00e9moire beaucoup plus faible qu&rsquo;une application Java traditionnelle; au prix de performances en pic r\u00e9duites et d&rsquo;un temps de cr\u00e9ation de ce package natif assez \u00e9lev\u00e9. Plus d&rsquo;informations sur les ex\u00e9cutables natifs ici. Un ex\u00e9cutable natif contient une JVM minimaliste appel\u00e9e SubstratVM, celle-ci a quelques limitations : Support partiel de la reflection Support&#8230;<p class=\"read-more\"><a class=\"btn btn-default\" href=\"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/profiler-une-image-native-graalvm-avec-perf\/\">Lire la suite<span class=\"screen-reader-text\"> Lire la suite<\/span><\/a><\/p><\/p>","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"jetpack_post_was_ever_published":false,"_jetpack_newsletter_access":"","_jetpack_dont_email_post_to_subs":false,"_jetpack_newsletter_tier_id":0,"_jetpack_memberships_contains_paywalled_content":false,"_jetpack_memberships_contains_paid_content":false,"activitypub_content_warning":"","activitypub_content_visibility":"","activitypub_max_image_attachments":4,"activitypub_interaction_policy_quote":"anyone","activitypub_status":"","footnotes":"","jetpack_publicize_message":"","jetpack_publicize_feature_enabled":true,"jetpack_social_post_already_shared":true,"jetpack_social_options":{"image_generator_settings":{"template":"highway","default_image_id":0,"font":"","enabled":false},"version":2}},"categories":[9],"tags":[170,159,187],"class_list":["post-1153","post","type-post","status-publish","format-standard","hentry","category-informatique","tag-graalvm","tag-performance","tag-profiling"],"aioseo_notices":[],"jetpack_publicize_connections":[],"jetpack_featured_media_url":"","jetpack_sharing_enabled":true,"jetpack_likes_enabled":true,"jetpack-related-posts":[{"id":1090,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/quarkus-jlink-et-application-class-data-sharing-appcds\/","url_meta":{"origin":1153,"position":0},"title":"Quarkus, jlink et Application Class Data Sharing (AppCDS)","author":"admin","date":"vendredi 29 mai 2020","format":false,"excerpt":"Quarkus est optimis\u00e9 pour d\u00e9marrer rapidement et avoir une empreinte m\u00e9moire tr\u00e8s faible. Ceci est vrai en d\u00e9ployant dans une JVM standard mais encore plus en d\u00e9ployant notre application comme un ex\u00e9cutable natif via GraalVM. Quarkus facilite grandement la cr\u00e9ation d\u2019ex\u00e9cutable natif, gr\u00e2ce \u00e0 \u00e7a, une application Quarkus d\u00e9marre en\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/quarkus_metrics_graphic_bootmem_wide-1024x473.png?resize=350%2C200&ssl=1","width":350,"height":200,"srcset":"https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/quarkus_metrics_graphic_bootmem_wide-1024x473.png?resize=350%2C200&ssl=1 1x, https:\/\/i0.wp.com\/loicmathieu.fr\/wordpress\/wp-content\/uploads\/quarkus_metrics_graphic_bootmem_wide-1024x473.png?resize=525%2C300&ssl=1 1.5x"},"classes":[]},{"id":1877,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/java-24-quoi-de-neuf\/","url_meta":{"origin":1153,"position":1},"title":"Java 24 : quoi de neuf ?","author":"admin","date":"vendredi 10 janvier 2025","format":false,"excerpt":"Maintenant que Java 24 est features complete (Rampdown Phase One au jour d\u2019\u00e9criture de l\u2019article), c\u2019est le moment de faire le tour des fonctionnalit\u00e9s qu\u2019apporte cette nouvelle version, \u00e0 nous, les d\u00e9veloppeurs. Cet article fait partie d\u2019une suite d\u2019article sur les nouveaut\u00e9s des derni\u00e8res versions de Java, pour ceux qui\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1353,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/quarkus-tip-comment-ne-pas-creer-une-extension-quarkus\/","url_meta":{"origin":1153,"position":2},"title":"Quarkus Tip : Comment NE PAS cr\u00e9er une extension Quarkus","author":"admin","date":"mardi 16 novembre 2021","format":false,"excerpt":"Quand on d\u00e9veloppe une application compos\u00e9e de plusieurs composants, il est fr\u00e9quent de vouloir partager du code dans une librairie externe, par exemple via un JAR externe int\u00e9gr\u00e9 comme une d\u00e9pendance de vos composants. Quarkus est un framework d'extension, chaque extension qu'il propose permet d'int\u00e9grer une technologie (client BDD, framework\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1267,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/debugger-une-image-native-graalvm-avec-gdb\/","url_meta":{"origin":1153,"position":3},"title":"Debugger une image native GraalVM avec GDB","author":"admin","date":"lundi 14 juin 2021","format":false,"excerpt":"Dans un pr\u00e9c\u00e9dent article, j'avais \u00e9voqu\u00e9 comment profiler une image native GraalVM avec perf. Si vous ne connaissez pas l'outil GraalVM et les limitations qu'il apporte, je vous conseille de relire mon article, ou tout du moins son d\u00e9but. Comme vu dans mon article pr\u00e9c\u00e9dent, une image native va contenir\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":923,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-france-2019\/","url_meta":{"origin":1153,"position":4},"title":"Devoxx France 2019","author":"admin","date":"lundi 13 mai 2019","format":false,"excerpt":"Cette ann\u00e9e, j'ai eu la chance d'assister \u00e0 Devoxx France, j'ai m\u00eame eu la chance d'\u00eatre speaker et de donner deux talks (Mes premiers pas en deeplearning avec Keras et Arthas - Alibaba Java Diagnostic Tool ), mais \u00e7a je vous en parlerais plus tard ;) Voici un petit compte\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]},{"id":1668,"url":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/informatique\/devoxx-fr-2023-hidden-security-features-of-th-jvm-everything-you-didnt-know-and-more-par-steve-poole\/","url_meta":{"origin":1153,"position":5},"title":"Devoxx FR 2023 &#8211; Hidden security features of the JVM &#8211; everything you didn&rsquo;t know and more par Steve Poole","author":"admin","date":"vendredi 14 avril 2023","format":false,"excerpt":"Premi\u00e8re conf\u00e9rence \u00e0 laquelle je vais pour cette session de Devoxx France parle de s\u00e9curit\u00e9 dans le JVM par Steve Poole. Le Security Manager est d\u00e9pr\u00e9ci\u00e9 mais la JVM a un design fantastique pour la s\u00e9curit\u00e9. Tout d'abord, pourquoi se soucier de la s\u00e9curit\u00e9 ? Premi\u00e8re conf\u00e9rence \u00e0 laquelle je\u2026","rel":"","context":"Dans &quot;informatique&quot;","block_context":{"text":"informatique","link":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/category\/informatique\/"},"img":{"alt_text":"","src":"","width":0,"height":0},"classes":[]}],"_links":{"self":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1153","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/comments?post=1153"}],"version-history":[{"count":0,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/posts\/1153\/revisions"}],"wp:attachment":[{"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/media?parent=1153"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/categories?post=1153"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.loicmathieu.fr\/wordpress\/fr\/wp-json\/wp\/v2\/tags?post=1153"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}