﻿{"id":2217,"date":"2016-05-28T01:28:35","date_gmt":"2016-05-27T16:28:35","guid":{"rendered":"http:\/\/yucchi.jp\/blog\/?p=2217"},"modified":"2016-05-28T01:30:25","modified_gmt":"2016-05-27T16:30:25","slug":"valhalla-%e6%a5%bd%e3%81%97%e3%81%84%ef%bc%9f-%e3%81%9d%e3%81%ae%ef%bc%93","status":"publish","type":"post","link":"http:\/\/yucchi.jp\/blog\/?p=2217","title":{"rendered":"Valhalla \u697d\u3057\u3044\uff1f \u305d\u306e\uff13"},"content":{"rendered":"<p>\u4eca\u65e5\u3082 Valhalla \u3092\u5c11\u3057\u3060\u3051\u30b4\u30cb\u30e7\u30b4\u30cb\u30e7\u3057\u307e\u3059\u3002<\/p>\n<p>Valhalla \u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u305d\u3093\u306a\u306b\u9032\u3093\u3067\u306a\u304f\u3001\u8a66\u305b\u308b\u3053\u3068\u304c\u307b\u3068\u3093\u3069\u3042\u308a\u307e\u305b\u3093\u3002<\/p>\n<p>\u305d\u3093\u306a\u4e2d\u3067 Generic Specialization \u3092\u4f7f\u3063\u305f GenericMethods \u3092\u8a66\u3057\u3066\u307f\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u3082\u30cd\u30c3\u30c8\u4e0a\u3067\u898b\u304b\u3051\u308b\u30b3\u30fc\u30c9\u3092\u8a66\u3057\u3066\u307f\u305f\u308a\u3057\u305f\u306e\u3067\u3059\u304c\u52d5\u304b\u306a\u3044\u3082\u306e\u304c\u591a\u3044\u3067\u3059\u306d\u3002<\/p>\n<p>\u3042\u307e\u308a\u826f\u3044\u30b5\u30f3\u30d7\u30eb\u3067\u306f\u306a\u3044\u3051\u3069\u30d6\u30ed\u30b0\u66f4\u65b0\u306e<font color=\"#ff0000\" size=\"4\"><strong>\u304a\u904a\u3073<\/strong><\/font>\u3068\u3057\u3066\u3044\u3061\u304a\u3046\u52d5\u3044\u305f\u30b3\u30fc\u30c9\u3067\u672a\u6765\u306e\u6280\u8853\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5c11\u3057\u3067\u3082\u611f\u3058\u53d6\u3063\u3066\u307f\u307e\u3059\u3002<\/p>\n<p>\u305d\u308c\u3067\u306f\u4e0b\u8a18\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><pre title=\"GenericMethods.java\">\r\npackage genericMethods;\r\n\r\nimport java.util.function.Supplier;\r\n\r\npublic class GenericMethods {\r\n\r\n    public static <T> T hoge(Supplier<T> supplier) {\r\n        return supplier.get();\r\n    }\r\n\r\n    public static <T> T piyo(T i) {\r\n        return i;\r\n    }\r\n\r\n    public static void main(String[] args) {\r\n        int n = 7;\r\n        System.out.println(hoge(() -> n) + \" : \" + hoge(() -> n).getClass());\r\n        System.out.println(piyo(n) + \" : \" + piyo(n).getClass());\r\n\r\n    }\r\n\r\n}\r\n<\/pre>\n<\/p>\n<p>\u3053\u308c\u306f int \u578b\u306e\u5f15\u6570 7 \u3092\u6e21\u3057\u3066\u305d\u306e\u307e\u307e\u8fd4\u3057\u3066\u3082\u3089\u3046\u3060\u3051\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3067\u3059\u3002<\/p>\n<p>java.util.function.Supplier \u3092\u4f7f\u3063\u305f\u3082\u306e\u3068\u666e\u901a\u306e\u30b3\u30fc\u30c9\u4e8c\u3064\u3092\u5b9f\u884c\u3057\u3066\u3044\u307e\u3059\u3002<\/p>\n<p>\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u7d50\u679c\u306f\u6b21\u306e\u3088\u3046\u306b\u306a\u308a\u307e\u3059\u3002<\/p>\n<p><a href=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2016\/05\/21.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" title=\"2\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"2\" src=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2016\/05\/2_thumb1.png\" width=\"251\" height=\"113\"><\/a><\/p>\n<p>Integer \u578b\u306b\u306a\u3063\u3066\u8fd4\u3063\u3066\u304d\u307e\u3057\u305f\u3002<\/p>\n<p>\u30b3\u30b9\u30c8\u306e\u9ad8\u3044 Autoboxing \u304c\u50cd\u3044\u3066\u3057\u307e\u3044\u307e\u3057\u305f\u3002<\/p>\n<p>\u3053\u308c\u3092 Valhalla \u306e Generic Specialization \u3092\u4f7f\u3048\u3070 Autoboxing \u306b\u3088\u308b\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u306e\u4f4e\u4e0b\u3092\u56de\u907f\u3067\u304d\u308b\u304b\u3082\u3057\u308c\u307e\u305b\u3093\u3002<\/p>\n<p>\u3055\u3063\u305d\u304f\u8a66\u3057\u3066\u307f\u307e\u3057\u305f\u3002<\/p>\n<p>\u3057\u304b\u3057\u3001java.util.function.Supplier \u306b Generic Specialization \u3092\u4f7f\u304a\u3046\u3068\u3057\u305f\u3051\u3069\u99c4\u76ee\u3067\u3057\u305f\u3002(&gt;_&lt;\uff61)<\/p>\n<p>\u6b32\u5f35\u3089\u305a\u306b\u666e\u901a\u306e\u3067\u6211\u6162\u3059\u308b\u3053\u3068\u306b\u30fb\u30fb\u30fb(^_^;)<\/p>\n<p>\u305d\u3046\u3044\u3046\u3053\u3068\u3067\u4e0b\u8a18\u306e\u3088\u3046\u306a\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u7d44\u3093\u3067 Valhalla \u306e Generic Specialization \u306e\u5b9f\u529b\u3068\u3084\u3089\u3092\u898b\u305b\u3066\u3082\u3089\u3044\u307e\u3057\u305f\u3002<\/p>\n<p><pre title=\"GenericMethods2.java\">\r\npublic class GenericMethods2 {\r\n\r\n    private static long start;\r\n    private static long time;\r\n\r\n    \/\/ \u53e4\u3044\u30b8\u30a7\u30cd\u30ea\u30af\u30b9\r\n    public static <T> T hoge(T i) {\r\n        return i;\r\n    }\r\n\r\n    \/\/ \u30b8\u30a7\u30cd\u30ea\u30af\u30b9 \u30b9\u30da\u30b7\u30e3\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\r\n    public static <any T> T piyo(T i) {\r\n        return i;\r\n    }\r\n\r\n    public static void main(String[] args) {\r\n\r\n        int a = 7;\r\n\r\n        System.out.println(hoge(a).getClass() + \" : \" + hoge(a)); \/\/ class java.lang.Integer : 7\r\n        \/\/ System.out.println(piyo(a).getClass() + \" : \" + piyo(a)); \u30a8\u30e9\u30fc: int\u306f\u9593\u63a5\u53c2\u7167\u3067\u304d\u307e\u305b\u3093\r\n        System.out.println(piyo(a)); \/\/ 7\r\n\r\n        \/\/ \u30a6\u30a9\u30fc\u30df\u30f3\u30b0\u30a2\u30c3\u30d7\t\r\n        for (int i = 0; i < 20; i++) {\r\n            calcInteger();\r\n        }\r\n        for (int i = 0; i < 20; i++) {\r\n            calcInt();\r\n        }\r\n\r\n        \/\/ \u51e6\u7406\u901f\u5ea6\u8a08\u6e2c \u53e4\u3044\u30b8\u30a7\u30cd\u30ea\u30af\r\n        start = System.nanoTime();\r\n        calcInteger();\r\n        time = System.nanoTime() - start;\r\n        System.out.println(System.lineSeparator() + \"(\u25cb\uff65\u03c9\uff65)\uff89-------------  \u53e4\u3044\u30b8\u30a7\u30cd\u30ea\u30af\u30b9 \"\r\n                + (int) (time * 1e-9) \/ 3_600 + \"\u6642\u9593\"\r\n                + (int) ((time * 1e-9) \/ 60) % 60 + \"\u5206\"\r\n                + (int) (time * 1e-9 % 60) + \"\u79d2\"\r\n                + Double.toString((time * 1e-9 % 60) % 1).substring(2) + \"  ------------ )\" + System.lineSeparator());\r\n\r\n        \/\/ \u51e6\u7406\u901f\u5ea6\u8a08\u6e2c \u30b8\u30a7\u30cd\u30ea\u30af\u30b9 \u30b9\u30da\u30b7\u30e3\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3\r\n        start = System.nanoTime();\r\n        calcInt();\r\n        time = System.nanoTime() - start;\r\n        System.out.println(System.lineSeparator() + \"(\u25cb\uff65\u03c9\uff65)\uff89-------------  \u30b8\u30a7\u30cd\u30ea\u30af\u30b9 \u30b9\u30da\u30b7\u30e3\u30e9\u30a4\u30bc\u30fc\u30b7\u30e7\u30f3 \"\r\n                + (int) (time * 1e-9) \/ 3_600 + \"\u6642\u9593\"\r\n                + (int) ((time * 1e-9) \/ 60) % 60 + \"\u5206\"\r\n                + (int) (time * 1e-9 % 60) + \"\u79d2\"\r\n                + Double.toString((time * 1e-9 % 60) % 1).substring(2) + \"  ------------ )\" + System.lineSeparator());\r\n        System.out.println();\r\n        System.out.println(\"\u304a\u7d42\u3044\uff01\");\r\n\r\n    }\r\n\r\n    private static void calcInteger() {\r\n        for (int i = 0; i < 7; i++) {\r\n            int n = 0;\r\n            for (int j = 0; j < 2100_000_000; j++) {\r\n                n = hoge(j);\r\n                \/\/ System.out.println(n);\r\n            }\r\n        }\r\n    }\r\n\r\n    private static void calcInt() {\r\n        for (int i = 0; i < 7; i++) {\r\n            int n = 0;\r\n            for (int j = 0; j < 2100_000_000; j++) {\r\n                n = piyo(j);\r\n                \/\/ System.out.println(n);\r\n            }\r\n        }\r\n    }\r\n}\r\n<\/pre>\n<\/p>\n<p>\u3053\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u52d5\u304b\u3059\u3068 Generic Specialization \u3092\u5229\u7528\u3057\u305f\u30e1\u30bd\u30c3\u30c9\u306e\u8fd4\u308a\u5024\u306f int \u578b\u3068\u306a\u3063\u3066\u307e\u3059\u3002<\/p>\n<p>\u3053\u308c\u3067 Autoboxing \u306e\u546a\u3044\u304b\u3089\u89e3\u653e\u3055\u308c\u308b\u305c\uff01<\/p>\n<p>\u51e6\u7406\u901f\u5ea6\u304c\u3069\u308c\u3060\u3051\u9055\u3046\u304b\u30d7\u30ed\u30b0\u30e9\u30e0\u306e\u5b9f\u884c\u7d50\u679c\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002<\/p>\n<p><a href=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2016\/05\/11.png\" target=\"_blank\"><img loading=\"lazy\" decoding=\"async\" title=\"1\" style=\"border-left-width: 0px; border-right-width: 0px; background-image: none; border-bottom-width: 0px; padding-top: 0px; padding-left: 0px; display: inline; padding-right: 0px; border-top-width: 0px\" border=\"0\" alt=\"1\" src=\"http:\/\/yucchi.jp\/blog\/wp-content\/uploads\/2016\/05\/1_thumb1.png\" width=\"904\" height=\"476\"><\/a><\/p>\n<p>\u7b11\u3063\u3061\u3083\u3046\u304f\u3089\u3044\u5927\u304d\u306a\u5dee\u304c\u3042\u308a\u307e\u3059\u306d\u3002<\/p>\n<p>Java \u306b\u30b8\u30a7\u30cd\u30ea\u30af\u30b9\u3092\u5c0e\u5165\u3059\u308b\u3068\u304d\u306b\u30d7\u30ea\u30df\u30c6\u30a3\u30d6\u578b\u306e\u5bfe\u5fdc\u3092\u3057\u306a\u304b\u3063\u305f\u30c4\u30b1\u304c\u6d6e\u304d\u5f6b\u308a\u306b\u306a\u3063\u3066\u307e\u3059\u3002<\/p>\n<p>Autoboxing \u306f\u4fbf\u5229\u3060\u3051\u3069\u79c1\u306f\u77e5\u3089\u305a\u77e5\u3089\u305a\u306e\u3046\u3061\u306b\u50cd\u304b\u305b\u3066\u3057\u307e\u3046\u306e\u3067\u65e9\u304f Valhalla \u304c\u4f7f\u3048\u308b\u65e5\u304c\u304f\u308b\u3088\u3046\u306b\u7948\u3063\u3066\u307e\u3059\u3002<\/p>\n<div id=\"scid:0767317B-992E-4b12-91E0-4F059A8CECA8:b501ee1c-c5e9-4eda-9230-78c276130fca\" class=\"wlWriterEditableSmartContent\" style=\"float: none; padding-bottom: 0px; padding-top: 0px; padding-left: 0px; margin: 0px; display: inline; padding-right: 0px\">Hatena \u30bf\u30b0: <a href=\"http:\/\/b.hatena.ne.jp\/t\/Java\" rel=\"tag\">Java<\/a><\/div>\n<div class='wp_social_bookmarking_light'>\n            <div class=\"wsbl_hatena\"><a href='\/\/b.hatena.ne.jp\/add?mode=confirm&url=http%3A%2F%2Fyucchi.jp%2Fblog%2F%3Fp%3D2217&title=Valhalla%20%E6%A5%BD%E3%81%97%E3%81%84%EF%BC%9F%20%E3%81%9D%E3%81%AE%EF%BC%93' title='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='http:\/\/yucchi.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/hatena.gif' alt='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' title='\u3053\u306e\u30a8\u30f3\u30c8\u30ea\u30fc\u3092\u306f\u3066\u306a\u30d6\u30c3\u30af\u30de\u30fc\u30af\u306b\u8ffd\u52a0' width='16' height='12' class='wp_social_bookmarking_light_img' \/><\/a><\/div>\n            <div class=\"wsbl_facebook\"><a href='http:\/\/www.facebook.com\/share.php?u=http%3A%2F%2Fyucchi.jp%2Fblog%2F%3Fp%3D2217&t=Valhalla%20%E6%A5%BD%E3%81%97%E3%81%84%EF%BC%9F%20%E3%81%9D%E3%81%AE%EF%BC%93' title='Facebook \u306b\u30b7\u30a7\u30a2' rel=nofollow class='wp_social_bookmarking_light_a' target=_blank><img src='http:\/\/yucchi.jp\/blog\/wp-content\/plugins\/wp-social-bookmarking-light\/public\/images\/facebook.png' alt='Facebook \u306b\u30b7\u30a7\u30a2' title='Facebook \u306b\u30b7\u30a7\u30a2' width='16' height='16' class='wp_social_bookmarking_light_img' \/><\/a><\/div>\n            <div class=\"wsbl_google_plus_one\"><g:plusone size=\"medium\" annotation=\"none\" href=\"http:\/\/yucchi.jp\/blog\/?p=2217\" ><\/g:plusone><\/div>\n            <div class=\"wsbl_twitter\"><a href=\"https:\/\/twitter.com\/share\" class=\"twitter-share-button\" data-url=\"http:\/\/yucchi.jp\/blog\/?p=2217\" data-text=\"Valhalla \u697d\u3057\u3044\uff1f \u305d\u306e\uff13\" data-lang=\"ja\">Tweet<\/a><\/div>\n    <\/div>\n<br class='wp_social_bookmarking_light_clear' \/>\n","protected":false},"excerpt":{"rendered":"<p>\u4eca\u65e5\u3082 Valhalla \u3092\u5c11\u3057\u3060\u3051\u30b4\u30cb\u30e7\u30b4\u30cb\u30e7\u3057\u307e\u3059\u3002 Valhalla \u306f\u30d7\u30ed\u30b8\u30a7\u30af\u30c8\u304c\u305d\u3093\u306a\u306b\u9032\u3093\u3067\u306a\u304f\u3001\u8a66\u305b\u308b\u3053\u3068\u304c\u307b\u3068\u3093\u3069\u3042\u308a\u307e\u305b\u3093\u3002 \u305d\u3093\u306a\u4e2d\u3067 Generic Specialization \u3092\u4f7f\u3063\u305f GenericMethods \u3092\u8a66\u3057\u3066\u307f\u307e\u3059\u3002 \u3053\u308c\u3082\u30cd\u30c3\u30c8\u4e0a\u3067\u898b\u304b\u3051\u308b\u30b3\u30fc\u30c9\u3092\u8a66\u3057\u3066\u307f\u305f\u308a\u3057\u305f\u306e\u3067\u3059\u304c\u52d5\u304b\u306a\u3044\u3082\u306e\u304c\u591a\u3044\u3067\u3059\u306d\u3002 \u3042\u307e\u308a\u826f\u3044\u30b5\u30f3\u30d7\u30eb\u3067\u306f\u306a\u3044\u3051\u3069\u30d6\u30ed\u30b0\u66f4\u65b0\u306e\u304a\u904a\u3073\u3068\u3057\u3066\u3044\u3061\u304a\u3046\u52d5\u3044\u305f\u30b3\u30fc\u30c9\u3067\u672a\u6765\u306e\u6280\u8853\u306e\u30d1\u30d5\u30a9\u30fc\u30de\u30f3\u30b9\u3092\u5c11\u3057\u3067\u3082\u611f\u3058\u53d6\u3063\u3066\u307f\u307e\u3059\u3002 \u305d\u308c\u3067\u306f\u4e0b\u8a18\u306e\u30d7\u30ed\u30b0\u30e9\u30e0\u3092\u3054\u89a7\u304f\u3060\u3055\u3044\u3002 package genericMethods; import java.util\u2026<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[17],"class_list":["post-2217","post","type-post","status-publish","format-standard","hentry","category-java","tag-java"],"_links":{"self":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2217","targetHints":{"allow":["GET"]}}],"collection":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=2217"}],"version-history":[{"count":3,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2217\/revisions"}],"predecessor-version":[{"id":2221,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=\/wp\/v2\/posts\/2217\/revisions\/2221"}],"wp:attachment":[{"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=2217"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=2217"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/yucchi.jp\/blog\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=2217"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}