GVKun编程网logo

Java 服务器挂掉 很频繁(java服务经常自己挂)

1

在这篇文章中,我们将为您详细介绍Java服务器挂掉很频繁的内容,并且讨论关于java服务经常自己挂的相关问题。此外,我们还会涉及一些关于4-1如何定义Java中的方法;Java中无参无返回值方法的使用

在这篇文章中,我们将为您详细介绍Java 服务器挂掉 很频繁的内容,并且讨论关于java服务经常自己挂的相关问题。此外,我们还会涉及一些关于4-1 如何定义 Java 中的方法;Java 中无参无返回值方法的使用;Java 中无参带返回值方法的使用;、5-2 Java 中的 static 使用之静态变量 ;;Java 中的 static 使用之静态方法;;Java 中的 static 使用之静态初始化块、ArrayMap java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]、Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)的知识,以帮助您更全面地了解这个主题。

本文目录一览:

Java 服务器挂掉 很频繁(java服务经常自己挂)

Java 服务器挂掉 很频繁(java服务经常自己挂)

直接上错误日志

#
# A fatal error has been detected by the Java Runtime Environment:
#
# java.lang.OutOfMemoryError: requested 93568 bytes for Chunk::new. Out of swap space?
#
#  Internal Error (allocation.cpp:215), pid=17980, tid=713251696
#  Error: Chunk::new
#
# JRE version: 6.0_20-b02
# Java VM: Java HotSpot(TM) Server VM (16.3-b01 mixed mode linux-x86 )
# If you would like to submit a bug report, please visit:
#   http://java.sun.com/webapps/bugreport/crash.jsp
#

---------------  T H R E A D  ---------------

Current thread (0x2ac05c00):  JavaThread "CompilerThread1" daemon [_thread_in_native, id=17995, stack(0x2a7b5000,0x2a836000)]

Stack: [0x2a7b5000,0x2a836000],  sp=0x2a832fd0,  free space=1f72a836000k
Native frames: (J=compiled Java code, j=interpreted, Vv=VM code, C=native code)
V  [libjvm.so+0x68c972]
V  [libjvm.so+0x2a506f]
V  [libjvm.so+0x12c2ac]
V  [libjvm.so+0x12c7a6]
V  [libjvm.so+0x5b9fb0]
V  [libjvm.so+0x2e9e0b]
V  [libjvm.so+0x4e4312]
V  [libjvm.so+0x26ed7f]
V  [libjvm.so+0x26b97f]
V  [libjvm.so+0x203d97]
V  [libjvm.so+0x27426c]
V  [libjvm.so+0x273b79]
V  [libjvm.so+0x653946]
V  [libjvm.so+0x64cfde]
V  [libjvm.so+0x55f24e]
C  [libpthread.so.0+0x580e]


Current CompileTask:
C2:2262  !   x2.svc.page.BuildingI.getArray(Ljava/util/Map;)Ljava/util/Map; (536 bytes)


---------------  P R O C E S S  ---------------

Java Threads: ( => current thread )
  0x1c5f8800 JavaThread "pool-1-thread-393" [_thread_blocked, id=18889, stack(0x25778000,0x257c9000)]
  0x04df7400 JavaThread "pool-1-thread-388" [_thread_blocked, id=18884, stack(0x25727000,0x25778000)]
  0x29e34800 JavaThread "pool-1-thread-366" [_thread_blocked, id=18862, stack(0x1b00d000,0x1b05e000)]
  0x09827c00 JavaThread "RMI TCP Connection(77)-122.70.132.37" daemon [_thread_in_native, id=18839, stack(0x01e5e000,0x01eaf000)]
  0xbedf4800 JavaThread "pool-10-thread-1" [_thread_blocked, id=18826, stack(0x01eaf000,0x01f00000)]
  0x09b40400 JavaThread "RMI TCP Connection(76)-122.70.132.37" daemon [_thread_in_native, id=18562, stack(0x01e0d000,0x01e5e000)]
  0x09d48000 JavaThread "SinglePool.pool-1-thread-1" daemon [_thread_blocked, id=18199, stack(0x255e3000,0x25634000)]
  0x2a12e400 JavaThread "pool-9-thread-8" [_thread_blocked, id=18179, stack(0x25b5e000,0x25baf000)]
  0x29a38400 JavaThread "pool-9-thread-7" [_thread_blocked, id=18178, stack(0x25baf000,0x25c00000)]
  0x2a1f5400 JavaThread "pool-9-thread-6" [_thread_blocked, id=18177, stack(0x25f41000,0x25f92000)]
  0x2a2aec00 JavaThread "pool-9-thread-5" [_thread_blocked, id=18176, stack(0x25f92000,0x25fe3000)]
  0x2a264800 JavaThread "pool-9-thread-4" [_thread_blocked, id=18175, stack(0x25fe3000,0x26034000)]
  0x2a2bec00 JavaThread "pool-9-thread-3" [_thread_blocked, id=18174, stack(0x26034000,0x26085000)]
  0x0a21f000 JavaThread "pool-9-thread-2" [_thread_blocked, id=18173, stack(0x26085000,0x260d6000)]
  0x29f9b000 JavaThread "pool-9-thread-1" [_thread_blocked, id=18171, stack(0x26127000,0x26178000)]
  0x2a12f400 JavaThread "http-nio-10081-Acceptor-0" daemon [_thread_in_native, id=18165, stack(0x2626b000,0x262bc000)]
  0x2a148400 JavaThread "http-nio-10081-ClientPoller-7" daemon [_thread_in_native, id=18164, stack(0x262bc000,0x2630d000)]
  0x2a146c00 JavaThread "http-nio-10081-ClientPoller-6" daemon [_thread_in_native, id=18163, stack(0x2630d000,0x2635e000)]
  0x2a145400 JavaThread "http-nio-10081-ClientPoller-5" daemon [_thread_in_native, id=18162, stack(0x2635e000,0x263af000)]
  0x2ac59800 JavaThread "http-nio-10081-ClientPoller-4" daemon [_thread_in_native, id=18161, stack(0x263af000,0x26400000)]
  0x2ac58000 JavaThread "http-nio-10081-ClientPoller-3" daemon [_thread_in_native, id=18160, stack(0x26400000,0x26451000)]
  0x29e33800 JavaThread "http-nio-10081-ClientPoller-2" daemon [_thread_in_native, id=18159, stack(0x26451000,0x264a2000)]
  0x29e32800 JavaThread "http-nio-10081-ClientPoller-1" daemon [_thread_in_native, id=18158, stack(0x264a2000,0x264f3000)]
  0x2a4de800 JavaThread "http-nio-10081-ClientPoller-0" daemon [_thread_in_native, id=18157, stack(0x264f3000,0x26544000)]
  0x29fcdc00 JavaThread "NioBlockingSelector.BlockPoller-1" daemon [_thread_in_native, id=18156, stack(0x26544000,0x26595000)]
  0x0a377400 JavaThread "Thread-2" [_thread_in_native, id=18155, stack(0x26595000,0x265e6000)]
  0x0a47f000 JavaThread "RMI RenewClean-[122.70.132.37:47896]" daemon [_thread_blocked, id=18153, stack(0x26637000,0x26688000)]
  0x09cf0000 JavaThread "RMI Scheduler(0)" daemon [_thread_blocked, id=18152, stack(0x26688000,0x266d9000)]
  0x0a2e3400 JavaThread "RMI TCP Accept-10082" daemon [_thread_in_native, id=18150, stack(0x2672a000,0x2677b000)]
  0x09b45400 JavaThread "GC Daemon" daemon [_thread_blocked, id=18149, stack(0x2677b000,0x267cc000)]
  0x0a2ecc00 JavaThread "RMI Reaper" [_thread_blocked, id=18148, stack(0x267cc000,0x2681d000)]
  0x2a169c00 JavaThread "RMI TCP Accept-0" daemon [_thread_in_native, id=18147, stack(0x2681d000,0x2686e000)]
  0x2a2cb400 JavaThread "pool-8-thread-6" [_thread_blocked, id=18146, stack(0x2686e000,0x268bf000)]
  0x2a2c9c00 JavaThread "pool-8-thread-5" [_thread_blocked, id=18145, stack(0x268bf000,0x26910000)]
  0x2a0f6000 JavaThread "pool-8-thread-4" [_thread_blocked, id=18144, stack(0x26910000,0x26961000)]
  0x2a0f4800 JavaThread "pool-8-thread-3" [_thread_blocked, id=18143, stack(0x26961000,0x269b2000)]
  0x2a0f3800 JavaThread "pool-8-thread-2" [_thread_blocked, id=18142, stack(0x269b2000,0x26a03000)]
  0x2a0f1000 JavaThread "pool-8-thread-1" [_thread_blocked, id=18141, stack(0x26a03000,0x26a54000)]
  0x2a0ef800 JavaThread "ScheduledPool.pool-3-thread-34" daemon [_thread_blocked, id=18140, stack(0x26a54000,0x26aa5000)]
  0x2a0ee000 JavaThread "ScheduledPool.pool-3-thread-33" daemon [_thread_blocked, id=18139, stack(0x26aa5000,0x26af6000)]
  0x2a0ec800 JavaThread "ScheduledPool.pool-3-thread-32" daemon [_thread_blocked, id=18138, stack(0x26af6000,0x26b47000)]
  0x2a0eb000 JavaThread "ScheduledPool.pool-3-thread-31" daemon [_thread_blocked, id=18137, stack(0x26b47000,0x26b98000)]
  0x2a2d8800 JavaThread "ScheduledPool.pool-3-thread-30" daemon [_thread_blocked, id=18136, stack(0x26b98000,0x26be9000)]
  0x2a2d7000 JavaThread "ScheduledPool.pool-3-thread-29" daemon [_thread_blocked, id=18135, stack(0x26be9000,0x26c3a000)]
  0x2a2d5800 JavaThread "ScheduledPool.pool-3-thread-28" daemon [_thread_blocked, id=18134, stack(0x26c3a000,0x26c8b000)]
  0x2a2d4000 JavaThread "ScheduledPool.pool-3-thread-27" daemon [_thread_blocked, id=18133, stack(0x26c8b000,0x26cdc000)]
  0x2a2d2800 JavaThread "ScheduledPool.pool-3-thread-26" daemon [_thread_blocked, id=18132, stack(0x26cdc000,0x26d2d000)]
  0x2a173400 JavaThread "ScheduledPool.pool-3-thread-25" daemon [_thread_blocked, id=18131, stack(0x26d2d000,0x26d7e000)]
  0x2a171c00 JavaThread "ScheduledPool.pool-3-thread-24" daemon [_thread_blocked, id=18130, stack(0x26d7e000,0x26dcf000)]
  0x2a170400 JavaThread "ScheduledPool.pool-3-thread-23" daemon [_thread_blocked, id=18129, stack(0x26dcf000,0x26e20000)]
  0x2a16ec00 JavaThread "ScheduledPool.pool-3-thread-22" daemon [_thread_blocked, id=18128, stack(0x26e20000,0x26e71000)]
  0x2a16d400 JavaThread "ScheduledPool.pool-3-thread-21" daemon [_thread_blocked, id=18127, stack(0x26e71000,0x26ec2000)]
  0x2a15f800 JavaThread "ScheduledPool.pool-3-thread-20" daemon [_thread_blocked, id=18126, stack(0x26ec2000,0x26f13000)]
  0x2a15e000 JavaThread "ScheduledPool.pool-3-thread-19" daemon [_thread_blocked, id=18125, stack(0x26f13000,0x26f64000)]
  0x2a15c800 JavaThread "ScheduledPool.pool-3-thread-18" daemon [_thread_blocked, id=18124, stack(0x26f64000,0x26fb5000)]
  0x2a15b400 JavaThread "ScheduledPool.pool-3-thread-17" daemon [_thread_blocked, id=18123, stack(0x26fb5000,0x27006000)]
  0x2a159c00 JavaThread "ScheduledPool.pool-3-thread-16" daemon [_thread_blocked, id=18122, stack(0x27006000,0x27057000)]
  0x2a0fa400 JavaThread "ScheduledPool.pool-3-thread-15" daemon [_thread_blocked, id=18121, stack(0x27057000,0x270a8000)]
  0x2a0f8c00 JavaThread "ScheduledPool.pool-3-thread-14" daemon [_thread_blocked, id=18120, stack(0x270a8000,0x270f9000)]
  0x2a0f7800 JavaThread "ScheduledPool.pool-3-thread-13" daemon [_thread_blocked, id=18119, stack(0x270f9000,0x2714a000)]
  0x29f9f000 JavaThread "ScheduledPool.pool-3-thread-12" daemon [_thread_blocked, id=18118, stack(0x2714a000,0x2719b000)]
  0x29f9d800 JavaThread "ScheduledPool.pool-3-thread-11" daemon [_thread_blocked, id=18117, stack(0x2719b000,0x271ec000)]
  0x29f9c400 JavaThread "ScheduledPool.pool-3-thread-10" daemon [_thread_blocked, id=18116, stack(0x271ec000,0x2723d000)]
  0x29fa2000 JavaThread "ScheduledPool.pool-3-thread-9" daemon [_thread_blocked, id=18115, stack(0x2723d000,0x2728e000)]
  0x2a0a7000 JavaThread "ScheduledPool.pool-3-thread-8" daemon [_thread_blocked, id=18114, stack(0x2728e000,0x272df000)]
  0x2acf9000 JavaThread "ScheduledPool.pool-3-thread-7" daemon [_thread_blocked, id=18113, stack(0x272df000,0x27330000)]
  0x2a0a5800 JavaThread "ScheduledPool.pool-3-thread-6" daemon [_thread_blocked, id=18112, stack(0x27330000,0x27381000)]
  0x09824000 JavaThread "ScheduledPool.pool-3-thread-5" daemon [_thread_blocked, id=18111, stack(0x27381000,0x273d2000)]
  0x0a2e7000 JavaThread "ScheduledPool.pool-3-thread-4" daemon [_thread_blocked, id=18110, stack(0x273d2000,0x27423000)]
  0x2a0ac000 JavaThread "pool-3-thread-64" [_thread_blocked, id=18107, stack(0x27423000,0x27474000)]
  0x2a0aa000 JavaThread "pool-3-thread-63" [_thread_blocked, id=18106, stack(0x27474000,0x274c5000)]
  0x2acf4000 JavaThread "pool-3-thread-62" [_thread_blocked, id=18105, stack(0x274c5000,0x27516000)]
  0x2acf3000 JavaThread "pool-3-thread-61" [_thread_blocked, id=18104, stack(0x27516000,0x27567000)]
  0x2acf2000 JavaThread "pool-3-thread-60" [_thread_blocked, id=18103, stack(0x27567000,0x275b8000)]
  0x2acf0c00 JavaThread "pool-3-thread-59" [_thread_blocked, id=18102, stack(0x275b8000,0x27609000)]
  0x29ec9400 JavaThread "pool-3-thread-58" [_thread_blocked, id=18101, stack(0x27609000,0x2765a000)]
  0x29ec7c00 JavaThread "pool-3-thread-57" [_thread_blocked, id=18100, stack(0x2765a000,0x276ab000)]
  0x29ec6400 JavaThread "pool-3-thread-56" [_thread_blocked, id=18099, stack(0x276ab000,0x276fc000)]
  0x29ec5000 JavaThread "pool-3-thread-55" [_thread_blocked, id=18098, stack(0x276fc000,0x2774d000)]
  0x29ec3c00 JavaThread "pool-3-thread-54" [_thread_blocked, id=18097, stack(0x2774d000,0x2779e000)]
  0x29ec3000 JavaThread "pool-3-thread-53" [_thread_blocked, id=18096, stack(0x2779e000,0x277ef000)]
  0x2a357800 JavaThread "pool-7-thread-8" [_thread_blocked, id=18095, stack(0x277ef000,0x27840000)]
  0x2a356400 JavaThread "pool-7-thread-7" [_thread_blocked, id=18094, stack(0x27840000,0x27891000)]
  0x2a354c00 JavaThread "pool-7-thread-6" [_thread_blocked, id=18093, stack(0x27891000,0x278e2000)]
  0x2a353400 JavaThread "pool-7-thread-5" [_thread_blocked, id=18092, stack(0x278e2000,0x27933000)]
  0x2a351c00 JavaThread "pool-7-thread-4" [_thread_blocked, id=18091, stack(0x27933000,0x27984000)]
  0x2a34c800 JavaThread "pool-7-thread-3" [_thread_blocked, id=18090, stack(0x27984000,0x279d5000)]
  0x2a34b400 JavaThread "pool-7-thread-2" [_thread_blocked, id=18089, stack(0x279d5000,0x27a26000)]
  0x2a34f000 JavaThread "pool-7-thread-1" [_thread_blocked, id=18088, stack(0x27a26000,0x27a77000)]
  0x2a348c00 JavaThread "ScheduledPool.pool-3-thread-3" daemon [_thread_blocked, id=18087, stack(0x27a77000,0x27ac8000)]
  0x2acb1400 JavaThread "pool-3-thread-52" [_thread_blocked, id=18086, stack(0x27ac8000,0x27b19000)]
  0x2acafc00 JavaThread "pool-3-thread-51" [_thread_blocked, id=18085, stack(0x27b19000,0x27b6a000)]
  0x2acae400 JavaThread "pool-3-thread-50" [_thread_blocked, id=18084, stack(0x27b6a000,0x27bbb000)]
  0x2acacc00 JavaThread "pool-3-thread-49" [_thread_blocked, id=18083, stack(0x27bbb000,0x27c0c000)]
  0x2aca4c00 JavaThread "pool-3-thread-48" [_thread_blocked, id=18082, stack(0x27c0c000,0x27c5d000)]
  0x2aca3400 JavaThread "pool-3-thread-47" [_thread_blocked, id=18081, stack(0x27c5d000,0x27cae000)]
  0x2aca1c00 JavaThread "pool-3-thread-46" [_thread_blocked, id=18080, stack(0x27cae000,0x27cff000)]
  0x2aca0400 JavaThread "pool-3-thread-45" [_thread_blocked, id=18079, stack(0x27cff000,0x27d50000)]
  0x2ac9ec00 JavaThread "pool-3-thread-44" [_thread_blocked, id=18078, stack(0x27d50000,0x27da1000)]
  0x29a0c400 JavaThread "pool-3-thread-43" [_thread_blocked, id=18077, stack(0x27da1000,0x27df2000)]
  0x29a0b000 JavaThread "pool-3-thread-42" [_thread_blocked, id=18076, stack(0x27df2000,0x27e43000)]
  0x29a09800 JavaThread "pool-3-thread-41" [_thread_blocked, id=18075, stack(0x27e43000,0x27e94000)]
  0x29a08400 JavaThread "pool-3-thread-40" [_thread_blocked, id=18074, stack(0x27e94000,0x27ee5000)]
  0x2a191c00 JavaThread "pool-3-thread-39" [_thread_blocked, id=18073, stack(0x27ee5000,0x27f36000)]
  0x2a190400 JavaThread "pool-6-thread-8" [_thread_blocked, id=18072, stack(0x27f36000,0x27f87000)]
  0x2a18ec00 JavaThread "pool-6-thread-7" [_thread_blocked, id=18071, stack(0x27f87000,0x27fd8000)]
  0x29edcc00 JavaThread "pool-6-thread-6" [_thread_blocked, id=18070, stack(0x27fd8000,0x28029000)]
  0x29edb400 JavaThread "pool-6-thread-5" [_thread_blocked, id=18069, stack(0x28029000,0x2807a000)]
  0x2ace3800 JavaThread "pool-6-thread-4" [_thread_blocked, id=18068, stack(0x2807a000,0x280cb000)]
  0x2ace2400 JavaThread "pool-6-thread-3" [_thread_blocked, id=18067, stack(0x280cb000,0x2811c000)]
  0x2ace1c00 JavaThread "pool-6-thread-2" [_thread_blocked, id=18066, stack(0x2811c000,0x2816d000)]
  0x2a2e2c00 JavaThread "pool-6-thread-1" [_thread_blocked, id=18065, stack(0x2816d000,0x281be000)]
  0x2a2e1c00 JavaThread "pool-3-thread-38" [_thread_blocked, id=18064, stack(0x281be000,0x2820f000)]
  0x29a3a400 JavaThread "pool-3-thread-37" [_thread_blocked, id=18063, stack(0x2820f000,0x28260000)]
  0x29a17400 JavaThread "pool-5-thread-8" [_thread_blocked, id=18062, stack(0x28260000,0x282b1000)]
  0x29a70c00 JavaThread "pool-5-thread-7" [_thread_blocked, id=18061, stack(0x282b1000,0x28302000)]
  0x29f12400 JavaThread "pool-5-thread-6" [_thread_blocked, id=18060, stack(0x28302000,0x28353000)]
  0x2a416000 JavaThread "pool-5-thread-5" [_thread_blocked, id=18059, stack(0x28353000,0x283a4000)]
  0x2a1fb800 JavaThread "pool-5-thread-4" [_thread_blocked, id=18058, stack(0x283a4000,0x283f5000)]
  0x0a2d8c00 JavaThread "pool-5-thread-3" [_thread_blocked, id=18057, stack(0x283f5000,0x28446000)]
  0x0a2d7400 JavaThread "pool-5-thread-2" [_thread_blocked, id=18056, stack(0x28446000,0x28497000)]
  0x0a2d5c00 JavaThread "pool-5-thread-1" [_thread_blocked, id=18055, stack(0x28497000,0x284e8000)]
  0x0a2d4000 JavaThread "pool-3-thread-36" [_thread_blocked, id=18054, stack(0x284e8000,0x28539000)]
  0x0a2d2800 JavaThread "pool-3-thread-35" [_thread_blocked, id=18053, stack(0x28539000,0x2858a000)]
  0x0a2d1000 JavaThread "pool-3-thread-34" [_thread_blocked, id=18052, stack(0x2858a000,0x285db000)]
  0x0a2cf400 JavaThread "pool-3-thread-33" [_thread_blocked, id=18051, stack(0x285db000,0x2862c000)]
  0x097ba400 JavaThread "pool-3-thread-32" [_thread_blocked, id=18050, stack(0x2862c000,0x2867d000)]
  0x0a2cc000 JavaThread "pool-3-thread-31" [_thread_blocked, id=18049, stack(0x2867d000,0x286ce000)]
  0x09875000 JavaThread "pool-3-thread-30" [_thread_blocked, id=18048, stack(0x286ce000,0x2871f000)]
  0x09873800 JavaThread "pool-3-thread-29" [_thread_blocked, id=18047, stack(0x2871f000,0x28770000)]
  0x09872000 JavaThread "pool-3-thread-28" [_thread_blocked, id=18046, stack(0x28770000,0x287c1000)]
  0x09870400 JavaThread "pool-3-thread-27" [_thread_blocked, id=18045, stack(0x287c1000,0x28812000)]
  0x0986ec00 JavaThread "pool-3-thread-26" [_thread_blocked, id=18044, stack(0x28812000,0x28863000)]
  0x0986d400 JavaThread "pool-3-thread-25" [_thread_blocked, id=18043, stack(0x28863000,0x288b4000)]
  0x0986b800 JavaThread "pool-3-thread-24" [_thread_blocked, id=18042, stack(0x288b4000,0x28905000)]
  0x0986a000 JavaThread "pool-3-thread-23" [_thread_blocked, id=18041, stack(0x28905000,0x28956000)]
  0x09789c00 JavaThread "pool-3-thread-22" [_thread_blocked, id=18040, stack(0x28956000,0x289a7000)]
  0x09788000 JavaThread "pool-3-thread-21" [_thread_blocked, id=18039, stack(0x289a7000,0x289f8000)]
  0x09786800 JavaThread "pool-3-thread-20" [_thread_blocked, id=18038, stack(0x289f8000,0x28a49000)]
  0x09785000 JavaThread "pool-3-thread-19" [_thread_blocked, id=18037, stack(0x28a49000,0x28a9a000)]
  0x09783400 JavaThread "pool-3-thread-18" [_thread_blocked, id=18036, stack(0x28a9a000,0x28aeb000)]
  0x09781c00 JavaThread "pool-3-thread-17" [_thread_blocked, id=18035, stack(0x28aeb000,0x28b3c000)]
  0x09780000 JavaThread "pool-4-thread-8" [_thread_blocked, id=18034, stack(0x28b3c000,0x28b8d000)]
  0x098d9c00 JavaThread "pool-4-thread-7" [_thread_blocked, id=18033, stack(0x28b8d000,0x28bde000)]
  0x098d8400 JavaThread "pool-4-thread-6" [_thread_blocked, id=18032, stack(0x28bde000,0x28c2f000)]
  0x098d6800 JavaThread "pool-4-thread-5" [_thread_blocked, id=18031, stack(0x28c2f000,0x28c80000)]
  0x098d5000 JavaThread "pool-4-thread-4" [_thread_blocked, id=18030, stack(0x28c80000,0x28cd1000)]
  0x098d3800 JavaThread "pool-4-thread-3" [_thread_blocked, id=18029, stack(0x28cd1000,0x28d22000)]
  0x098d2000 JavaThread "pool-4-thread-2" [_thread_blocked, id=18028, stack(0x28d22000,0x28d73000)]
  0x098d0400 JavaThread "pool-4-thread-1" [_thread_blocked, id=18027, stack(0x28d73000,0x28dc4000)]
  0x0963a400 JavaThread "pool-3-thread-16" [_thread_blocked, id=18026, stack(0x28dc4000,0x28e15000)]
  0x09638c00 JavaThread "pool-3-thread-15" [_thread_blocked, id=18025, stack(0x28e15000,0x28e66000)]
  0x09637000 JavaThread "pool-3-thread-14" [_thread_blocked, id=18024, stack(0x28e66000,0x28eb7000)]
  0x09635800 JavaThread "pool-3-thread-13" [_thread_blocked, id=18023, stack(0x28eb7000,0x28f08000)]
  0x09634000 JavaThread "pool-3-thread-12" [_thread_blocked, id=18022, stack(0x28f08000,0x28f59000)]
  0x097be400 JavaThread "pool-3-thread-11" [_thread_blocked, id=18021, stack(0x28f59000,0x28faa000)]
  0x097bcc00 JavaThread "pool-3-thread-10" [_thread_blocked, id=18020, stack(0x28faa000,0x28ffb000)]
  0x097bb000 JavaThread "pool-3-thread-9" [_thread_blocked, id=18019, stack(0x28ffb000,0x2904c000)]
  0x0a0d8800 JavaThread "pool-3-thread-8" [_thread_blocked, id=18018, stack(0x2904c000,0x2909d000)]
  0x097b7c00 JavaThread "pool-3-thread-7" [_thread_blocked, id=18017, stack(0x2909d000,0x290ee000)]
  0x0a0d9400 JavaThread "pool-3-thread-6" [_thread_blocked, id=18016, stack(0x290ee000,0x2913f000)]
  0x0a0d8000 JavaThread "pool-3-thread-5" [_thread_blocked, id=18015, stack(0x29b2c000,0x29b7d000)]
  0x0a0d7000 JavaThread "pool-3-thread-4" [_thread_blocked, id=18014, stack(0x29b7d000,0x29bce000)]
  0x0a2c9800 JavaThread "pool-3-thread-3" [_thread_blocked, id=18013, stack(0x29c6b000,0x29cbc000)]
  0x0a2c8800 JavaThread "pool-3-thread-2" [_thread_blocked, id=18012, stack(0x29cbc000,0x29d0d000)]
  0x0a2c7800 JavaThread "pool-3-thread-1" [_thread_blocked, id=18011, stack(0x29d0d000,0x29d5e000)]
  0x0a2fb400 JavaThread "pool-2-thread-1" [_thread_blocked, id=18010, stack(0x29d5e000,0x29daf000)]
  0x0a0d4800 JavaThread "ScheduledPool.pool-3-thread-2" daemon [_thread_blocked, id=18009, stack(0x29daf000,0x29e00000)]
  0x0983b800 JavaThread "ScheduledPool.pool-3-thread-1" daemon [_thread_blocked, id=18008, stack(0x2a598000,0x2a5e9000)]
  0x2a41a400 JavaThread "MySQL Statement Cancellation Timer" daemon [_thread_blocked, id=17998, stack(0x29bce000,0x29c1f000)]
  0x09707000 JavaThread "Low Memory Detector" daemon [_thread_blocked, id=17996, stack(0x2a764000,0x2a7b5000)]
=>0x2ac05c00 JavaThread "CompilerThread1" daemon [_thread_in_native, id=17995, stack(0x2a7b5000,0x2a836000)]
  0x2ac03c00 JavaThread "CompilerThread0" daemon [_thread_blocked, id=17994, stack(0x2a836000,0x2a8b7000)]
  0x09704c00 JavaThread "Signal Dispatcher" daemon [_thread_blocked, id=17993, stack(0x2a8b7000,0x2a908000)]
  0x096f3c00 JavaThread "Finalizer" daemon [_thread_blocked, id=17992, stack(0x2a947000,0x2a998000)]
  0x096f2000 JavaThread "Reference Handler" daemon [_thread_blocked, id=17991, stack(0x2a998000,0x2a9e9000)]
  0x0960c000 JavaThread "main" [_thread_blocked, id=17981, stack(0xb69f6000,0xb6a47000)]

Other Threads:
  0x096ef800 VMThread [stack: 0x2a9e9000,0x2aa6a000] [id=17990]
  0x09708c00 WatcherThread [stack: 0x2a6e3000,0x2a764000] [id=17997]

VM state:not at safepoint (normal execution)

VM Mutex/Monitor currently owned by a thread: None

Heap
 PSYoungGen      total 647936K, used 562480K [0x88e00000, 0xb38a0000, 0xb38a0000)
  eden space 594944K, 94% used [0x88e00000,0xab34c2e8,0xad300000)
  from space 52992K, 0% used [0xb04e0000,0xb04e0000,0xb38a0000)
  to   space 51072K, 0% used [0xad300000,0xad300000,0xb04e0000)
 PSOldGen        total 1398144K, used 878751K [0x338a0000, 0x88e00000, 0x88e00000)
  object space 1398144K, 62% used [0x338a0000,0x692c7d90,0x88e00000)
 PSPermGen       total 46976K, used 30943K [0x2b8a0000, 0x2e680000, 0x338a0000)
  object space 46976K, 65% used [0x2b8a0000,0x2d6d7fb0,0x2e680000)

Dynamic libraries:
00010000-00100000 rwxp 00000000 00:00 0
00100000-001f1000 rwxp 00000000 00:00 0
001f1000-00200000 ---p 00000000 00:00 0
00200000-002f1000 rwxp 00000000 00:00 0
002f1000-00300000 ---p 00000000 00:00 0
00300000-003f1000 rwxp 00000000 00:00 0
003f1000-00400000 ---p 00000000 00:00 0
00400000-004f1000 rwxp 00000000 00:00 0
004f1000-00500000 ---p 00000000 00:00 0
00500000-005f1000 rwxp 00000000 00:00 0
005f1000-00600000 ---p 00000000 00:00 0
00600000-006f1000 rwxp 00000000 00:00 0
006f1000-00700000 ---p 00000000 00:00 0
00700000-007f1000 rwxp 00000000 00:00 0
007f1000-00800000 ---p 00000000 00:00 0
00800000-008f1000 rwxp 00000000 00:00 0
008f1000-00900000 ---p 00000000 00:00 0
00900000-009f1000 rwxp 00000000 00:00 0
009f1000-00a00000 ---p 00000000 00:00 0
00a00000-00af1000 rwxp 00000000 00:00 0
00af1000-00b00000 ---p 00000000 00:00 0
00b00000-00bf1000 rwxp 00000000 00:00 0
00bf1000-00c00000 ---p 00000000 00:00 0
00c00000-00cf1000 rwxp 00000000 00:00 0
00cf1000-00d00000 ---p 00000000 00:00 0
00d00000-00df1000 rwxp 00000000 00:00 0
00df1000-00e00000 ---p 00000000 00:00 0
00e00000-00ef1000 rwxp 00000000 00:00 0
00ef1000-00f00000 ---p 00000000 00:00 0
00f00000-00ff1000 rwxp 00000000 00:00 0
00ff1000-01000000 ---p 00000000 00:00 0
01000000-010f1000 rwxp 00000000 00:00 0
010f1000-01100000 ---p 00000000 00:00 0
01100000-011f1000 rwxp 00000000 00:00 0
011f1000-01200000 ---p 00000000 00:00 0
01200000-012f1000 rwxp 00000000 00:00 0
012f1000-01300000 ---p 00000000 00:00 0
01300000-013f1000 rwxp 00000000 00:00 0
013f1000-01400000 ---p 00000000 00:00 0
01400000-014f1000 rwxp 00000000 00:00 0
014f1000-01500000 ---p 00000000 00:00 0
01500000-015f1000 rwxp 00000000 00:00 0
015f1000-01600000 ---p 00000000 00:00 0
01600000-016f1000 rwxp 00000000 00:00 0
016f1000-01700000 ---p 00000000 00:00 0
01700000-01b00000 rwxp 00000000 00:00 0
01b00000-01bf7000 rwxp 00000000 00:00 0
01bf7000-01c00000 ---p 00000000 00:00 0
01c00000-01cf1000 rwxp 00000000 00:00 0
01cf1000-01d00000 ---p 00000000 00:00 0
01d00000-01df8000 rwxp 00000000 00:00 0
01df8000-01e00000 ---p 00000000 00:00 0
01e01000-01e0d000 rwxp 00000000 00:00 0
01e0d000-01e10000 ---p 00000000 00:00 0
01e10000-01e5e000 rwxp 00000000 00:00 0
01e5e000-01e61000 ---p 00000000 00:00 0
01e61000-01eaf000 rwxp 00000000 00:00 0
01eaf000-01eb2000 ---p 00000000 00:00 0
01eb2000-01f00000 rwxp 00000000 00:00 0
01f00000-01ff6000 rwxp 00000000 00:00 0
01ff6000-02000000 ---p 00000000 00:00 0
02000000-020f5000 rwxp 00000000 00:00 0
020f5000-02100000 ---p 00000000 00:00 0
02100000-021f6000 rwxp 00000000 00:00 0
021f6000-02200000 ---p 00000000 00:00 0
02200000-022f6000 rwxp 00000000 00:00 0
022f6000-02300000 ---p 00000000 00:00 0
02300000-023fe000 rwxp 00000000 00:00 0
023fe000-02400000 ---p 00000000 00:00 0
02400000-024fb000 rwxp 00000000 00:00 0
024fb000-02500000 ---p 00000000 00:00 0
02500000-025f1000 rwxp 00000000 00:00 0
025f1000-02600000 ---p 00000000 00:00 0
02600000-026f6000 rwxp 00000000 00:00 0
026f6000-02700000 ---p 00000000 00:00 0
02700000-027f2000 rwxp 00000000 00:00 0
027f2000-02800000 ---p 00000000 00:00 0
02800000-028f1000 rwxp 00000000 00:00 0
028f1000-02900000 ---p 00000000 00:00 0
02900000-029f6000 rwxp 00000000 00:00 0
029f6000-02a00000 ---p 00000000 00:00 0
02a00000-02af6000 rwxp 00000000 00:00 0
02af6000-02b00000 ---p 00000000 00:00 0
02b00000-02bf6000 rwxp 00000000 00:00 0
02bf6000-02c00000 ---p 00000000 00:00 0
02c00000-02cf5000 rwxp 00000000 00:00 0
02cf5000-02d00000 ---p 00000000 00:00 0
02d00000-02df1000 rwxp 00000000 00:00 0
02df1000-02e00000 ---p 00000000 00:00 0
02e00000-02ef2000 rwxp 00000000 00:00 0
02ef2000-02f00000 ---p 00000000 00:00 0
02f00000-02ff1000 rwxp 00000000 00:00 0
02ff1000-03000000 ---p 00000000 00:00 0
03000000-030f1000 rwxp 00000000 00:00 0
030f1000-03100000 ---p 00000000 00:00 0
03100000-031f1000 rwxp 00000000 00:00 0
031f1000-03200000 ---p 00000000 00:00 0
03200000-032f1000 rwxp 00000000 00:00 0
032f1000-03300000 ---p 00000000 00:00 0
03300000-033f1000 rwxp 00000000 00:00 0
033f1000-03400000 ---p 00000000 00:00 0
03400000-034f1000 rwxp 00000000 00:00 0
034f1000-03500000 ---p 00000000 00:00 0
03500000-035f1000 rwxp 00000000 00:00 0
035f1000-03600000 ---p 00000000 00:00 0
03600000-036f1000 rwxp 00000000 00:00 0
036f1000-03700000 ---p 00000000 00:00 0
03700000-037f1000 rwxp 00000000 00:00 0
037f1000-03800000 ---p 00000000 00:00 0
03800000-038f1000 rwxp 00000000 00:00 0
038f1000-03900000 ---p 00000000 00:00 0
03900000-039f1000 rwxp 00000000 00:00 0
039f1000-03a00000 ---p 00000000 00:00 0
03a00000-03af1000 rwxp 00000000 00:00 0
03af1000-03b00000 ---p 00000000 00:00 0
03b00000-03c00000 rwxp 00000000 00:00 0
03c00000-03cf1000 rwxp 00000000 00:00 0
03cf1000-03d00000 ---p 00000000 00:00 0
03d00000-03df1000 rwxp 00000000 00:00 0
03df1000-03e00000 ---p 00000000 00:00 0
03e00000-03ef1000 rwxp 00000000 00:00 0
03ef1000-03f00000 ---p 00000000 00:00 0
03f00000-03ff1000 rwxp 00000000 00:00 0
03ff1000-04000000 ---p 00000000 00:00 0
04000000-040f1000 rwxp 00000000 00:00 0
040f1000-04100000 ---p 00000000 00:00 0
04100000-041f5000 rwxp 00000000 00:00 0
041f5000-04200000 ---p 00000000 00:00 0
04200000-042f2000 rwxp 00000000 00:00 0
042f2000-04300000 ---p 00000000 00:00 0
04300000-043f1000 rwxp 00000000 00:00 0
043f1000-04400000 ---p 00000000 00:00 0
04400000-044f1000 rwxp 00000000 00:00 0
044f1000-04500000 ---p 00000000 00:00 0
04500000-045f1000 rwxp 00000000 00:00 0
045f1000-04600000 ---p 00000000 00:00 0
04600000-046f1000 rwxp 00000000 00:00 0
046f1000-04700000 ---p 00000000 00:00 0
04700000-047f1000 rwxp 00000000 00:00 0
047f1000-04800000 ---p 00000000 00:00 0
04800000-048f1000 rwxp 00000000 00:00 0
048f1000-04900000 ---p 00000000 00:00 0
04900000-049f1000 rwxp 00000000 00:00 0
049f1000-04a00000 ---p 00000000 00:00 0
04a00000-04af1000 rwxp 00000000 00:00 0
04af1000-04b00000 ---p 00000000 00:00 0
04b00000-04bf1000 rwxp 00000000 00:00 0
04bf1000-04c00000 ---p 00000000 00:00 0
04c00000-04cf1000 rwxp 00000000 00:00 0
04cf1000-04d00000 ---p 00000000 00:00 0
04d00000-04dff000 rwxp 00000000 00:00 0
04dff000-04e00000 ---p 00000000 00:00 0
04e00000-04ef1000 rwxp 00000000 00:00 0
04ef1000-04f00000 ---p 00000000 00:00 0
04f00000-04ff2000 rwxp 00000000 00:00 0
04ff2000-05000000 ---p 00000000 00:00 0
05000000-050fb000 rwxp 00000000 00:00 0
050fb000-05100000 ---p 00000000 00:00 0
05100000-051f1000 rwxp 00000000 00:00 0
051f1000-05200000 ---p 00000000 00:00 0
05200000-052f1000 rwxp 00000000 00:00 0
052f1000-05300000 ---p 00000000 00:00 0
05300000-053f1000 rwxp 00000000 00:00 0
053f1000-05400000 ---p 00000000 00:00 0
05400000-054f1000 rwxp 00000000 00:00 0
054f1000-05500000 ---p 00000000 00:00 0
05500000-055f1000 rwxp 00000000 00:00 0
055f1000-05600000 ---p 00000000 00:00 0
05600000-056f1000 rwxp 00000000 00:00 0
056f1000-05700000 ---p 00000000 00:00 0
05700000-057f1000 rwxp 00000000 00:00 0
057f1000-05800000 ---p 00000000 00:00 0
05800000-058f1000 rwxp 00000000 00:00 0
058f1000-05900000 ---p 00000000 00:00 0
05900000-059f1000 rwxp 00000000 00:00 0
059f1000-05a00000 ---p 00000000 00:00 0
05a00000-05af1000 rwxp 00000000 00:00 0
05af1000-05b00000 ---p 00000000 00:00 0
05b00000-05bf1000 rwxp 00000000 00:00 0
05bf1000-05c00000 ---p 00000000 00:00 0
05c00000-05cf1000 rwxp 00000000 00:00 0
05cf1000-05d00000 ---p 00000000 00:00 0
05d00000-05df1000 rwxp 00000000 00:00 0
05df1000-05e00000 ---p 00000000 00:00 0
05e00000-05ef1000 rwxp 00000000 00:00 0
05ef1000-05f00000 ---p 00000000 00:00 0
05f00000-05ff1000 rwxp 00000000 00:00 0
05ff1000-06000000 ---p 00000000 00:00 0
06000000-060f1000 rwxp 00000000 00:00 0
060f1000-06100000 ---p 00000000 00:00 0
06100000-061f1000 rwxp 00000000 00:00 0
061f1000-06200000 ---p 00000000 00:00 0
06200000-062f1000 rwxp 00000000 00:00 0
062f1000-06300000 ---p 00000000 00:00 0
06300000-063f6000 rwxp 00000000 00:00 0
063f6000-06400000 ---p 00000000 00:00 0
06400000-064f3000 rwxp 00000000 00:00 0
064f3000-06500000 ---p 00000000 00:00 0
06500000-065fd000 rwxp 00000000 00:00 0
065fd000-06600000 ---p 00000000 00:00 0
06600000-066f6000 rwxp 00000000 00:00 0
066f6000-06700000 ---p 00000000 00:00 0
06700000-067f6000 rwxp 00000000 00:00 0
067f6000-06800000 ---p 00000000 00:00 0
06800000-068f6000 rwxp 00000000 00:00 0
068f6000-06900000 ---p 00000000 00:00 0
06900000-069f6000 rwxp 00000000 00:00 0
069f6000-06a00000 ---p 00000000 00:00 0
06a00000-06af5000 rwxp 00000000 00:00 0
06af5000-06b00000 ---p 00000000 00:00 0
06b00000-06bf6000 rwxp 00000000 00:00 0
06bf6000-06c00000 ---p 00000000 00:00 0
06c00000-06cf6000 rwxp 00000000 00:00 0
06cf6000-06d00000 ---p 00000000 00:00 0
06d01000-06d0d000 rwxp 00000000 00:00 0
06d0d000-06d10000 ---p 00000000 00:00 0
06d10000-06d5e000 rwxp 00000000 00:00 0
06d5e000-06d61000 ---p 00000000 00:00 0
06d61000-06daf000 rwxp 00000000 00:00 0
06daf000-06db2000 ---p 00000000 00:00 0
06db2000-06e00000 rwxp 00000000 00:00 0
06e00000-06ef1000 rwxp 00000000 00:00 0
06ef1000-06f00000 ---p 00000000 00:00 0
06f00000-06ff6000 rwxp 00000000 00:00 0
06ff6000-07000000 ---p 00000000 00:00 0
07000000-070f5000 rwxp 00000000 00:00 0
070f5000-07100000 ---p 00000000 00:00 0
07100000-071f1000 rwxp 00000000 00:00 0
071f1000-07200000 ---p 00000000 00:00 0
07200000-072f6000 rwxp 00000000 00:00 0
072f6000-07300000 ---p 00000000 00:00 0
07300000-073f2000 rwxp 00000000 00:00 0
073f2000-07400000 ---p 00000000 00:00 0
07400000-074f1000 rwxp 00000000 00:00 0
074f1000-07500000 ---p 00000000 00:00 0
07500000-075f6000 rwxp 00000000 00:00 0
075f6000-07600000 ---p 00000000 00:00 0
07600000-076f6000 rwxp 00000000 00:00 0
076f6000-07700000 ---p 00000000 00:00 0
07700000-077f6000 rwxp 00000000 00:00 0
077f6000-07800000 ---p 00000000 00:00 0
07800000-078f5000 rwxp 00000000 00:00 0
078f5000-07900000 ---p 00000000 00:00 0
07900000-079f1000 rwxp 00000000 00:00 0
079f1000-07a00000 ---p 00000000 00:00 0
07a00000-07af6000 rwxp 00000000 00:00 0
07af6000-07b00000 ---p 00000000 00:00 0
07b00000-07bf1000 rwxp 00000000 00:00 0
07bf1000-07c00000 ---p 00000000 00:00 0
07c00000-07cf1000 rwxp 00000000 00:00 0
07cf1000-07d00000 ---p 00000000 00:00 0
07d00000-07df1000 rwxp 00000000 00:00 0
07df1000-07e00000 ---p 00000000 00:00 0
07e00000-07ef1000 rwxp 00000000 00:00 0
07ef1000-07f00000 ---p 00000000 00:00 0
07f00000-07ff1000 rwxp 00000000 00:00 0
07ff1000-08000000 ---p 00000000 00:00 0
08000000-08004000 rwxp 00000000 00:00 0
08004000-08048000 rwxp 00000000 00:00 0
08048000-08052000 r-xp 00000000 08:01 1926377    /usr/lib/jvm/java-6-sun-1.6.0.20/jre/bin/java
08052000-08053000 rwxp 00009000 08:01 1926377    /usr/lib/jvm/java-6-sun-1.6.0.20/jre/bin/java
08054000-08058000 rwxp 00000000 00:00 0
08058000-0805e000 rwxp 00000000 00:00 0
0805e000-08061000 ---p 00000000 00:00 0
08061000-080af000 rwxp 00000000 00:00 0
080af000-080b2000 ---p 00000000 00:00 0
080b2000-08100000 rwxp 00000000 00:00 0
08100000-081f1000 rwxp 00000000 00:00 0
081f1000-08200000 ---p 00000000 00:00 0
08200000-082f1000 rwxp 00000000 00:00 0
082f1000-08300000 ---p 00000000 00:00 0
08300000-083f5000 rwxp 00000000 00:00 0
083f5000-08400000 ---p 00000000 00:00 0
08401000-08407000 rwxp 00000000 00:00 0
08407000-0840d000 rwxp 00000000 00:00 0
0840d000-08410000 ---p 00000000 00:00 0
08410000-0845e000 rwxp 00000000 00:00 0
0845e000-08461000 ---p 00000000 00:00 0
08461000-084af000 rwxp 00000000 00:00 0
084af000-084b2000 ---p 00000000 00:00 0
084b2000-08500000 rwxp 00000000 00:00 0
08500000-085f1000 rwxp 00000000 00:00 0
085f1000-08600000 ---p 00000000 00:00 0
08600000-086f3000 rwxp 00000000 00:00 0
086f3000-08700000 ---p 00000000 00:00 0
08700000-087f3000 rwxp 00000000 00:00 0
087f3000-08800000 ---p 00000000 00:00 0
08800000-088f1000 rwxp 00000000 00:00 0
088f1000-08900000 ---p 00000000 00:00 0
08900000-089f6000 rwxp 00000000 00:00 0
089f6000-08a00000 ---p 00000000 00:00 0
08a00000-08af5000 rwxp 00000000 00:00 0
08af5000-08b00000 ---p 00000000 00:00 0
08b00000-08bf6000 rwxp 00000000 00:00 0
08bf6000-08c00000 ---p 00000000 00:00 0
08c00000-08cf6000 rwxp 00000000 00:00 0
08cf6000-08d00000 ---p 00000000 00:00 0
08d00000-08df6000 rwxp 00000000 00:00 0
08df6000-08e00000 ---p 00000000 00:00 0
08e00000-08ef5000 rwxp 00000000 00:00 0
08ef5000-08f00000 ---p 00000000 00:00 0
08f00000-08ff5000 rwxp 00000000 00:00 0
08ff5000-09000000 ---p 00000000 00:00 0
09000000-090f6000 rwxp 00000000 00:00 0
090f6000-09100000 ---p 00000000 00:00 0
09100000-091f6000 rwxp 00000000 00:00 0
091f6000-09200000 ---p 00000000 00:00 0
09200000-092f6000 rwxp 00000000 00:00 0
092f6000-09300000 ---p 00000000 00:00 0
09300000-093f5000 rwxp 00000000 00:00 0
093f5000-09400000 ---p 00000000 00:00 0
09400000-094f6000 rwxp 00000000 00:00 0
094f6000-09500000 ---p 00000000 00:00 0
09500000-095f6000 rwxp 00000000 00:00 0
095f6000-09600000 ---p 00000000 00:00 0
09600000-11d07000 rwxp 00000000 00:00 0          [heap]
11d07000-11d1a000 rwxp 00000000 00:00 0
11d1a000-11d1d000 ---p 00000000 00:00 0
11d1d000-11d6b000 rwxp 00000000 00:00 0
11d6b000-11d6e000 ---p 00000000 00:00 0
11d6e000-11dbc000 rwxp 00000000 00:00 0
11dbc000-11dbf000 ---p 00000000 00:00 0
11dbf000-11e0d000 rwxp 00000000 00:00 0
11e0d000-11e10000 ---p 00000000 00:00 0
11e10000-11e5e000 rwxp 00000000 00:00 0
11e5e000-11e61000 ---p 00000000 00:00 0
11e61000-11eaf000 rwxp 00000000 00:00 0
11eaf000-11eb2000 ---p 00000000 00:00 0
11eb2000-11f00000 rwxp 00000000 00:00 0
11f00000-11ff5000 rwxp 00000000 00:00 0
11ff5000-12000000 ---p 00000000 00:00 0
12001000-1200d000 rwxp 00000000 00:00 0
1200d000-12010000 ---p 00000000 00:00 0
12010000-1205e000 rwxp 00000000 00:00 0
1205e000-12061000 ---p 00000000 00:00 0
12061000-120af000 rwxp 00000000 00:00 0
120af000-120b2000 ---p 00000000 00:00 0
120b2000-12100000 rwxp 00000000 00:00 0
12100000-121f1000 rwxp 00000000 00:00 0
121f1000-12200000 ---p 00000000 00:00 0
12200000-122f3000 rwxp 00000000 00:00 0
122f3000-12300000 ---p 00000000 00:00 0
12300000-123f1000 rwxp 00000000 00:00 0
123f1000-12400000 ---p 00000000 00:00 0
12400000-124f1000 rwxp 00000000 00:00 0
124f1000-12500000 ---p 00000000 00:00 0
12500000-125f6000 rwxp 00000000 00:00 0
125f6000-12600000 ---p 00000000 00:00 0
12600000-126f6000 rwxp 00000000 00:00 0
126f6000-12700000 ---p 00000000 00:00 0
12700000-127f6000 rwxp 00000000 00:00 0
127f6000-12800000 ---p 00000000 00:00 0
12800000-128f5000 rwxp 00000000 00:00 0
128f5000-12900000 ---p 00000000 00:00 0
12900000-129f6000 rwxp 00000000 00:00 0
129f6000-12a00000 ---p 00000000 00:00 0
12a00000-12af6000 rwxp 00000000 00:00 0
12af6000-12b00000 ---p 00000000 00:00 0
12b00000-12bf6000 rwxp 00000000 00:00 0
12bf6000-12c00000 ---p 00000000 00:00 0
12c00000-12cf6000 rwxp 00000000 00:00 0
12cf6000-12d00000 ---p 00000000 00:00 0
12d00000-12df5000 rwxp 00000000 00:00 0
12df5000-12e00000 ---p 00000000 00:00 0
12e00000-12ef6000 rwxp 00000000 00:00 0
12ef6000-12f00000 ---p 00000000 00:00 0
12f00000-12ff6000 rwxp 00000000 00:00 0
12ff6000-13000000 ---p 00000000 00:00 0
13000000-130f6000 rwxp 00000000 00:00 0
130f6000-13100000 ---p 00000000 00:00 0
13100000-131f5000 rwxp 00000000 00:00 0
131f5000-13200000 ---p 00000000 00:00 0
13200000-132f6000 rwxp 00000000 00:00 0
132f6000-13300000 ---p 00000000 00:00 0
13300000-133f1000 rwxp 00000000 00:00 0
133f1000-13400000 ---p 00000000 00:00 0
13400000-134f6000 rwxp 00000000 00:00 0
134f6000-13500000 ---p 00000000 00:00 0
13500000-135f1000 rwxp 00000000 00:00 0
135f1000-13600000 ---p 00000000 00:00 0
13600000-136f1000 rwxp 00000000 00:00 0
136f1000-13700000 ---p 00000000 00:00 0
13700000-137f1000 rwxp 00000000 00:00 0
137f1000-13800000 ---p 00000000 00:00 0
13800000-138f1000 rwxp 00000000 00:00 0
138f1000-13900000 ---p 00000000 00:00 0
13900000-139f1000 rwxp 00000000 00:00 0
139f1000-13a00000 ---p 00000000 00:00 0
13a00000-13af1000 rwxp 00000000 00:00 0
13af1000-13b00000 ---p 00000000 00:00 0
13b00000-13bf1000 rwxp 00000000 00:00 0
13bf1000-13c00000 ---p 00000000 00:00 0
13c00000-13cf2000 rwxp 00000000 00:00 0
13cf2000-13d00000 ---p 00000000 00:00 0
13d00000-13df1000 rwxp 00000000 00:00 0
13df1000-13e00000 ---p 00000000 00:00 0
13e00000-13ef1000 rwxp 00000000 00:00 0
13ef1000-13f00000 ---p 00000000 00:00 0
13f00000-13ff1000 rwxp 00000000 00:00 0
13ff1000-14000000 ---p 00000000 00:00 0
14000000-140f1000 rwxp 00000000 00:00 0
140f1000-14100000 ---p 00000000 00:00 0
14100000-141f2000 rwxp 00000000 00:00 0
141f2000-14200000 ---p 00000000 00:00 0
14201000-1420d000 rwxp 00000000 00:00 0
1420d000-14210000 ---p 00000000 00:00 0
14210000-1425e000 rwxp 00000000 00:00 0
1425e000-14261000 ---p 00000000 00:00 0
14261000-142af000 rwxp 00000000 00:00 0
142af000-142b2000 ---p 00000000 00:00 0
142b2000-14300000 rwxp 00000000 00:00 0
14300000-143fe000 rwxp 00000000 00:00 0
143fe000-14400000 ---p 00000000 00:00 0
14400000-144f6000 rwxp 00000000 00:00 0
144f6000-14500000 ---p 00000000 00:00 0
14500000-145f6000 rwxp 00000000 00:00 0
145f6000-14600000 ---p 00000000 00:00 0
14600000-146f6000 rwxp 00000000 00:00 0
146f6000-14700000 ---p 00000000 00:00 0
14700000-147f5000 rwxp 00000000 00:00 0
147f5000-14800000 ---p 00000000 00:00 0
14800000-148fe000 rwxp 00000000 00:00 0
148fe000-14900000 ---p 00000000 00:00 0
14900000-149f6000 rwxp 00000000 00:00 0
149f6000-14a00000 ---p 00000000 00:00 0
14a00000-14af6000 rwxp 00000000 00:00 0
14af6000-14b00000 ---p 00000000 00:00 0
14b00000-14bf3000 rwxp 00000000 00:00 0
14bf3000-14c00000 ---p 00000000 00:00 0
14c00000-14cf6000 rwxp 00000000 00:00 0
14cf6000-14d00000 ---p 00000000 00:00 0
14d00000-14df6000 rwxp 00000000 00:00 0
14df6000-14e00000 ---p 00000000 00:00 0
14e00000-14ef1000 rwxp 00000000 00:00 0
14ef1000-14f00000 ---p 00000000 00:00 0
14f00000-14ff5000 rwxp 00000000 00:00 0
14ff5000-15000000 ---p 00000000 00:00 0
15000000-150f6000 rwxp 00000000 00:00 0
150f6000-15100000 ---p 00000000 00:00 0
15100000-151f1000 rwxp 00000000 00:00 0
151f1000-15200000 ---p 00000000 00:00 0
15200000-152f1000 rwxp 00000000 00:00 0
152f1000-15300000 ---p 00000000 00:00 0
15300000-153f1000 rwxp 00000000 00:00 0
153f1000-15400000 ---p 00000000 00:00 0
15400000-154f1000 rwxp 00000000 00:00 0
154f1000-15500000 ---p 00000000 00:00 0
15500000-155f1000 rwxp 00000000 00:00 0
155f1000-15600000 ---p 00000000 00:00 0
15600000-156f1000 rwxp 00000000 00:00 0
156f1000-15700000 ---p 00000000 00:00 0
15700000-157f1000 rwxp 00000000 00:00 0
157f1000-15800000 ---p 00000000 00:00 0
15800000-158f1000 rwxp 00000000 00:00 0
158f1000-15900000 ---p 00000000 00:00 0
15900000-159f1000 rwxp 00000000 00:00 0
159f1000-15a00000 ---p 00000000 00:00 0
15a00000-15af1000 rwxp 00000000 00:00 0
15af1000-15b00000 ---p 00000000 00:00 0
15b00000-15bf1000 rwxp 00000000 00:00 0
15bf1000-15c00000 ---p 00000000 00:00 0
15c00000-15cf1000 rwxp 00000000 00:00 0
15cf1000-15d00000 ---p 00000000 00:00 0
15d00000-15df1000 rwxp 00000000 00:00 0
15df1000-15e00000 ---p 00000000 00:00 0
15e00000-15ef1000 rwxp 00000000 00:00 0
15ef1000-15f00000 ---p 00000000 00:00 0
15f00000-15ff5000 rwxp 00000000 00:00 0
15ff5000-16000000 ---p 00000000 00:00 0
16000000-160f1000 rwxp 00000000 00:00 0
160f1000-16100000 ---p 00000000 00:00 0
16100000-161f6000 rwxp 00000000 00:00 0
161f6000-16200000 ---p 00000000 00:00 0
16200000-162f6000 rwxp 00000000 00:00 0
162f6000-16300000 ---p 00000000 00:00 0
16300000-163f5000 rwxp 00000000 00:00 0
163f5000-16400000 ---p 00000000 00:00 0
16400000-164f6000 rwxp 00000000 00:00 0
164f6000-16500000 ---p 00000000 00:00 0
16500000-165f1000 rwxp 00000000 00:00 0
165f1000-16600000 ---p 00000000 00:00 0
16600000-166f3000 rwxp 00000000 00:00 0
166f3000-16700000 ---p 00000000 00:00 0
16700000-167f1000 rwxp 00000000 00:00 0
167f1000-16800000 ---p 00000000 00:00 0
16800000-168f1000 rwxp 00000000 00:00 0
168f1000-16900000 ---p 00000000 00:00 0
16900000-169f3000 rwxp 00000000 00:00 0
169f3000-16a00000 ---p 00000000 00:00 0
16a00000-16af1000 rwxp 00000000 00:00 0
16af1000-16b00000 ---p 00000000 00:00 0
16b00000-16bf1000 rwxp 00000000 00:00 0
16bf1000-16c00000 ---p 00000000 00:00 0
16c00000-16cf6000 rwxp 00000000 00:00 0
16cf6000-16d00000 ---p 00000000 00:00 0
16d00000-16df6000 rwxp 00000000 00:00 0
16df6000-16e00000 ---p 00000000 00:00 0
16e00000-16ef1000 rwxp 00000000 00:00 0
16ef1000-16f00000 ---p 00000000 00:00 0
16f00000-16ff6000 rwxp 00000000 00:00 0
16ff6000-17000000 ---p 00000000 00:00 0
17000000-170f5000 rwxp 00000000 00:00 0
170f5000-17100000 ---p 00000000 00:00 0
17100000-171f3000 rwxp 00000000 00:00 0
171f3000-17200000 ---p 00000000 00:00 0
17200000-172f6000 rwxp 00000000 00:00 0
172f6000-17300000 ---p 00000000 00:00 0
17300000-173f1000 rwxp 00000000 00:00 0
173f1000-17400000 ---p 00000000 00:00 0
17400000-174f1000 rwxp 00000000 00:00 0
174f1000-17500000 ---p 00000000 00:00 0
17500000-175f1000 rwxp 00000000 00:00 0
175f1000-17600000 ---p 00000000 00:00 0
17600000-176f9000 rwxp 00000000 00:00 0
176f9000-17700000 ---p 00000000 00:00 0
17700000-177f1000 rwxp 00000000 00:00 0
177f1000-17800000 ---p 00000000 00:00 0
17800000-178f1000 rwxp 00000000 00:00 0
178f1000-17900000 ---p 00000000 00:00 0
17900000-179f1000 rwxp 00000000 00:00 0
179f1000-17a00000 ---p 00000000 00:00 0
17a00000-17af1000 rwxp 00000000 00:00 0
17af1000-17b00000 ---p 00000000 00:00 0
17b00000-17bf1000 rwxp 00000000 00:00 0
17bf1000-17c00000 ---p 00000000 00:00 0
17c00000-17cf1000 rwxp 00000000 00:00 0
17cf1000-17d00000 ---p 00000000 00:00 0
17d00000-17df1000 rwxp 00000000 00:00 0
17df1000-17e00000 ---p 00000000 00:00 0
17e00000-17ef1000 rwxp 00000000 00:00 0
17ef1000-17f00000 ---p 00000000 00:00 0
17f00000-17ff6000 rwxp 00000000 00:00 0
17ff6000-18000000 ---p 00000000 00:00 0
18000000-180f6000 rwxp 00000000 00:00 0
180f6000-18100000 ---p 00000000 00:00 0
18100000-181f5000 rwxp 00000000 00:00 0
181f5000-18200000 ---p 00000000 00:00 0
18200000-182f6000 rwxp 00000000 00:00 0
182f6000-18300000 ---p 00000000 00:00 0
18300000-183f6000 rwxp 00000000 00:00 0
183f6000-18400000 ---p 00000000 00:00 0
18400000-184f6000 rwxp 00000000 00:00 0
184f6000-18500000 ---p 00000000 00:00 0
18500000-185f5000 rwxp 00000000 00:00 0
185f5000-18600000 ---p 00000000 00:00 0
18600000-186f6000 rwxp 00000000 00:00 0
186f6000-18700000 ---p 00000000 00:00 0
18700000-187f6000 rwxp 00000000 00:00 0
187f6000-18800000 ---p 00000000 00:00 0
18800000-188f8000 rwxp 00000000 00:00 0
188f8000-18900000 ---p 00000000 00:00 0
18900000-189f6000 rwxp 00000000 00:00 0
189f6000-18a00000 ---p 00000000 00:00 0
18a01000-18a0d000 rwxp 00000000 00:00 0
18a0d000-18a10000 ---p 00000000 00:00 0
18a10000-18a5e000 rwxp 00000000 00:00 0
18a5e000-18a61000 ---p 00000000 00:00 0
18a61000-18aaf000 rwxp 00000000 00:00 0
18aaf000-18ab2000 ---p 00000000 00:00 0
18ab2000-18b00000 rwxp 00000000 00:00 0
18b00000-18bf5000 rwxp 00000000 00:00 0
18bf5000-18c00000 ---p 00000000 00:00 0
18c01000-18c0d000 rwxp 00000000 00:00 0
18c0d000-18c10000 ---p 00000000 00:00 0
18c10000-18c5e000 rwxp 00000000 00:00 0
18c5e000-18c61000 ---p 00000000 00:00 0
18c61000-18caf000 rwxp 00000000 00:00 0
18caf000-18cb2000 ---p 00000000 00:00 0
18cb2000-18d00000 rwxp 00000000 00:00 0
18d00000-18df6000 rwxp 00000000 00:00 0
18df6000-18e00000 ---p 00000000 00:00 0
18e00000-18ef6000 rwxp 00000000 00:00 0
18ef6000-18f00000 ---p 00000000 00:00 0
18f00000-18ff5000 rwxp 00000000 00:00 0
18ff5000-19000000 ---p 00000000 00:00 0
19000000-190f6000 rwxp 00000000 00:00 0
190f6000-19100000 ---p 00000000 00:00 0
19100000-191f6000 rwxp 00000000 00:00 0
191f6000-19200000 ---p 00000000 00:00 0
19200000-192f2000 rwxp 00000000 00:00 0
192f2000-19300000 ---p 00000000 00:00 0
19300000-194f1000 rwxp 00000000 00:00 0
194f1000-19500000 ---p 00000000 00:00 0
19500000-195f1000 rwxp 00000000 00:00 0
195f1000-19600000 ---p 00000000 00:00 0
19600000-196f7000 rwxp 00000000 00:00 0
196f7000-19700000 ---p 00000000 00:00 0
19700000-197f1000 rwxp 00000000 00:00 0
197f1000-19800000 ---p 00000000 00:00 0
19800000-198f1000 rwxp 00000000 00:00 0
198f1000-19900000 ---p 00000000 00:00 0
19900000-199f1000 rwxp 00000000 00:00 0
199f1000-19a00000 ---p 00000000 00:00 0
19a00000-19af1000 rwxp 00000000 00:00 0
19af1000-19b00000 ---p 00000000 00:00 0
19b00000-19bf1000 rwxp 00000000 00:00 0
19bf1000-19c00000 ---p 00000000 00:00 0
19c00000-19cf1000 rwxp 00000000 00:00 0
19cf1000-19d00000 ---p 00000000 00:00 0
19d00000-19df1000 rwxp 00000000 00:00 0
19df1000-19e00000 ---p 00000000 00:00 0
19e00000-19ef1000 rwxp 00000000 00:00 0
19ef1000-19f00000 ---p 00000000 00:00 0
19f00000-19ffc000 rwxp 00000000 00:00 0
19ffc000-1a000000 ---p 00000000 00:00 0
1a000000-1a0f9000 rwxp 00000000 00:00 0
1a0f9000-1a100000 ---p 00000000 00:00 0
1a100000-1a1f1000 rwxp 00000000 00:00 0
1a1f1000-1a200000 ---p 00000000 00:00 0
1a200000-1a2f1000 rwxp 00000000 00:00 0
1a2f1000-1a300000 ---p 00000000 00:00 0
1a300000-1a3f6000 rwxp 00000000 00:00 0
1a3f6000-1a400000 ---p 00000000 00:00 0
1a400000-1a4f1000 rwxp 00000000 00:00 0
1a4f1000-1a500000 ---p 00000000 00:00 0
1a500000-1a5f6000 rwxp 00000000 00:00 0
1a5f6000-1a600000 ---p 00000000 00:00 0
1a600000-1a6f6000 rwxp 00000000 00:00 0
1a6f6000-1a700000 ---p 00000000 00:00 0
1a700000-1a7f1000 rwxp 00000000 00:00 0
1a7f1000-1a800000 ---p 00000000 00:00 0
1a800000-1a8f3000 rwxp 00000000 00:00 0
1a8f3000-1a900000 ---p 00000000 00:00 0
1a900000-1a9f1000 rwxp 00000000 00:00 0
1a9f1000-1aa00000 ---p 00000000 00:00 0
1aa00000-1aaf1000 rwxp 00000000 00:00 0
1aaf1000-1ab00000 ---p 00000000 00:00 0
1ab00000-1abf1000 rwxp 00000000 00:00 0
1abf1000-1ac00000 ---p 00000000 00:00 0
1ac00000-1acf1000 rwxp 00000000 00:00 0
1acf1000-1ad00000 ---p 00000000 00:00 0
1ad00000-1adf1000 rwxp 00000000 00:00 0
1adf1000-1ae00000 ---p 00000000 00:00 0
1ae00000-1aef1000 rwxp 00000000 00:00 0
1aef1000-1af00000 ---p 00000000 00:00 0
1af00000-1afff000 rwxp 00000000 00:00 0
1afff000-1b000000 ---p 00000000 00:00 0
1b001000-1b00d000 rwxp 00000000 00:00 0
1b00d000-1b010000 ---p 00000000 00:00 0
1b010000-1b05e000 rwxp 00000000 00:00 0
1b05e000-1b061000 ---p 00000000 00:00 0
1b061000-1b0af000 rwxp 00000000 00:00 0
1b0af000-1b0b2000 ---p 00000000 00:00 0
1b0b2000-1b100000 rwxp 00000000 00:00 0
1b100000-1b1f1000 rwxp 00000000 00:00 0
1b1f1000-1b200000 ---p 00000000 00:00 0
1b200000-1b2f8000 rwxp 00000000 00:00 0
1b2f8000-1b300000 ---p 00000000 00:00 0
1b300000-1b3f1000 rwxp 00000000 00:00 0
1b3f1000-1b400000 ---p 00000000 00:00 0
1b400000-1b4f9000 rwxp 00000000 00:00 0
1b4f9000-1b500000 ---p 00000000 00:00 0
1b500000-1b5fc000 rwxp 00000000 00:00 0
1b5fc000-1b600000 ---p 00000000 00:00 0
1b600000-1b6f1000 rwxp 00000000 00:00 0
1b6f1000-1b700000 ---p 00000000 00:00 0
1b700000-1b7f1000 rwxp 00000000 00:00 0
1b7f1000-1b800000 ---p 00000000 00:00 0
1b800000-1b900000 rwxp 00000000 00:00 0
1b900000-1b9f1000 rwxp 00000000 00:00 0
1b9f1000-1ba00000 ---p 00000000 00:00 0
1ba00000-1baf9000 rwxp 00000000 00:00 0
1baf9000-1bb00000 ---p 00000000 00:00 0
1bb01000-1bb0d000 rwxp 00000000 00:00 0
1bb0d000-1bb10000 ---p 00000000 00:00 0
1bb10000-1bb5e000 rwxp 00000000 00:00 0
1bb5e000-1bb61000 ---p 00000000 00:00 0
1bb61000-1bbaf000 rwxp 00000000 00:00 0
1bbaf000-1bbb2000 ---p 00000000 00:00 0
1bbb2000-1bc00000 rwxp 00000000 00:00 0
1bc00000-1bcf1000 rwxp 00000000 00:00 0
1bcf1000-1bd00000 ---p 00000000 00:00 0
1bd00000-1bdfd000 rwxp 00000000 00:00 0
1bdfd000-1be00000 ---p 00000000 00:00 0
1be00000-1bef5000 rwxp 00000000 00:00 0
1bef5000-1bf00000 ---p 00000000 00:00 0
1bf00000-1bff3000 rwxp 00000000 00:00 0
1bff3000-1c000000 ---p 00000000 00:00 0
1c000000-1c0fe000 rwxp 00000000 00:00 0
1c0fe000-1c100000 ---p 00000000 00:00 0
1c100000-1c1f6000 rwxp 00000000 00:00 0
1c1f6000-1c200000 ---p 00000000 00:00 0
1c200000-1c2f5000 rwxp 00000000 00:00 0
1c2f5000-1c300000 ---p 00000000 00:00 0
1c300000-1c3f6000 rwxp 00000000 00:00 0
1c3f6000-1c400000 ---p 00000000 00:00 0
1c400000-1c4f1000 rwxp 00000000 00:00 0
1c4f1000-1c500000 ---p 00000000 00:00 0
1c500000-1c5fa000 rwxp 00000000 00:00 0
1c5fa000-1c600000 ---p 00000000 00:00 0
1c600000-1c6f1000 rwxp 00000000 00:00 0
1c6f1000-1c700000 ---p 00000000 00:00 0
1c700000-1c7f1000 rwxp 00000000 00:00 0
1c7f1000-1c800000 ---p 00000000 00:00 0
1c800000-1c8f1000 rwxp 00000000 00:00 0
1c8f1000-1c900000 ---p 00000000 00:00 0
1c900000-1c9f1000 rwxp 00000000 00:00 0
1c9f1000-1ca00000 ---p 00000000 00:00 0
1ca00000-1caf6000 rwxp 00000000 00:00 0
1caf6000-1cb00000 ---p 00000000 00:00 0
1cb00000-1cbf6000 rwxp 00000000 00:00 0
1cbf6000-1cc00000 ---p 00000000 00:00 0
1cc00000-1ccf5000 rwxp 00000000 00:00 0
1ccf5000-1cd00000 ---p 00000000 00:00 0
1cd00000-1cdf6000 rwxp 00000000 00:00 0
1cdf6000-1ce00000 ---p 00000000 00:00 0
1ce00000-1cef6000 rwxp 00000000 00:00 0
1cef6000-1cf00000 ---p 00000000 00:00 0
1cf00000-1cff6000 rwxp 00000000 00:00 0
1cff6000-1d000000 ---p 00000000 00:00 0
1d000000-1d0f5000 rwxp 00000000 00:00 0
1d0f5000-1d100000 ---p 00000000 00:00 0
1d100000-1d1f6000 rwxp 00000000 00:00 0
1d1f6000-1d200000 ---p 00000000 00:00 0
1d200000-1d2f6000 rwxp 00000000 00:00 0
1d2f6000-1d300000 ---p 00000000 00:00 0
1d300000-1d3f6000 rwxp 00000000 00:00 0
1d3f6000-1d400000 ---p 00000000 00:00 0
1d400000-1d4f3000 rwxp 00000000 00:00 0
1d4f3000-1d500000 ---p 00000000 00:00 0
1d500000-1d5f6000 rwxp 00000000 00:00 0
1d5f6000-1d600000 ---p 00000000 00:00 0
1d600000-1d6f1000 rwxp 00000000 00:00 0
1d6f1000-1d700000 ---p 00000000 00:00 0
1d700000-1d7f1000 rwxp 00000000 00:00 0
1d7f1000-1d800000 ---p 00000000 00:00 0
1d800000-1d8f5000 rwxp 00000000 00:00 0
1d8f5000-1d900000 ---p 00000000 00:00 0
1d900000-1d9f5000 rwxp 00000000 00:00 0
1d9f5000-1da00000 ---p 00000000 00:00 0
1da00000-1daf6000 rwxp 00000000 00:00 0
1daf6000-1db00000 ---p 00000000 00:00 0
1db01000-1db0d000 rwxp 00000000 00:00 0
1db0d000-1db10000 ---p 00000000 00:00 0
1db10000-1db5e000 rwxp 00000000 00:00 0
1db5e000-1db61000 ---p 00000000 00:00 0
1db61000-1dbaf000 rwxp 00000000 00:00 0
1dbaf000-1dbb2000 ---p 00000000 00:00 0
1dbb2000-1dc00000 rwxp 00000000 00:00 0
1dc00000-1dcf6000 rwxp 00000000 00:00 0
1dcf6000-1dd00000 ---p 00000000 00:00 0
1dd00000-1ddf6000 rwxp 00000000 00:00 0
1ddf6000-1de00000 ---p 00000000 00:00 0
1de00000-1def6000 rwxp 00000000 00:00 0
1def6000-1df00000 ---p 00000000 00:00 0
1df00000-1dff5000 rwxp 00000000 00:00 0
1dff5000-1e000000 ---p 00000000 00:00 0
1e000000-1e0f6000 rwxp 00000000 00:00 0
1e0f6000-1e100000 ---p 00000000 00:00 0
1e100000-1e1f6000 rwxp 00000000 00:00 0
1e1f6000-1e200000 ---p 00000000 00:00 0
1e200000-1e2f6000 rwxp 00000000 00:00 0
1e2f6000-1e300000 ---p 00000000 00:00 0
1e300000-1e3f5000 rwxp 00000000 00:00 0
1e3f5000-1e400000 ---p 00000000 00:00 0
1e400000-1e4f5000 rwxp 00000000 00:00 0
1e4f5000-1e500000 ---p 00000000 00:00 0
1e500000-1e5f6000 rwxp 00000000 00:00 0
1e5f6000-1e600000 ---p 00000000 00:00 0
1e600000-1e6f6000 rwxp 00000000 00:00 0
1e6f6000-1e700000 ---p 00000000 00:00 0
1e700000-1e7f6000 rwxp 00000000 00:00 0
1e7f6000-1e800000 ---p 00000000 00:00 0
1e800000-1e8f5000 rwxp 00000000 00:00 0
1e8f5000-1e900000 ---p 00000000 00:00 0
1e900000-1e9f6000 rwxp 00000000 00:00 0
1e9f6000-1ea00000 ---p 00000000 00:00 0
1ea00000-1eaf3000 rwxp 00000000 00:00 0
1eaf3000-1eb00000 ---p 00000000 00:00 0
1eb00000-1ebf6000 rwxp 00000000 00:00 0
1ebf6000-1ec00000 ---p 00000000 00:00 0
1ec00000-1ecf1000 rwxp 00000000 00:00 0
1ecf1000-1ed00000 ---p 00000000 00:00 0
1ed00000-1edf1000 rwxp 00000000 00:00 0
1edf1000-1ee00000 ---p 00000000 00:00 0
1ee00000-1eef6000 rwxp 00000000 00:00 0
1eef6000-1ef00000 ---p 00000000 00:00 0
1ef00000-1eff2000 rwxp 00000000 00:00 0
1eff2000-1f000000 ---p 00000000 00:00 0
1f000000-1f0f1000 rwxp 00000000 00:00 0
1f0f1000-1f100000 ---p 00000000 00:00 0
1f100000-1f1f3000 rwxp 00000000 00:00 0
1f1f3000-1f200000 ---p 00000000 00:00 0
1f200000-1f2f1000 rwxp 00000000 00:00 0
1f2f1000-1f300000 ---p 00000000 00:00 0
1f300000-1f3f1000 rwxp 00000000 00:00 0
1f3f1000-1f400000 ---p 00000000 00:00 0
1f400000-1f4f2000 rwxp 00000000 00:00 0
1f4f2000-1f500000 ---p 00000000 00:00 0
1f501000-1f50d000 rwxp 00000000 00:00 0
1f50d000-1f510000 ---p 00000000 00:00 0
1f510000-1f55e000 rwxp 00000000 00:00 0
1f55e000-1f561000 ---p 00000000 00:00 0
1f561000-1f5af000 rwxp 00000000 00:00 0
1f5af000-1f5b2000 ---p 00000000 00:00 0
1f5b2000-1f600000 rwxp 00000000 00:00 0
1f600000-1f6fa000 rwxp 00000000 00:00 0
1f6fa000-1f700000 ---p 00000000 00:00 0
1f700000-1f7f5000 rwxp 00000000 00:00 0
1f7f5000-1f800000 ---p 00000000 00:00 0
1f801000-1f80d000 rwxp 00000000 00:00 0
1f80d000-1f810000 ---p 00000000 00:00 0
1f810000-1f85e000 rwxp 00000000 00:00 0
1f85e000-1f861000 ---p 00000000 00:00 0
1f861000-1f8af000 rwxp 00000000 00:00 0
1f8af000-1f8b2000 ---p 00000000 00:00 0
1f8b2000-1f900000 rwxp 00000000 00:00 0
1f900000-1f9f1000 rwxp 00000000 00:00 0
1f9f1000-1fa00000 ---p 00000000 00:00 0
1fa00000-1faf1000 rwxp 00000000 00:00 0
1faf1000-1fb00000 ---p 00000000 00:00 0
1fb00000-1fbf1000 rwxp 00000000 00:00 0
1fbf1000-1fc00000 ---p 00000000 00:00 0
1fc00000-1fcf2000 rwxp 00000000 00:00 0
1fcf2000-1fd00000 ---p 00000000 00:00 0
1fd00000-1fdf1000 rwxp 00000000 00:00 0
1fdf1000-1fe00000 ---p 00000000 00:00 0
1fe00000-1fef6000 rwxp 00000000 00:00 0
1fef6000-1ff00000 ---p 00000000 00:00 0
1ff00000-1fff6000 rwxp 00000000 00:00 0
1fff6000-20000000 ---p 00000000 00:00 0
20000000-200f7000 rwxp 00000000 00:00 0
200f7000-20100000 ---p 00000000 00:00 0
20100000-201f6000 rwxp 00000000 00:00 0
201f6000-20200000 ---p 00000000 00:00 0
20200000-202fa000 rwxp 00000000 00:00 0
202fa000-20300000 ---p 00000000 00:00 0
20301000-2030d000 rwxp 00000000 00:00 0
2030d000-20310000 ---p 00000000 00:00 0
20310000-2035e000 rwxp 00000000 00:00 0
2035e000-20361000 ---p 00000000 00:00 0
20361000-203af000 rwxp 00000000 00:00 0
203af000-203b2000 ---p 00000000 00:00 0
203b2000-20400000 rwxp 00000000 00:00 0
20400000-204f6000 rwxp 00000000 00:00 0
204f6000-20500000 ---p 00000000 00:00 0
20500000-20600000 rwxp 00000000 00:00 0
20600000-206f6000 rwxp 00000000 00:00 0
206f6000-20700000 ---p 00000000 00:00 0
20700000-207f6000 rwxp 00000000 00:00 0
207f6000-20800000 ---p 00000000 00:00 0
20800000-208f6000 rwxp 00000000 00:00 0
208f6000-20900000 ---p 00000000 00:00 0
20901000-2090d000 rwxp 00000000 00:00 0
2090d000-20910000 ---p 00000000 00:00 0
20910000-2095e000 rwxp 00000000 00:00 0
2095e000-20961000 ---p 00000000 00:00 0
20961000-209af000 rwxp 00000000 00:00 0
209af000-209b2000 ---p 00000000 00:00 0
209b2000-20a00000 rwxp 00000000 00:00 0
20a00000-20af6000 rwxp 00000000 00:00 0
20af6000-20b00000 ---p 00000000 00:00 0
20b00000-20bf5000 rwxp 00000000 00:00 0
20bf5000-20c00000 ---p 00000000 00:00 0
20c00000-20cf6000 rwxp 00000000 00:00 0
20cf6000-20d00000 ---p 00000000 00:00 0
20d00000-20df6000 rwxp 00000000 00:00 0
20df6000-20e00000 ---p 00000000 00:00 0
20e00000-20ef6000 rwxp 00000000 00:00 0
20ef6000-20f00000 ---p 00000000 00:00 0
20f00000-20ff5000 rwxp 00000000 00:00 0
20ff5000-21000000 ---p 00000000 00:00 0
21000000-210f5000 rwxp 00000000 00:00 0
210f5000-21100000 ---p 00000000 00:00 0
21100000-211f1000 rwxp 00000000 00:00 0
211f1000-21200000 ---p 00000000 00:00 0
21200000-212f6000 rwxp 00000000 00:00 0
212f6000-21300000 ---p 00000000 00:00 0
21300000-213f5000 rwxp 00000000 00:00 0
213f5000-21400000 ---p 00000000 00:00 0
21400000-214f6000 rwxp 00000000 00:00 0
214f6000-21500000 ---p 00000000 00:00 0
21500000-215f6000 rwxp 00000000 00:00 0
215f6000-21600000 ---p 00000000 00:00 0
21600000-216f6000 rwxp 00000000 00:00 0
216f6000-21700000 ---p 00000000 00:00 0
21700000-217f5000 rwxp 00000000 00:00 0
217f5000-21800000 ---p 00000000 00:00 0
21800000-218fe000 rwxp 00000000 00:00 0
218fe000-21900000 ---p 00000000 00:00 0
21900000-219f6000 rwxp 00000000 00:00 0
219f6000-21a00000 ---p 00000000 00:00 0
21a00000-21af6000 rwxp 00000000 00:00 0
21af6000-21b00000 ---p 00000000 00:00 0
21b00000-21bf5000 rwxp 00000000 00:00 0
21bf5000-21c00000 ---p 00000000 00:00 0
21c00000-21cf6000 rwxp 00000000 00:00 0
21cf6000-21d00000 ---p 00000000 00:00 0
21d00000-21df6000 rwxp 00000000 00:00 0
21df6000-21e00000 ---p 00000000 00:00 0
21e00000-21ef6000 rwxp 00000000 00:00 0
21ef6000-21f00000 ---p 00000000 00:00 0
21f00000-21ff5000 rwxp 00000000 00:00 0
21ff5000-22000000 ---p 00000000 00:00 0
22000000-220f6000 rwxp 00000000 00:00 0
220f6000-22100000 ---p 00000000 00:00 0
22100000-221f6000 rwxp 00000000 00:00 0
221f6000-22200000 ---p 00000000 00:00 0
22200000-222f6000 rwxp 00000000 00:00 0
222f6000-22300000 ---p 00000000 00:00 0
22300000-223f5000 rwxp 00000000 00:00 0
223f5000-22400000 ---p 00000000 00:00 0
22400000-224f6000 rwxp 00000000 00:00 0
224f6000-22500000 ---p 00000000 00:00 0
22500000-225f6000 rwxp 00000000 00:00 0
225f6000-22600000 ---p 00000000 00:00 0
22600000-226f5000 rwxp 00000000 00:00 0
226f5000-22700000 ---p 00000000 00:00 0
22700000-227f7000 rwxp 00000000 00:00 0
227f7000-22800000 ---p 00000000 00:00 0
22800000-228fa000 rwxp 00000000 00:00 0
228fa000-22900000 ---p 00000000 00:00 0
22901000-2290d000 rwxp 00000000 00:00 0
2290d000-22910000 ---p 00000000 00:00 0
22910000-2295e000 rwxp 00000000 00:00 0
2295e000-22961000 ---p 00000000 00:00 0
22961000-229af000 rwxp 00000000 00:00 0
229af000-229b2000 ---p 00000000 00:00 0
229b2000-22a00000 rwxp 00000000 00:00 0
22a00000-22b00000 rwxp 00000000 00:00 0
22b01000-22b0d000 rwxp 00000000 00:00 0
22b0d000-22b10000 ---p 00000000 00:00 0
22b10000-22b5e000 rwxp 00000000 00:00 0
22b5e000-22b61000 ---p 00000000 00:00 0
22b61000-22baf000 rwxp 00000000 00:00 0
22baf000-22bb2000 ---p 00000000 00:00 0
22bb2000-22c00000 rwxp 00000000 00:00 0
22c00000-22cf7000 rwxp 00000000 00:00 0
22cf7000-22d00000 ---p 00000000 00:00 0
22d00000-22dfa000 rwxp 00000000 00:00 0
22dfa000-22e00000 ---p 00000000 00:00 0
22e00000-22ef9000 rwxp 00000000 00:00 0
22ef9000-22f00000 ---p 00000000 00:00 0
22f00000-22ff2000 rwxp 00000000 00:00 0
22ff2000-23000000 ---p 00000000 00:00 0
23000000-230fa000 rwxp 00000000 00:00 0
230fa000-23100000 ---p 00000000 00:00 0
23101000-2310d000 rwxp 00000000 00:00 0
2310d000-23110000 ---p 00000000 00:00 0
23110000-2315e000 rwxp 00000000 00:00 0
2315e000-23161000 ---p 00000000 00:00 0
23161000-231af000 rwxp 00000000 00:00 0
231af000-231b2000 ---p 00000000 00:00 0
231b2000-23200000 rwxp 00000000 00:00 0
23200000-232ff000 rwxp 00000000 00:00 0
232ff000-23300000 ---p 00000000 00:00 0
23300000-233fd000 rwxp 00000000 00:00 0
233fd000-23400000 ---p 00000000 00:00 0
23400000-234f1000 rwxp 00000000 00:00 0
234f1000-23500000 ---p 00000000 00:00 0
23500000-235fb000 rwxp 00000000 00:00 0
235fb000-23600000 ---p 00000000 00:00 0
23600000-236f1000 rwxp 00000000 00:00 0
236f1000-23700000 ---p 00000000 00:00 0
23700000-237f1000 rwxp 00000000 00:00 0
237f1000-23800000 ---p 00000000 00:00 0
23800000-238f1000 rwxp 00000000 00:00 0
238f1000-23900000 ---p 00000000 00:00 0
23900000-239f1000 rwxp 00000000 00:00 0
239f1000-23a00000 ---p 00000000 00:00 0
23a00000-23af1000 rwxp 00000000 00:00 0
23af1000-23b00000 ---p 00000000 00:00 0
23b00000-23bf1000 rwxp 00000000 00:00 0
23bf1000-23c00000 ---p 00000000 00:00 0
23c00000-23cfe000 rwxp 00000000 00:00 0
23cfe000-23d00000 ---p 00000000 00:00 0
23d00000-23df1000 rwxp 00000000 00:00 0
23df1000-23e00000 ---p 00000000 00:00 0
23e00000-23ef1000 rwxp 00000000 00:00 0
23ef1000-23f00000 ---p 00000000 00:00 0
23f00000-23fe7000 rwxp 00000000 00:00 0
23fe7000-24000000 ---p 00000000 00:00 0
24000000-240f1000 rwxp 00000000 00:00 0
240f1000-24100000 ---p 00000000 00:00 0
24100000-241f1000 rwxp 00000000 00:00 0
241f1000-24200000 ---p 00000000 00:00 0
24200000-242f5000 rwxp 00000000 00:00 0
242f5000-24300000 ---p 00000000 00:00 0
24301000-2430d000 rwxp 00000000 00:00 0
2430d000-24310000 ---p 00000000 00:00 0
24310000-2435e000 rwxp 00000000 00:00 0
2435e000-24361000 ---p 00000000 00:00 0
24361000-243af000 rwxp 00000000 00:00 0
243af000-243b2000 ---p 00000000 00:00 0
243b2000-24400000 rwxp 00000000 00:00 0
24400000-244f1000 rwxp 00000000 00:00 0
244f1000-24500000 ---p 00000000 00:00 0
24500000-245f1000 rwxp 00000000 00:00 0
245f1000-24600000 ---p 00000000 00:00 0
24600000-246f1000 rwxp 00000000 00:00 0
246f1000-24700000 ---p 00000000 00:00 0
24700000-247f1000 rwxp 00000000 00:00 0
247f1000-24800000 ---p 00000000 00:00 0
24800000-248f1000 rwxp 00000000 00:00 0
248f1000-24900000 ---p 00000000 00:00 0
24900000-249f1000 rwxp 00000000 00:00 0
249f1000-24a00000 ---p 00000000 00:00 0
24a00000-24af1000 rwxp 00000000 00:00 0
24af1000-24b00000 ---p 00000000 00:00 0
24b00000-24bf1000 rwxp 00000000 00:00 0
24bf1000-24c00000 ---p 00000000 00:00 0
24c00000-24cf1000 rwxp 00000000 00:00 0
24cf1000-24d00000 ---p 00000000 00:00 0
24d01000-24d09000 rwxp 00000000 00:00 0
24d09000-24d0d000 rwxp 00000000 00:00 0
24d0d000-24d10000 ---p 00000000 00:00 0
24d10000-24d5e000 rwxp 00000000 00:00 0
24d5e000-24d61000 ---p 00000000 00:00 0
24d61000-24daf000 rwxp 00000000 00:00 0
24daf000-24db2000 ---p 00000000 00:00 0
24db2000-24e00000 rwxp 00000000 00:00 0
24e00000-24ef1000 rwxp 00000000 00:00 0
24ef1000-24f00000 ---p 00000000 00:00 0
24f00000-24ff1000 rwxp 00000000 00:00 0
24ff1000-25000000 ---p 00000000 00:00 0
25000000-250f1000 rwxp 00000000 00:00 0
250f1000-25100000 ---p 00000000 00:00 0
25100000-251f1000 rwxp 00000000 00:00 0
251f1000-25200000 ---p 00000000 00:00 0
25200000-252f1000 rwxp 00000000 00:00 0
252f1000-25300000 ---p 00000000 00:00 0
25300000-253f1000 rwxp 00000000 00:00 0
253f1000-25400000 ---p 00000000 00:00 0
25400000-254f1000 rwxp 00000000 00:00 0
254f1000-25500000 ---p 00000000 00:00 0
25500000-25541000 rwxp 00000000 00:00 0
25541000-25544000 ---p 00000000 00:00 0
25544000-25592000 rwxp 00000000 00:00 0
25592000-25595000 ---p 00000000 00:00 0
25595000-255e3000 rwxp 00000000 00:00 0
255e3000-255e6000 ---p 00000000 00:00 0
255e6000-25634000 rwxp 00000000 00:00 0
25634000-25637000 ---p 00000000 00:00 0
25637000-25685000 rwxp 00000000 00:00 0
25685000-25688000 ---p 00000000 00:00 0
25688000-256d6000 rwxp 00000000 00:00 0
256d6000-256d9000 ---p 00000000 00:00 0
256d9000-25727000 rwxp 00000000 00:00 0
25727000-2572a000 ---p 00000000 00:00 0
2572a000-25778000 rwxp 00000000 00:00 0
25778000-2577b000 ---p 00000000 00:00 0
2577b000-257c9000 rwxp 00000000 00:00 0
257c9000-257cc000 ---p 00000000 00:00 0
257cc000-2581a000 rwxp 00000000 00:00 0
2581a000-2581d000 ---p 00000000 00:00 0
2581d000-2586b000 rwxp 00000000 00:00 0
2586b000-2586e000 ---p 00000000 00:00 0
2586e000-258bc000 rwxp 00000000 00:00 0
258bc000-258bf000 ---p 00000000 00:00 0
258bf000-2590d000 rwxp 00000000 00:00 0
2590d000-25910000 ---p 00000000 00:00 0
25910000-2595e000 rwxp 00000000 00:00 0
2595e000-25961000 ---p 00000000 00:00 0
25961000-259af000 rwxp 00000000 00:00 0
259af000-259b2000 ---p 00000000 00:00 0
259b2000-25a00000 rwxp 00000000 00:00 0
25a00000-25af1000 rwxp 00000000 00:00 0
25af1000-25b00000 ---p 00000000 00:00 0
25b01000-25b0d000 rwxp 00000000 00:00 0
25b0d000-25b10000 ---p 00000000 00:00 0
25b10000-25b5e000 rwxp 00000000 00:00 0
25b5e000-25b61000 ---p 00000000 00:00 0
25b61000-25baf000 rwxp 00000000 00:00 0
25baf000-25bb2000 ---p 00000000 00:00 0
25bb2000-25c00000 rwxp 00000000 00:00 0
25c00000-25cf1000 rwxp 00000000 00:00 0
25cf1000-25d00000 ---p 00000000 00:00 0
25d00000-25dfd000 rwxp 00000000 00:00 0
25dfd000-25e00000 ---p 00000000 00:00 0
25e00000-25ef1000 rwxp 00000000 00:00 0
25ef1000-25f00000 ---p 00000000 00:00 0
25f00000-25f41000 rwxp 00000000 00:00 0
25f41000-25f44000 ---p 00000000 00:00 0
25f44000-25f92000 rwxp 00000000 00:00 0
25f92000-25f95000 ---p 00000000 00:00 0
25f95000-25fe3000 rwxp 00000000 00:00 0
25fe3000-25fe6000 ---p 00000000 00:00 0
25fe6000-26034000 rwxp 00000000 00:00 0
26034000-26037000 ---p 00000000 00:00 0
26037000-26085000 rwxp 00000000 00:00 0
26085000-26088000 ---p 00000000 00:00 0
26088000-260d6000 rwxp 00000000 00:00 0
260d6000-260d9000 ---p 00000000 00:00 0
260d9000-26127000 rwxp 00000000 00:00 0
26127000-2612a000 ---p 00000000 00:00 0
2612a000-26178000 rwxp 00000000 00:00 0
26178000-2617b000 ---p 00000000 00:00 0
2617b000-261c9000 rwxp 00000000 00:00 0
261c9000-261cc000 ---p 00000000 00:00 0
261cc000-2621a000 rwxp 00000000 00:00 0
2621a000-2621d000 ---p 00000000 00:00 0
2621d000-2626b000 rwxp 00000000 00:00 0
2626b000-2626e000 ---p 00000000 00:00 0
2626e000-262bc000 rwxp 00000000 00:00 0
262bc000-262bf000 ---p 00000000 00:00 0
262bf000-2630d000 rwxp 00000000 00:00 0
2630d000-26310000 ---p 00000000 00:00 0
26310000-2635e000 rwxp 00000000 00:00 0
2635e000-26361000 ---p 00000000 00:00 0
26361000-263af000 rwxp 00000000 00:00 0
263af000-263b2000 ---p 00000000 00:00 0
263b2000-26400000 rwxp 00000000 00:00 0
26400000-26403000 ---p 00000000 00:00 0
26403000-26451000 rwxp 00000000 00:00 0
26451000-26454000 ---p 00000000 00:00 0
26454000-264a2000 rwxp 00000000 00:00 0
264a2000-264a5000 ---p 00000000 00:00 0
264a5000-264f3000 rwxp 00000000 00:00 0
264f3000-264f6000 ---p 00000000 00:00 0
264f6000-26544000 rwxp 00000000 00:00 0
26544000-26547000 ---p 00000000 00:00 0
26547000-26595000 rwxp 00000000 00:00 0
26595000-26598000 ---p 00000000 00:00 0
26598000-265e6000 rwxp 00000000 00:00 0
265e6000-265e9000 ---p 00000000 00:00 0
265e9000-26637000 rwxp 00000000 00:00 0
26637000-2663a000 ---p 00000000 00:00 0
2663a000-26688000 rwxp 00000000 00:00 0
26688000-2668b000 ---p 00000000 00:00 0
2668b000-266d9000 rwxp 00000000 00:00 0
266d9000-266dc000 ---p 00000000 00:00 0
266dc000-2672a000 rwxp 00000000 00:00 0
2672a000-2672d000 ---p 00000000 00:00 0
2672d000-2677b000 rwxp 00000000 00:00 0
2677b000-2677e000 ---p 00000000 00:00 0
2677e000-267cc000 rwxp 00000000 00:00 0
267cc000-267cf000 ---p 00000000 00:00 0
267cf000-2681d000 rwxp 00000000 00:00 0
2681d000-26820000 ---p 00000000 00:00 0
26820000-2686e000 rwxp 00000000 00:00 0
2686e000-26871000 ---p 00000000 00:00 0
26871000-268bf000 rwxp 00000000 00:00 0
268bf000-268c2000 ---p 00000000 00:00 0
268c2000-26910000 rwxp 00000000 00:00 0
26910000-26913000 ---p 00000000 00:00 0
26913000-26961000 rwxp 00000000 00:00 0
26961000-26964000 ---p 00000000 00:00 0
26964000-269b2000 rwxp 00000000 00:00 0
269b2000-269b5000 ---p 00000000 00:00 0
269b5000-26a03000 rwxp 00000000 00:00 0
26a03000-26a06000 ---p 00000000 00:00 0
26a06000-26a54000 rwxp 00000000 00:00 0
26a54000-26a57000 ---p 00000000 00:00 0
26a57000-26aa5000 rwxp 00000000 00:00 0
26aa5000-26aa8000 ---p 00000000 00:00 0
26aa8000-26af6000 rwxp 00000000 00:00 0
26af6000-26af9000 ---p 00000000 00:00 0
26af9000-26b47000 rwxp 00000000 00:00 0
26b47000-26b4a000 ---p 00000000 00:00 0
26b4a000-26b98000 rwxp 00000000 00:00 0
26b98000-26b9b000 ---p 00000000 00:00 0
26b9b000-26be9000 rwxp 00000000 00:00 0
26be9000-26bec000 ---p 00000000 00:00 0
26bec000-26c3a000 rwxp 00000000 00:00 0
26c3a000-26c3d000 ---p 00000000 00:00 0
26c3d000-26c8b000 rwxp 00000000 00:00 0
26c8b000-26c8e000 ---p 00000000 00:00 0
26c8e000-26cdc000 rwxp 00000000 00:00 0
26cdc000-26cdf000 ---p 00000000 00:00 0
26cdf000-26d2d000 rwxp 00000000 00:00 0
26d2d000-26d30000 ---p 00000000 00:00 0
26d30000-26d7e000 rwxp 00000000 00:00 0
26d7e000-26d81000 ---p 00000000 00:00 0
26d81000-26dcf000 rwxp 00000000 00:00 0
26dcf000-26dd2000 ---p 00000000 00:00 0
26dd2000-26e20000 rwxp 00000000 00:00 0
26e20000-26e23000 ---p 00000000 00:00 0
26e23000-26e71000 rwxp 00000000 00:00 0
26e71000-26e74000 ---p 00000000 00:00 0
26e74000-26ec2000 rwxp 00000000 00:00 0
26ec2000-26ec5000 ---p 00000000 00:00 0
26ec5000-26f13000 rwxp 00000000 00:00 0
26f13000-26f16000 ---p 00000000 00:00 0
26f16000-26f64000 rwxp 00000000 00:00 0
26f64000-26f67000 ---p 00000000 00:00 0
26f67000-26fb5000 rwxp 00000000 00:00 0
26fb5000-26fb8000 ---p 00000000 00:00 0
26fb8000-27006000 rwxp 00000000 00:00 0
27006000-27009000 ---p 00000000 00:00 0
27009000-27057000 rwxp 00000000 00:00 0
27057000-2705a000 ---p 00000000 00:00 0
2705a000-270a8000 rwxp 00000000 00:00 0
270a8000-270ab000 ---p 00000000 00:00 0
270ab000-270f9000 rwxp 00000000 00:00 0
270f9000-270fc000 ---p 00000000 00:00 0
270fc000-2714a000 rwxp 00000000 00:00 0
2714a000-2714d000 ---p 00000000 00:00 0
2714d000-2719b000 rwxp 00000000 00:00 0
2719b000-2719e000 ---p 00000000 00:00 0
2719e000-271ec000 rwxp 00000000 00:00 0
271ec000-271ef000 ---p 00000000 00:00 0
271ef000-2723d000 rwxp 00000000 00:00 0
2723d000-27240000 ---p 00000000 00:00 0
27240000-2728e000 rwxp 00000000 00:00 0
2728e000-27291000 ---p 00000000 00:00 0
27291000-272df000 rwxp 00000000 00:00 0
272df000-272e2000 ---p 00000000 00:00 0
272e2000-27330000 rwxp 00000000 00:00 0
27330000-27333000 ---p 00000000 00:00 0
27333000-27381000 rwxp 00000000 00:00 0
27381000-27384000 ---p 00000000 00:00 0
27384000-273d2000 rwxp 00000000 00:00 0
273d2000-273d5000 ---p 00000000 00:00 0
273d5000-27423000 rwxp 00000000 00:00 0
27423000-27426000 ---p 00000000 00:00 0
27426000-27474000 rwxp 00000000 00:00 0
27474000-27477000 ---p 00000000 00:00 0
27477000-274c5000 rwxp 00000000 00:00 0
274c5000-274c8000 ---p 00000000 00:00 0
274c8000-27516000 rwxp 00000000 00:00 0
27516000-27519000 ---p 00000000 00:00 0
27519000-27567000 rwxp 00000000 00:00 0
27567000-2756a000 ---p 00000000 00:00 0
2756a000-275b8000 rwxp 00000000 00:00 0
275b8000-275bb000 ---p 00000000 00:00 0
275bb000-27609000 rwxp 00000000 00:00 0
27609000-2760c000 ---p 00000000 00:00 0
2760c000-2765a000 rwxp 00000000 00:00 0
2765a000-2765d000 ---p 00000000 00:00 0
2765d000-276ab000 rwxp 00000000 00:00 0
276ab000-276ae000 ---p 00000000 00:00 0
276ae000-276fc000 rwxp 00000000 00:00 0
276fc000-276ff000 ---p 00000000 00:00 0
276ff000-2774d000 rwxp 00000000 00:00 0
2774d000-27750000 ---p 00000000 00:00 0
27750000-2779e000 rwxp 00000000 00:00 0
2779e000-277a1000 ---p 00000000 00:00 0
277a1000-277ef000 rwxp 00000000 00:00 0
277ef000-277f2000 ---p 00000000 00:00 0
277f2000-27840000 rwxp 00000000 00:00 0
27840000-27843000 ---p 00000000 00:00 0
27843000-27891000 rwxp 00000000 00:00 0
27891000-27894000 ---p 00000000 00:00 0
27894000-278e2000 rwxp 00000000 00:00 0
278e2000-278e5000 ---p 00000000 00:00 0
278e5000-27933000 rwxp 00000000 00:00 0
27933000-27936000 ---p 00000000 00:00 0
27936000-27984000 rwxp 00000000 00:00 0
27984000-27987000 ---p 00000000 00:00 0
27987000-279d5000 rwxp 00000000 00:00 0
279d5000-279d8000 ---p 00000000 00:00 0
279d8000-27a26000 rwxp 00000000 00:00 0
27a26000-27a29000 ---p 00000000 00:00 0
27a29000-27a77000 rwxp 00000000 00:00 0
27a77000-27a7a000 ---p 00000000 00:00 0
27a7a000-27ac8000 rwxp 00000000 00:00 0
27ac8000-27acb000 ---p 00000000 00:00 0
27acb000-27b19000 rwxp 00000000 00:00 0
27b19000-27b1c000 ---p 00000000 00:00 0
27b1c000-27b6a000 rwxp 00000000 00:00 0
27b6a000-27b6d000 ---p 00000000 00:00 0
27b6d000-27bbb000 rwxp 00000000 00:00 0
27bbb000-27bbe000 ---p 00000000 00:00 0
27bbe000-27c0c000 rwxp 00000000 00:00 0
27c0c000-27c0f000 ---p 00000000 00:00 0
27c0f000-27c5d000 rwxp 00000000 00:00 0
27c5d000-27c60000 ---p 00000000 00:00 0
27c60000-27cae000 rwxp 00000000 00:00 0
27cae000-27cb1000 ---p 00000000 00:00 0
27cb1000-27cff000 rwxp 00000000 00:00 0
27cff000-27d02000 ---p 00000000 00:00 0
27d02000-27d50000 rwxp 00000000 00:00 0
27d50000-27d53000 ---p 00000000 00:00 0
27d53000-27da1000 rwxp 00000000 00:00 0
27da1000-27da4000 ---p 00000000 00:00 0
27da4000-27df2000 rwxp 00000000 00:00 0
27df2000-27df5000 ---p 00000000 00:00 0
27df5000-27e43000 rwxp 00000000 00:00 0
27e43000-27e46000 ---p 00000000 00:00 0
27e46000-27e94000 rwxp 00000000 00:00 0
27e94000-27e97000 ---p 00000000 00:00 0
27e97000-27ee5000 rwxp 00000000 00:00 0
27ee5000-27ee8000 ---p 00000000 00:00 0
27ee8000-27f36000 rwxp 00000000 00:00 0
27f36000-27f39000 ---p 00000000 00:00 0
27f39000-27f87000 rwxp 00000000 00:00 0
27f87000-27f8a000 ---p 00000000 00:00 0
27f8a000-27fd8000 rwxp 00000000 00:00 0
27fd8000-27fdb000 ---p 00000000 00:00 0
27fdb000-28029000 rwxp 00000000 00:00 0
28029000-2802c000 ---p 00000000 00:00 0
2802c000-2807a000 rwxp 00000000 00:00 0
2807a000-2807d000 ---p 00000000 00:00 0
2807d000-280cb000 rwxp 00000000 00:00 0
280cb000-280ce000 ---p 00000000 00:00 0
280ce000-2811c000 rwxp 00000000 00:00 0
2811c000-2811f000 ---p 00000000 00:00 0
2811f000-2816d000 rwxp 00000000 00:00 0
2816d000-28170000 ---p 00000000 00:00 0
28170000-281be000 rwxp 00000000 00:00 0
281be000-281c1000 ---p 00000000 00:00 0
281c1000-2820f000 rwxp 00000000 00:00 0
2820f000-28212000 ---p 00000000 00:00 0
28212000-28260000 rwxp 00000000 00:00 0
28260000-28263000 ---p 00000000 00:00 0
28263000-282b1000 rwxp 00000000 00:00 0
282b1000-282b4000 ---p 00000000 00:00 0
282b4000-28302000 rwxp 00000000 00:00 0
28302000-28305000 ---p 00000000 00:00 0
28305000-28353000 rwxp 00000000 00:00 0
28353000-28356000 ---p 00000000 00:00 0
28356000-283a4000 rwxp 00000000 00:00 0
283a4000-283a7000 ---p 00000000 00:00 0
283a7000-283f5000 rwxp 00000000 00:00 0
283f5000-283f8000 ---p 00000000 00:00 0
283f8000-28446000 rwxp 00000000 00:00 0
28446000-28449000 ---p 00000000 00:00 0
28449000-28497000 rwxp 00000000 00:00 0
28497000-2849a000 ---p 00000000 00:00 0
2849a000-284e8000 rwxp 00000000 00:00 0
284e8000-284eb000 ---p 00000000 00:00 0
284eb000-28539000 rwxp 00000000 00:00 0
28539000-2853c000 ---p 00000000 00:00 0
2853c000-2858a000 rwxp 00000000 00:00 0
2858a000-2858d000 ---p 00000000 00:00 0
2858d000-285db000 rwxp 00000000 00:00 0
285db000-285de000 ---p 00000000 00:00 0
285de000-2862c000 rwxp 00000000 00:00 0
2862c000-2862f000 ---p 00000000 00:00 0
2862f000-2867d000 rwxp 00000000 00:00 0
2867d000-28680000 ---p 00000000 00:00 0
28680000-286ce000 rwxp 00000000 00:00 0
286ce000-286d1000 ---p 00000000 00:00 0
286d1000-2871f000 rwxp 00000000 00:00 0
2871f000-28722000 ---p 00000000 00:00 0
28722000-28770000 rwxp 00000000 00:00 0
28770000-28773000 ---p 00000000 00:00 0
28773000-287c1000 rwxp 00000000 00:00 0
287c1000-287c4000 ---p 00000000 00:00 0
287c4000-28812000 rwxp 00000000 00:00 0
28812000-28815000 ---p 00000000 00:00 0
28815000-28863000 rwxp 00000000 00:00 0
28863000-28866000 ---p 00000000 00:00 0
28866000-288b4000 rwxp 00000000 00:00 0
288b4000-288b7000 ---p 00000000 00:00 0
288b7000-28905000 rwxp 00000000 00:00 0
28905000-28908000 ---p 00000000 00:00 0
28908000-28956000 rwxp 00000000 00:00 0
28956000-28959000 ---p 00000000 00:00 0
28959000-289a7000 rwxp 00000000 00:00 0
289a7000-289aa000 ---p 00000000 00:00 0
289aa000-289f8000 rwxp 00000000 00:00 0
289f8000-289fb000 ---p 00000000 00:00 0
289fb000-28a49000 rwxp 00000000 00:00 0
28a49000-28a4c000 ---p 00000000 00:00 0
28a4c000-28a9a000 rwxp 00000000 00:00 0
28a9a000-28a9d000 ---p 00000000 00:00 0
28a9d000-28aeb000 rwxp 00000000 00:00 0
28aeb000-28aee000 ---p 00000000 00:00 0
28aee000-28b3c000 rwxp 00000000 00:00 0
28b3c000-28b3f000 ---p 00000000 00:00 0
28b3f000-28b8d000 rwxp 00000000 00:00 0
28b8d000-28b90000 ---p 00000000 00:00 0
28b90000-28bde000 rwxp 00000000 00:00 0
28bde000-28be1000 ---p 00000000 00:00 0
28be1000-28c2f000 rwxp 00000000 00:00 0
28c2f000-28c32000 ---p 00000000 00:00 0
28c32000-28c80000 rwxp 00000000 00:00 0
28c80000-28c83000 ---p 00000000 00:00 0
28c83000-28cd1000 rwxp 00000000 00:00 0
28cd1000-28cd4000 ---p 00000000 00:00 0
28cd4000-28d22000 rwxp 00000000 00:00 0
bf7f1000-bf800000 ---p 00000000 00:00 0
bf800000-bf8f6000 rwxp 00000000 00:00 0
bf8f6000-bf900000 ---p 00000000 00:00 0
bf900000-bf9f6000 rwxp 00000000 00:00 0
bf9f6000-bfa00000 ---p 00000000 00:00 0
bfa00000-bfaf6000 rwxp 00000000 00:00 0
bfaf6000-bfb00000 ---p 00000000 00:00 0
bfb00000-bfb22000 rwxp 00000000 00:00 0
bfb28000-bfb3d000 rwxp 00000000 00:00 0          [stack]
bfb3d000-bfbe7000 rwxp 00000000 00:00 0
bfbe7000-bfbf8000 rwxp 00000000 00:00 0
bfc00000-bfcf5000 rwxp 00000000 00:00 0
bfcf5000-bfd00000 ---p 00000000 00:00 0
bfd00000-bfdf6000 rwxp 00000000 00:00 0
bfdf6000-bfe00000 ---p 00000000 00:00 0
bfe00000-bfef6000 rwxp 00000000 00:00 0
bfef6000-bff00000 ---p 00000000 00:00 0
bff00000-c0000000 rwxp 00000000 00:00 0

VM Arguments:
jvm_args: -Xms2g -Xmx2g -XX:MaxPermSize=128M
java_command: x2.jar
Launcher Type: SUN_STANDARD

Environment Variables:
JAVA_HOME=/usr/lib/jvm/java-6-sun-1.6.0.20
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games
LD_LIBRARY_PATH=/usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386/server:/usr/lib/jvm/java-6-sun-1.6.0.20/jre/lib/i386:/usr/lib/jvm/java-6-sun-1.6.0.20/jre/../lib/i386
SHELL=/bin/bash

Signal Handlers:
SIGSEGV: [libjvm.so+0x68d5c0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGBUS: [libjvm.so+0x68d5c0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGFPE: [libjvm.so+0x55cb30], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGPIPE: [libjvm.so+0x55cb30], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGXFSZ: [libjvm.so+0x55cb30], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGILL: [libjvm.so+0x55cb30], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGUSR1: SIG_DFL, sa_mask[0]=0x00000000, sa_flags=0x00000000
SIGUSR2: [libjvm.so+0x55f770], sa_mask[0]=0x00000000, sa_flags=0x10000004
SIGHUP: [libjvm.so+0x55f4a0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGINT: [libjvm.so+0x55f4a0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGTERM: [libjvm.so+0x55f4a0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004
SIGQUIT: [libjvm.so+0x55f4a0], sa_mask[0]=0x7ffbfeff, sa_flags=0x10000004


---------------  S Y S T E M  ---------------

OS:squeeze/sid

uname:Linux 2.6.31-14-generic-pae #48-Ubuntu SMP Fri Oct 16 15:22:42 UTC 2009 i686
libc:glibc 2.10.1 NPTL 2.10.1
rlimit: STACK 8192k, CORE 0k, NPROC infinity, NOFILE 327680, AS infinity
load average:0.08 0.14 0.17

CPU:total 8 (4 cores per cpu, 1 threads per core) family 6 model 23 stepping 10, cmov, cx8, fxsr, mmx, sse, sse2, sse3, ssse3, sse4.1

Memory: 4k page, physical 16544080k(2270736k free), swap 15623172k(15375144k free)

vm_info: Java HotSpot(TM) Server VM (16.3-b01) for linux-x86 JRE (1.6.0_20-b02), built on Apr 12 2010 13:58:11 by "java_re" with gcc 3.2.1-7a (J2SE release)

time: Sun Aug 21 00:52:52 2011
elapsed time: 2301 seconds

挂掉服务器的时间很频繁

4-1 如何定义 Java 中的方法;Java 中无参无返回值方法的使用;Java 中无参带返回值方法的使用;

4-1 如何定义 Java 中的方法;Java 中无参无返回值方法的使用;Java 中无参带返回值方法的使用;

1.一般情况下,定义一个方法的语法是:

访问修饰符 返回值类型 方法名(参数列表){
方法体
}

1、 访问修饰符:方法允许被访问的权限范围, 可以是 public、protected、private 甚至可以省略 ,其中 public 表示该方法可以被其他任何代码调用,其他几种修饰符的使用在后面章节中会详细讲解滴

2、 返回值类型:方法返回值的类型,如果方法不返回任何值,则返回值类型指定为 void ;如果方法具有返回值,则需要指定返回值的类型,并且在方法体中使用 return 语句返回值

3、 方法名:定义的方法的名字,必须使用合法的标识符

4、 参数列表:传递给方法的参数列表,参数可以有多个,多个参数间以逗号隔开,每个参数由参数类型和参数名组成,以空格隔开 

根据方法是否带参、是否带返回值,可将方法分为四类:

Ø 无参无返回值方法

Ø 无参带返回值方法

Ø 带参无返回值方法

Ø 带参带返回值方法

public class HelloWorld {
    
    //定义了一个方法名为 print 的方法,实现输出信息功能
    public void print() {
        System.out.println("Hello World");
    }
    
    public static void main(String[] args){
        
        //在 main 方法中调用 print 方法
        HelloWorld test=new HelloWorld();
        test.print();
    }
}

2.Java 中无参无返回值方法的使用(如果方法不包含参数,且没有返回值,称为无参无返回值的方法。

方法的使用分两步

例如:下面代码定义了一个方法名为 show ,没有参数,且没有返回值的方法,执行的操作为输出 “ welcome to imooc. ”

注意:

1、 方法体放在一对大括号中,实现特定的操作

2、 方法名主要在调用这个方法时使用,需要注意命名的规范,一般采用第一个单词首字母小写,其它单词首字母大写的形式

第二步,调用方法

当需要调用方法执行某个操作时,可以先创建类的对象,然后通过  对象名.方法名();  来实现(关于类和对象的概念在后面章节中会详细讲解滴,先熟悉语法,表着急哦~~)

例如:在下面的代码中,我们创建了一个名为 hello 的对象,然后通过调用该对象的 show( ) 方法输出信息

运行结果为:  welcome to imooc.

3.Java 中无参带返回值方法的使用

如果方法不包含参数,但有返回值,我们称为无参带返回值的方法。

例如:下面的代码,定义了一个方法名为 calSum ,无参数,但返回值为 int 类型的方法,执行的操作为计算两数之和,并返回结果

     在 calSum( ) 方法中,返回值类型为 int 类型,因此在方法体中必须使用 return 返回一个整数值。

运行结果为: 两数之和为:17

不容忽视的“小陷阱”:

1、 如果方法的返回类型为 void ,则方法中不能使用 return 返回值!

2、 方法的返回值最多只能有一个,不能返回多个值

3、 方法返回值的类型必须兼容,例如,如果返回值类型为 int ,则不能返回 String 型值

 

 

 

 

 

 

 

 

5-2 Java 中的 static 使用之静态变量 ;;Java 中的 static 使用之静态方法;;Java 中的 static 使用之静态初始化块

5-2 Java 中的 static 使用之静态变量 ;;Java 中的 static 使用之静态方法;;Java 中的 static 使用之静态初始化块

1.Java 中被 static 修饰的成员称为静态成员或类成员。它属于整个类所有,而不是某个对象所有,即被类的所有对象所共享。静态成员可以使用类名直接访问,也可以使用对象名进行访问。当然,鉴于他作用的特殊性更推荐用类名访问

使用 static 可以修饰变量、方法和代码块。

    

2. 与静态变量一样,我们也可以使用 static 修饰方法,称为静态方法或类方法。其实之前我们一直写的 main 方法就是静态方法。静态方法的使用如:

         

注意:

1、 静态方法中可以直接调用同类中的静态成员,但不能直接调用非静态成员。如:

    

如果希望在静态方法中调用非静态变量,可以通过创建类的对象,然后通过对象来访问非静态变量。如:

2、 在普通成员方法中,则可以直接访问同类的非静态变量和静态变量,如下所示:

3、 静态方法中不能直接调用非静态方法,需要通过对象来访问非静态方法。如:

          

3.Java 中的 static 使用之静态初始化块

Java 中可以通过初始化块进行数据赋值。如:

   在类的声明中,可以包含多个初始化块,当创建类的实例时,就会依次执行这些代码块。如果使用 static 修饰初始化块,就称为静态初始化块。

注意:静态初始化块只在类加载时执行,且只会执行一次,同时静态初始化块只能给静态变量赋值,不能初始化普通的成员变量  

 

 

 

 

 

 

ArrayMap java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]

ArrayMap java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]

错误堆栈:

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]
    at android.support.v4.util.SimpleArrayMap.allocArrays(SourceFile:183)
    at android.support.v4.util.SimpleArrayMap.put(SourceFile:437)

错误原因:
由于SimpleArrayMap 里面使用了一个静态变量的缓存,mBaseCache,

    static Object[] mBaseCache;

该变量默认有两个数据,第1个元素是一个object[],用于存放上次的缓存的mBaseCache
第二个元素是int[],用于存在hash。具体赋值代码可以看下面

synchronized (ArrayMap.class) {
                if (mBaseCacheSize < CACHE_SIZE) {
                    array[0] = mBaseCache;
                    array[1] = hashes;
                    for (int i=(size<<1)-1; i>=2; i--) {
                        array[i] = null;
                    }
                    mBaseCache = array;
                    mBaseCacheSize++;
                    if (DEBUG) Log.d(TAG, "Storing 1x cache " + array
                            + " now have " + mBaseCacheSize + " entries");
                }
            }

使用该数组的地方在:
SimpleArrayMap 的allocArrays 方法里

synchronized (ArrayMap.class) {
                if (mBaseCache != null) {
                    final Object[] array = mBaseCache;
                    mArray = array;
                    mBaseCache = (Object[])array[0];
                    mHashes = (int[])array[1];
                    array[0] = array[1] = null;
                    mBaseCacheSize--;
                    if (DEBUG) Log.d(TAG, "Retrieving 1x cache " + mHashes
                            + " now have " + mBaseCacheSize + " entries");
                    return;
                }
            }

下面这段代码是有风险的,如果mBaseCache 在多线程被修改了,就会把ClassCastException 异常。

        mBaseCache = (Object[])array[0];

解决方法:
如果项目某个地方报这个错误,请把这个地方的ArrayMap替换成 HasMap. HasMap 多线程不会崩溃,虽然,他不是特别完好的支持。不需要把项目中所有的地方都替换掉,没有必要。单独线程,ArrayMap 完全没有问题。

错误复现:这个复现起来超级麻烦,我花了一周的时间,才找到复现的漏洞,分享给大家:

    /**
     * 复现该问题  用了四个线程
     *     java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]
     *         at android.support.v4.util.SimpleArrayMap.allocArrays(SimpleArrayMap.java:157)
     *         at android.support.v4.util.SimpleArrayMap.put(SimpleArrayMap.java:399)
     *         at com.example.fragment.MainFragment$14.run(MainFragment.java:280)
     *        1.首先 线程1 执行到put 方法的

     *         mArray[index<<1] = key;
     *         mArray[(index<<1)+1] = value;
     *         mSize++;
     *         return null;
     *         最上面这个位置  目的是让这个数组不再是空的
     *
     *         2.执行线程2  也执行到
     *         mArray[index<<1] = key;
     *         mArray[(index<<1)+1] = value;
     *         mSize++;
     *         return null;
     *         最上面这个位置  目的是让这个put 的东西,放在第0个位置,因为put里面会生成index,
     *         让两个线程都放到index 是0 的位置
     *
     *         3.把线程1执行完,这样数据里面已经放进去一个数据了
     *
     *         4.执行线程3 到removeAt 方法的 freeArrays 的  mBaseCache = array; 之前
     *             public V removeAt(int index) {
     *              final Object old = mArray[(index << 1) + 1];
     *              if (mSize <= 1) {
     *             // Now empty.
     *             if (DEBUG) Log.d(TAG, "remove: shrink from " + mHashes.length + " to 0");
     *             freeArrays(mHashes, mArray, mSize);
     *
     *             mBaseCache = array;----------- freeArrays
     *
     *             这个的目的是调用freeArray 方法,让当前的map释放当前的数组。这样就可以生成mBaseCache了
     *
 *             5.把线程2  执行完
 *             这样就会把mBaseCache 赋值的数组,重新赋值
 *
 *             6.把线程3执行完
 *             ok,现在mBaseCache已经被污染了
 *
 *             7.执行线程4
 *
 */
    private void CMETestCastException() {
        final ArrayMap testArrayMap = new ArrayMap();
        final ArrayMap testArrayMap2 = new ArrayMap();

        new  Thread("线程1"){
            @Override
            public void run() {
                super.run();
                    testArrayMap.put("2324","fffff");
            }

        }.start();

        new  Thread("线程2"){
            @Override
            public void run() {
                super.run();
                    testArrayMap.put("test","string");
            }

        }.start();

        new  Thread("线程3"){
            @Override
            public void run() {
                super.run();
                    testArrayMap.removeAt(0);
            }

        }.start();

        new  Thread("线程4"){
            @Override
            public void run() {
                super.run();
                    testArrayMap2.put("aaa","string");
            }

        }.start();
    }

复现这个问题的时候,关键是把mBaseCache 污染掉。这里四个线程的话,需要调试,调试步骤就是上面我注释的。

总结:
如果当前的map 会有多个线程访问,请使用HasMap. 该问题,google 并没有解决。在高版本上,直接扔CME ConcurrentModificationException.

Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

elasticsearch系列七:ES Java客户端-Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)

一、ES Client 简介

1. ES是一个服务,采用C/S结构

 

2. 回顾 ES的架构

 

3. ES支持的客户端连接方式

3.1 REST API ,端口 9200

  这种连接方式对应于架构图中的RESTful style API这一层,这种客户端的连接方式是RESTful风格的,使用http的方式进行连接

3.2 Transport 连接 端口 9300

      这种连接方式对应于架构图中的Transport这一层,这种客户端连接方式是直接连接ES的节点,使用TCP的方式进行连接

4. ES提供了多种编程语言客户端

 

官网可以了解详情:

https://www.elastic.co/guide/en/elasticsearch/client/index.html

二、Java REST Client介绍

1. ES提供了两个JAVA REST client 版本

Java Low Level REST Client: 低级别的REST客户端,通过http与集群交互,用户需自己编组请求JSON串,及解析响应JSON串。兼容所有ES版本
Java High Level REST Client: 高级别的REST客户端,基于低级别的REST客户端,增加了编组请求JSON串、解析响应JSON串等相关api。使用的版本需要保持和ES服务端的版本一致,否则会有版本问题。

2. Java Low Level REST Client 说明

特点,maven 引入、使用介绍: https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-low.html

API doc :https://artifacts.elastic.co/javadoc/org/elasticsearch/client/elasticsearch-rest-client/6.2.4/index.html.

3. Java High Level REST Client 说明

从6.0.0开始加入的,目的是以java面向对象的方式来进行请求、响应处理。
每个API 支持 同步/异步 两种方式,同步方法直接返回一个结果对象。异步的方法以async为后缀,通过listener参数来通知结果
高级java REST 客户端依赖Elasticsearch core project

兼容性说明:

依赖 java1.8 和 Elasticsearch core project
请使用与服务端ES版本一致的客户端版本

4. Java High Level REST Client  maven 集成

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>elasticsearch-rest-high-level-client</artifactId>
    <version>6.2.4</version>
</dependency>

5. Java High Level REST Client  初始化

RestHighLevelClient client = new RestHighLevelClient(
        RestClient.builder(
                new HttpHost("localhost", 9200, "http"),
                new HttpHost("localhost", 9201, "http")));

给定集群的多个节点地址,将客户端负载均衡地向这个节点地址集发请求

Client 不再使用了,记得关闭它:

client.close();

 API及用法示例,请参考:

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-supported-apis.html

三、Java High Level REST Client  使用示例

准备:

编写示例之前首先在maven工程里面引入和ES服务端版本一样的Java客户端

<dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>elasticsearch-rest-high-level-client</artifactId>
        <version>6.2.4</version>
     </dependency>

给定集群的多个节点地址,将客户端负载均衡地向这个节点地址集发请求:

InitDemo.java

package com.study.es_hrset_client;

import org.apache.http.HttpHost;
import org.elasticsearch.client.RestClient;
import org.elasticsearch.client.RestHighLevelClient;

/**
 * 
 * @Description: 获取Java High Level REST Client客户端
 * @author lgs
 * @date 2018年6月23日
 *
 */
public class InitDemo {

    public static RestHighLevelClient getClient() {

        RestHighLevelClient client = new RestHighLevelClient(
                RestClient.builder(new HttpHost("localhost", 9200, "http"),
                        new HttpHost("localhost", 9201, "http")));

        return client;
    }
}

注意使用ES的客户端时类比之前我们在Kibana进行的ES的相关操作,这样使用起来更加有效果

1. Create index 创建索引

CreateIndexDemo.java

package com.study.es_hrset_client;

import java.io.IOException;

import org.elasticsearch.action.admin.indices.alias.Alias;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentType;

/**
 * 
 * @Description: 创建索引
 * @author lgs
 * @date 2018年6月23日
 *
 */
public class CreateIndexDemo {

    public static void main(String[] args) {
        try (RestHighLevelClient client = InitDemo.getClient();) {

            // 1、创建 创建索引request 参数:索引名mess
            CreateIndexRequest request = new CreateIndexRequest("mess");

            // 2、设置索引的settings
            request.settings(Settings.builder().put("index.number_of_shards", 3) // 分片数
                    .put("index.number_of_replicas", 2) // 副本数
                    .put("analysis.analyzer.default.tokenizer", "ik_smart") // 默认分词器
            );

            // 3、设置索引的mappings
            request.mapping("_doc",
                    "  {\n" +
                    "    \"_doc\": {\n" +
                    "      \"properties\": {\n" +
                    "        \"message\": {\n" +
                    "          \"type\": \"text\"\n" +
                    "        }\n" +
                    "      }\n" +
                    "    }\n" +
                    "  }",
                    XContentType.JSON);

            // 4、 设置索引的别名
            request.alias(new Alias("mmm"));

            // 5、 发送请求
            // 5.1 同步方式发送请求
            CreateIndexResponse createIndexResponse = client.indices()
                    .create(request);

            // 6、处理响应
            boolean acknowledged = createIndexResponse.isAcknowledged();
            boolean shardsAcknowledged = createIndexResponse
                    .isShardsAcknowledged();
            System.out.println("acknowledged = " + acknowledged);
            System.out.println("shardsAcknowledged = " + shardsAcknowledged);

            // 5.1 异步方式发送请求
            /*ActionListener<CreateIndexResponse> listener = new ActionListener<CreateIndexResponse>() {
                @Override
                public void onResponse(
                        CreateIndexResponse createIndexResponse) {
                    // 6、处理响应
                    boolean acknowledged = createIndexResponse.isAcknowledged();
                    boolean shardsAcknowledged = createIndexResponse
                            .isShardsAcknowledged();
                    System.out.println("acknowledged = " + acknowledged);
                    System.out.println(
                            "shardsAcknowledged = " + shardsAcknowledged);
                }

                @Override
                public void onFailure(Exception e) {
                    System.out.println("创建索引异常:" + e.getMessage());
                }
            };

            client.indices().createAsync(request, listener);
            */
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 运行结果:

acknowledged = true
shardsAcknowledged = true

2. index  document

 索引文档,即往索引里面放入文档数据.类似于数据库里面向表里面插入一行数据,一行数据就是一个文档

 IndexDocumentDemo.java

package com.study.es_hrset_client;

import java.io.IOException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.replication.ReplicationResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.RestStatus;

/**
 * 
 * @Description: 索引文档,即往索引里面放入文档数据.类似于数据库里面向表里面插入一行数据,一行数据就是一个文档
 * @author lgs
 * @date 2018年6月23日
 *
 */
public class IndexDocumentDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        try (RestHighLevelClient client = InitDemo.getClient();) {
            // 1、创建索引请求
            IndexRequest request = new IndexRequest(
                    "mess",   //索引
                    "_doc",     // mapping type
                    "1");     //文档id  
            
            // 2、准备文档数据
            // 方式一:直接给JSON串
            String jsonString = "{" +
                    "\"user\":\"kimchy\"," +
                    "\"postDate\":\"2013-01-30\"," +
                    "\"message\":\"trying out Elasticsearch\"" +
                    "}";
            request.source(jsonString, XContentType.JSON); 
            
            // 方式二:以map对象来表示文档
            /*
            Map<String, Object> jsonMap = new HashMap<>();
            jsonMap.put("user", "kimchy");
            jsonMap.put("postDate", new Date());
            jsonMap.put("message", "trying out Elasticsearch");
            request.source(jsonMap); 
            */
            
            // 方式三:用XContentBuilder来构建文档
            /*
            XContentBuilder builder = XContentFactory.jsonBuilder();
            builder.startObject();
            {
                builder.field("user", "kimchy");
                builder.field("postDate", new Date());
                builder.field("message", "trying out Elasticsearch");
            }
            builder.endObject();
            request.source(builder); 
            */
            
            // 方式四:直接用key-value对给出
            /*
            request.source("user", "kimchy",
                            "postDate", new Date(),
                            "message", "trying out Elasticsearch");
            */
            
            //3、其他的一些可选设置
            /*
            request.routing("routing");  //设置routing值
            request.timeout(TimeValue.timeValueSeconds(1));  //设置主分片等待时长
            request.setRefreshPolicy("wait_for");  //设置重刷新策略
            request.version(2);  //设置版本号
            request.opType(DocWriteRequest.OpType.CREATE);  //操作类别  
            */
            
            //4、发送请求
            IndexResponse indexResponse = null;
            try {
                // 同步方式
                indexResponse = client.index(request);            
            } catch(ElasticsearchException e) {
                // 捕获,并处理异常
                //判断是否版本冲突、create但文档已存在冲突
                if (e.status() == RestStatus.CONFLICT) {
                    logger.error("冲突了,请在此写冲突处理逻辑!\n" + e.getDetailedMessage());
                }
                
                logger.error("索引异常", e);
            }
            
            //5、处理响应
            if(indexResponse != null) {
                String index = indexResponse.getIndex();
                String type = indexResponse.getType();
                String id = indexResponse.getId();
                long version = indexResponse.getVersion();
                if (indexResponse.getResult() == DocWriteResponse.Result.CREATED) {
                    System.out.println("新增文档成功,处理逻辑代码写到这里。");
                } else if (indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
                    System.out.println("修改文档成功,处理逻辑代码写到这里。");
                }
                // 分片处理信息
                ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
                if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
                    
                }
                // 如果有分片副本失败,可以获得失败原因信息
                if (shardInfo.getFailed() > 0) {
                    for (ReplicationResponse.ShardInfo.Failure failure : shardInfo.getFailures()) {
                        String reason = failure.reason(); 
                        System.out.println("副本失败原因:" + reason);
                    }
                }
            }
            
            
            //异步方式发送索引请求
            /*ActionListener<IndexResponse> listener = new ActionListener<IndexResponse>() {
                @Override
                public void onResponse(IndexResponse indexResponse) {
                    
                }

                @Override
                public void onFailure(Exception e) {
                    
                }
            };
            client.indexAsync(request, listener);
            */
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 运行结果:

新增文档成功,处理逻辑代码写到这里。

3. get  document

 获取文档数据

 GetDocumentDemo.java

package com.study.es_hrset_client;

import java.io.IOException;
import java.util.Map;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.Strings;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;

/**
 * 
 * @Description: 获取文档数据
 * @author lgs
 * @date 2018年6月23日
 *
 */
public class GetDocumentDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        try (RestHighLevelClient client = InitDemo.getClient();) {
            // 1、创建获取文档请求
            GetRequest request = new GetRequest(
                    "mess",   //索引
                    "_doc",     // mapping type
                    "1");     //文档id  
            
            // 2、可选的设置
            //request.routing("routing");
            //request.version(2);
            
            //request.fetchSourceContext(new FetchSourceContext(false)); //是否获取_source字段
            //选择返回的字段
            String[] includes = new String[]{"message", "*Date"};
            String[] excludes = Strings.EMPTY_ARRAY;
            FetchSourceContext fetchSourceContext = new FetchSourceContext(true, includes, excludes);
            request.fetchSourceContext(fetchSourceContext); 
            
            //也可写成这样
            /*String[] includes = Strings.EMPTY_ARRAY;
            String[] excludes = new String[]{"message"};
            FetchSourceContext fetchSourceContext = new FetchSourceContext(true, includes, excludes);
            request.fetchSourceContext(fetchSourceContext);*/
            
            
            // 取stored字段
            /*request.storedFields("message"); 
            GetResponse getResponse = client.get(request);
            String message = getResponse.getField("message").getValue();*/
            
            
            //3、发送请求        
            GetResponse getResponse = null;
            try {
                // 同步请求
                getResponse = client.get(request);
            } catch (ElasticsearchException e) {
                if (e.status() == RestStatus.NOT_FOUND) {
                    logger.error("没有找到该id的文档" );
                }
                if (e.status() == RestStatus.CONFLICT) {
                    logger.error("获取时版本冲突了,请在此写冲突处理逻辑!" );
                }
                logger.error("获取文档异常", e);
            }
            
            //4、处理响应
            if(getResponse != null) {
                String index = getResponse.getIndex();
                String type = getResponse.getType();
                String id = getResponse.getId();
                if (getResponse.isExists()) { // 文档存在
                    long version = getResponse.getVersion();
                    String sourceAsString = getResponse.getSourceAsString(); //结果取成 String       
                    Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();  // 结果取成Map
                    byte[] sourceAsBytes = getResponse.getSourceAsBytes();    //结果取成字节数组
                    
                    logger.info("index:" + index + "  type:" + type + "  id:" + id);
                    logger.info(sourceAsString);
                    
                } else {
                    logger.error("没有找到该id的文档" );
                }
            }
            
            
            //异步方式发送获取文档请求
            /*
            ActionListener<GetResponse> listener = new ActionListener<GetResponse>() {
                @Override
                public void onResponse(GetResponse getResponse) {
                    
                }
            
                @Override
                public void onFailure(Exception e) {
                    
                }
            };
            client.getAsync(request, listener);
            */
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 4. Bulk 

 批量索引文档,即批量往索引里面放入文档数据.类似于数据库里面批量向表里面插入多行数据,一行数据就是一个文档

 BulkDemo.java

package com.study.es_hrset_client;

import java.io.IOException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.DocWriteRequest;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.xcontent.XContentType;

/**
 * 
 * @Description: 批量索引文档,即批量往索引里面放入文档数据.类似于数据库里面批量向表里面插入多行数据,一行数据就是一个文档
 * @author lgs
 * @date 2018年6月23日
 *
 */
public class BulkDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        try (RestHighLevelClient client = InitDemo.getClient();) {
            
            // 1、创建批量操作请求
            BulkRequest request = new BulkRequest(); 
            request.add(new IndexRequest("mess", "_doc", "1")  
                    .source(XContentType.JSON,"field", "foo"));
            request.add(new IndexRequest("mess", "_doc", "2")  
                    .source(XContentType.JSON,"field", "bar"));
            request.add(new IndexRequest("mess", "_doc", "3")  
                    .source(XContentType.JSON,"field", "baz"));
            
            /*
            request.add(new DeleteRequest("mess", "_doc", "3")); 
            request.add(new UpdateRequest("mess", "_doc", "2") 
                    .doc(XContentType.JSON,"other", "test"));
            request.add(new IndexRequest("mess", "_doc", "4")  
                    .source(XContentType.JSON,"field", "baz"));
            */
            
            // 2、可选的设置
            /*
            request.timeout("2m");
            request.setRefreshPolicy("wait_for");  
            request.waitForActiveShards(2);
            */
            
            
            //3、发送请求        
        
            // 同步请求
            BulkResponse bulkResponse = client.bulk(request);
            
            
            //4、处理响应
            if(bulkResponse != null) {
                for (BulkItemResponse bulkItemResponse : bulkResponse) { 
                    DocWriteResponse itemResponse = bulkItemResponse.getResponse(); 

                    if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.INDEX
                            || bulkItemResponse.getOpType() == DocWriteRequest.OpType.CREATE) { 
                        IndexResponse indexResponse = (IndexResponse) itemResponse;
                        //TODO 新增成功的处理

                    } else if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.UPDATE) { 
                        UpdateResponse updateResponse = (UpdateResponse) itemResponse;
                       //TODO 修改成功的处理

                    } else if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.DELETE) { 
                        DeleteResponse deleteResponse = (DeleteResponse) itemResponse;
                        //TODO 删除成功的处理
                    }
                }
            }
            
            
            //异步方式发送批量操作请求
            /*
            ActionListener<BulkResponse> listener = new ActionListener<BulkResponse>() {
                @Override
                public void onResponse(BulkResponse bulkResponse) {
                    
                }
            
                @Override
                public void onFailure(Exception e) {
                    
                }
            };
            client.bulkAsync(request, listener);
            */
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

 5. search

 搜索数据

 SearchDemo.java

package com.study.es_hrset_client;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.ShardSearchFailure;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.suggest.Suggest;
import org.elasticsearch.search.suggest.term.TermSuggestion;

/**
 * 
 * @Description: 搜索数据
 * @author lgs
 * @date 2018年6月23日
 *
 */
public class SearchDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        try (RestHighLevelClient client = InitDemo.getClient();) {
            
            // 1、创建search请求
            //SearchRequest searchRequest = new SearchRequest();
            SearchRequest searchRequest = new SearchRequest("bank"); 
            searchRequest.types("_doc");
            
            // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
            
            //构造QueryBuilder
            /*QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("user", "kimchy")
                    .fuzziness(Fuzziness.AUTO)
                    .prefixLength(3)
                    .maxExpansions(10);
            sourceBuilder.query(matchQueryBuilder);*/
            
            sourceBuilder.query(QueryBuilders.termQuery("age", 24)); 
            sourceBuilder.from(0); 
            sourceBuilder.size(10); 
            sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); 
            
            //是否返回_source字段
            //sourceBuilder.fetchSource(false);
            
            //设置返回哪些字段
            /*String[] includeFields = new String[] {"title", "user", "innerObject.*"};
            String[] excludeFields = new String[] {"_type"};
            sourceBuilder.fetchSource(includeFields, excludeFields);*/
            
            //指定排序
            //sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC)); 
            //sourceBuilder.sort(new FieldSortBuilder("_uid").order(SortOrder.ASC));
            
            // 设置返回 profile 
            //sourceBuilder.profile(true);
            
            //将请求体加入到请求中
            searchRequest.source(sourceBuilder);
            
            // 可选的设置
            //searchRequest.routing("routing");
            
            // 高亮设置
            /*
            HighlightBuilder highlightBuilder = new HighlightBuilder(); 
            HighlightBuilder.Field highlightTitle =
                    new HighlightBuilder.Field("title"); 
            highlightTitle.highlighterType("unified");  
            highlightBuilder.field(highlightTitle);  
            HighlightBuilder.Field highlightUser = new HighlightBuilder.Field("user");
            highlightBuilder.field(highlightUser);
            sourceBuilder.highlighter(highlightBuilder);*/
            
            
            //加入聚合
            /*TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_company")
                    .field("company.keyword");
            aggregation.subAggregation(AggregationBuilders.avg("average_age")
                    .field("age"));
            sourceBuilder.aggregation(aggregation);*/
            
            //做查询建议
            /*SuggestionBuilder termSuggestionBuilder =
                    SuggestBuilders.termSuggestion("user").text("kmichy"); 
                SuggestBuilder suggestBuilder = new SuggestBuilder();
                suggestBuilder.addSuggestion("suggest_user", termSuggestionBuilder); 
            sourceBuilder.suggest(suggestBuilder);*/
            
            //3、发送请求        
            SearchResponse searchResponse = client.search(searchRequest);
            
            
            //4、处理响应
            //搜索结果状态信息
            RestStatus status = searchResponse.status();
            TimeValue took = searchResponse.getTook();
            Boolean terminatedEarly = searchResponse.isTerminatedEarly();
            boolean timedOut = searchResponse.isTimedOut();
            
            //分片搜索情况
            int totalShards = searchResponse.getTotalShards();
            int successfulShards = searchResponse.getSuccessfulShards();
            int failedShards = searchResponse.getFailedShards();
            for (ShardSearchFailure failure : searchResponse.getShardFailures()) {
                // failures should be handled here
            }
            
            //处理搜索命中文档结果
            SearchHits hits = searchResponse.getHits();
            
            long totalHits = hits.getTotalHits();
            float maxScore = hits.getMaxScore();
            
            SearchHit[] searchHits = hits.getHits();
            for (SearchHit hit : searchHits) {
                // do something with the SearchHit
                
                String index = hit.getIndex();
                String type = hit.getType();
                String id = hit.getId();
                float score = hit.getScore();
                
                //取_source字段值
                String sourceAsString = hit.getSourceAsString(); //取成json串
                Map<String, Object> sourceAsMap = hit.getSourceAsMap(); // 取成map对象
                //从map中取字段值
                /*
                String documentTitle = (String) sourceAsMap.get("title"); 
                List<Object> users = (List<Object>) sourceAsMap.get("user");
                Map<String, Object> innerObject = (Map<String, Object>) sourceAsMap.get("innerObject");
                */
                logger.info("index:" + index + "  type:" + type + "  id:" + id);
                logger.info(sourceAsString);
                
                //取高亮结果
                /*Map<String, HighlightField> highlightFields = hit.getHighlightFields();
                HighlightField highlight = highlightFields.get("title"); 
                Text[] fragments = highlight.fragments();  
                String fragmentString = fragments[0].string();*/
            }
            
            // 获取聚合结果
            /*
            Aggregations aggregations = searchResponse.getAggregations();
            Terms byCompanyAggregation = aggregations.get("by_company"); 
            Bucket elasticBucket = byCompanyAggregation.getBucketByKey("Elastic"); 
            Avg averageAge = elasticBucket.getAggregations().get("average_age"); 
            double avg = averageAge.getValue();
            */
            
            // 获取建议结果
            /*Suggest suggest = searchResponse.getSuggest(); 
            TermSuggestion termSuggestion = suggest.getSuggestion("suggest_user"); 
            for (TermSuggestion.Entry entry : termSuggestion.getEntries()) { 
                for (TermSuggestion.Entry.Option option : entry) { 
                    String suggestText = option.getText().string();
                }
            }
            */
            
            //异步方式发送获查询请求
            /*
            ActionListener<SearchResponse> listener = new ActionListener<SearchResponse>() {
                @Override
                public void onResponse(SearchResponse getResponse) {
                    //结果获取
                }
            
                @Override
                public void onFailure(Exception e) {
                    //失败处理
                }
            };
            client.searchAsync(searchRequest, listener); 
            */
            
        } catch (IOException e) {
            logger.error(e);
        }
    }
}

 6. highlight 高亮

HighlightDemo.java

package com.study.es_hrset_client;

import java.io.IOException;
import java.util.Map;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;

/**
 * 
 * @Description: 高亮
 * @author lgs
 * @date 2018年6月23日
 *
 */
public class HighlightDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        try (RestHighLevelClient client = InitDemo.getClient();) {
            
            // 1、创建search请求
            SearchRequest searchRequest = new SearchRequest("hl_test"); 
            
            // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
            
            //构造QueryBuilder
            QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", "lucene solr");
            sourceBuilder.query(matchQueryBuilder);
            
            //分页设置
            /*sourceBuilder.from(0); 
            sourceBuilder.size(5); ;*/ 
            
                    
            // 高亮设置
            HighlightBuilder highlightBuilder = new HighlightBuilder(); 
            highlightBuilder.requireFieldMatch(false).field("title").field("content")
                .preTags("<strong>").postTags("</strong>");
            //不同字段可有不同设置,如不同标签
            /*HighlightBuilder.Field highlightTitle = new HighlightBuilder.Field("title"); 
            highlightTitle.preTags("<strong>").postTags("</strong>");
            highlightBuilder.field(highlightTitle);  
            HighlightBuilder.Field highlightContent = new HighlightBuilder.Field("content");
            highlightContent.preTags("<b>").postTags("</b>");
            highlightBuilder.field(highlightContent).requireFieldMatch(false);*/
            
            sourceBuilder.highlighter(highlightBuilder);
            
            searchRequest.source(sourceBuilder);
            
            //3、发送请求        
            SearchResponse searchResponse = client.search(searchRequest);
            
            
            //4、处理响应
            if(RestStatus.OK.equals(searchResponse.status())) {
                //处理搜索命中文档结果
                SearchHits hits = searchResponse.getHits();
                long totalHits = hits.getTotalHits();
                
                SearchHit[] searchHits = hits.getHits();
                for (SearchHit hit : searchHits) {        
                    String index = hit.getIndex();
                    String type = hit.getType();
                    String id = hit.getId();
                    float score = hit.getScore();
                    
                    //取_source字段值
                    //String sourceAsString = hit.getSourceAsString(); //取成json串
                    Map<String, Object> sourceAsMap = hit.getSourceAsMap(); // 取成map对象
                    //从map中取字段值
                    /*String title = (String) sourceAsMap.get("title"); 
                    String content  = (String) sourceAsMap.get("content"); */
                    logger.info("index:" + index + "  type:" + type + "  id:" + id);
                    logger.info("sourceMap : " +  sourceAsMap);
                    //取高亮结果
                    Map<String, HighlightField> highlightFields = hit.getHighlightFields();
                    HighlightField highlight = highlightFields.get("title"); 
                    if(highlight != null) {
                        Text[] fragments = highlight.fragments();  //多值的字段会有多个值
                        if(fragments != null) {
                            String fragmentString = fragments[0].string();
                            logger.info("title highlight : " +  fragmentString);
                            //可用高亮字符串替换上面sourceAsMap中的对应字段返回到上一级调用
                            //sourceAsMap.put("title", fragmentString);
                        }
                    }
                    
                    highlight = highlightFields.get("content"); 
                    if(highlight != null) {
                        Text[] fragments = highlight.fragments();  //多值的字段会有多个值
                        if(fragments != null) {
                            String fragmentString = fragments[0].string();
                            logger.info("content highlight : " +  fragmentString);
                            //可用高亮字符串替换上面sourceAsMap中的对应字段返回到上一级调用
                            //sourceAsMap.put("content", fragmentString);
                        }
                    }
                }
            }
            
        } catch (IOException e) {
            logger.error(e);
        }
    }
}

 7. suggest 查询建议

SuggestDemo.java

package com.study.es_hrset_client;

import java.io.IOException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.suggest.Suggest;
import org.elasticsearch.search.suggest.SuggestBuilder;
import org.elasticsearch.search.suggest.SuggestBuilders;
import org.elasticsearch.search.suggest.SuggestionBuilder;
import org.elasticsearch.search.suggest.completion.CompletionSuggestion;
import org.elasticsearch.search.suggest.term.TermSuggestion;

/**
 * 
 * @Description: 查询建议
 * @author lgs
 * @date 2018年6月23日
 *
 */
public class SuggestDemo {
    
    private static Logger logger = LogManager.getRootLogger();  
    
    //词项建议拼写检查,检查用户的拼写是否错误,如果有错给用户推荐正确的词,appel->apple
    public static void termSuggest() {
        try (RestHighLevelClient client = InitDemo.getClient();) {
            
            // 1、创建search请求
            //SearchRequest searchRequest = new SearchRequest();
            SearchRequest searchRequest = new SearchRequest("mess"); 
            
            // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
             
            sourceBuilder.size(0); 
            
            //做查询建议        
            //词项建议
            SuggestionBuilder termSuggestionBuilder =
                    SuggestBuilders.termSuggestion("user").text("kmichy"); 
            SuggestBuilder suggestBuilder = new SuggestBuilder();
            suggestBuilder.addSuggestion("suggest_user", termSuggestionBuilder);     
            sourceBuilder.suggest(suggestBuilder);
            
            searchRequest.source(sourceBuilder);    
            
            //3、发送请求        
            SearchResponse searchResponse = client.search(searchRequest);
            
            
            //4、处理响应
            //搜索结果状态信息
            if(RestStatus.OK.equals(searchResponse.status())) {
                // 获取建议结果
                Suggest suggest = searchResponse.getSuggest(); 
                TermSuggestion termSuggestion = suggest.getSuggestion("suggest_user"); 
                for (TermSuggestion.Entry entry : termSuggestion.getEntries()) { 
                    logger.info("text: " + entry.getText().string());
                    for (TermSuggestion.Entry.Option option : entry) { 
                        String suggestText = option.getText().string();
                        logger.info("   suggest option : " + suggestText);
                    }
                }
            }
            /*
              "suggest": {
                "my-suggestion": [
                  {
                    "text": "tring",
                    "offset": 0,
                    "length": 5,
                    "options": [
                      {
                        "text": "trying",
                        "score": 0.8,
                        "freq": 1
                      }
                    ]
                  },
                  {
                    "text": "out",
                    "offset": 6,
                    "length": 3,
                    "options": []
                  },
                  {
                    "text": "elasticsearch",
                    "offset": 10,
                    "length": 13,
                    "options": []
                  }
                ]
              }*/

        } catch (IOException e) {
            logger.error(e);
        }
    }
    
    //自动补全,根据用户的输入联想到可能的词或者短语
    public static void completionSuggester() {
        try (RestHighLevelClient client = InitDemo.getClient();) {
            
            // 1、创建search请求
            //SearchRequest searchRequest = new SearchRequest();
            SearchRequest searchRequest = new SearchRequest("music"); 
            
            // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
             
            sourceBuilder.size(0); 
            
            //做查询建议        
            //自动补全
            /*POST music/_search?pretty
                    {
                        "suggest": {
                            "song-suggest" : {
                                "prefix" : "lucene s", 
                                "completion" : { 
                                    "field" : "suggest" ,
                                    "skip_duplicates": true
                                }
                            }
                        }
                    }*/

            SuggestionBuilder termSuggestionBuilder =
                    SuggestBuilders.completionSuggestion("suggest").prefix("lucene s")
                    .skipDuplicates(true); 
            SuggestBuilder suggestBuilder = new SuggestBuilder();
            suggestBuilder.addSuggestion("song-suggest", termSuggestionBuilder);     
            sourceBuilder.suggest(suggestBuilder);
            
            searchRequest.source(sourceBuilder);    
            
            //3、发送请求        
            SearchResponse searchResponse = client.search(searchRequest);
            
            
            //4、处理响应
            //搜索结果状态信息
            if(RestStatus.OK.equals(searchResponse.status())) {
                // 获取建议结果
                Suggest suggest = searchResponse.getSuggest(); 
                CompletionSuggestion termSuggestion = suggest.getSuggestion("song-suggest"); 
                for (CompletionSuggestion.Entry entry : termSuggestion.getEntries()) { 
                    logger.info("text: " + entry.getText().string());
                    for (CompletionSuggestion.Entry.Option option : entry) { 
                        String suggestText = option.getText().string();
                        logger.info("   suggest option : " + suggestText);
                    }
                }
            }

        } catch (IOException e) {
            logger.error(e);
        }
    }

    public static void main(String[] args) {
        termSuggest();
        
        logger.info("--------------------------------------");
        
        completionSuggester();
    }
}

 8. aggregation 聚合分析

 AggregationDemo.java

package com.study.es_hrset_client;

import java.io.IOException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.RestHighLevelClient;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.BucketOrder;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.avg.Avg;
import org.elasticsearch.search.builder.SearchSourceBuilder;

/**
 * 
 * @Description: 聚合分析
 * @author lgs
 * @date 2018年6月23日
 *
 */
public class AggregationDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        try (RestHighLevelClient client = InitDemo.getClient();) {
            
            // 1、创建search请求
            //SearchRequest searchRequest = new SearchRequest();
            SearchRequest searchRequest = new SearchRequest("bank"); 
            
            // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
             
            sourceBuilder.size(0); 

            //加入聚合
            //字段值项分组聚合
            TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_age")
                    .field("age").order(BucketOrder.aggregation("average_balance", true));
            //计算每组的平均balance指标
            aggregation.subAggregation(AggregationBuilders.avg("average_balance")
                    .field("balance"));
            sourceBuilder.aggregation(aggregation);
            
            searchRequest.source(sourceBuilder);
            
            //3、发送请求        
            SearchResponse searchResponse = client.search(searchRequest);
                
            //4、处理响应
            //搜索结果状态信息
            if(RestStatus.OK.equals(searchResponse.status())) {
                // 获取聚合结果
                Aggregations aggregations = searchResponse.getAggregations();
                Terms byAgeAggregation = aggregations.get("by_age"); 
                logger.info("aggregation by_age 结果");
                logger.info("docCountError: " + byAgeAggregation.getDocCountError());
                logger.info("sumOfOtherDocCounts: " + byAgeAggregation.getSumOfOtherDocCounts());
                logger.info("------------------------------------");
                for(Bucket buck : byAgeAggregation.getBuckets()) {
                    logger.info("key: " + buck.getKeyAsNumber());
                    logger.info("docCount: " + buck.getDocCount());
                    logger.info("docCountError: " + buck.getDocCountError());
                    //取子聚合
                    Avg averageBalance = buck.getAggregations().get("average_balance"); 

                    logger.info("average_balance: " + averageBalance.getValue());
                    logger.info("------------------------------------");
                }
                //直接用key 来去分组
                /*Bucket elasticBucket = byCompanyAggregation.getBucketByKey("24"); 
                Avg averageAge = elasticBucket.getAggregations().get("average_age"); 
                double avg = averageAge.getValue();*/
                
            }
            
        } catch (IOException e) {
            logger.error(e);
        }
    }
}

 9. 官网资料

各种查询对应的QueryBuilder:

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-query-builders.html

各种聚合对应的AggregationBuilder:

https://www.elastic.co/guide/en/elasticsearch/client/java-rest/current/java-rest-high-aggregation-builders.html

四、Java Client

1. Java Client 说明

java client 使用 TransportClient,各种操作本质上都是异步的(可以用 listener,或返回 Future )。 
注意:ES的发展规划中在7.0版本开始将废弃 TransportClient,8.0版本中将完全移除 TransportClient,取而代之的是High Level REST Client。
High Level REST Client 中的操作API和java client 大多是一样的。

2. 官方学习链接

https://www.elastic.co/guide/en/elasticsearch/client/java-api/current/index.html

3. 兼容性说明

请使用与服务端ES版本一致的客户端版本

4. Java Client maven 集成

<dependency>
    <groupId>org.elasticsearch.client</groupId>
    <artifactId>transport</artifactId>
    <version>6.2.4</version>
</dependency>

5. Java Client logger 日志器说明

使用的是 log4j2 日志组件。
如果要使用其他的日志组件,可使用slf4j作桥

6. Init Client

Init Client setting 可用参数说明:

cluster.name
指定集群的名字,如果集群的名字不是默认的elasticsearch,需指定。
client.transport.sniff
设置为true,将自动嗅探整个集群,自动加入集群的节点到连接列表中。
client.transport.ignore_cluster_name
Set to true to ignore cluster name validation of connected nodes. (since 0.19.4)
client.transport.ping_timeout
The time to wait for a ping response from a node. Defaults to 5s.
client.transport.nodes_sampler_interval
How often to sample / ping the nodes listed and connected. Defaults to 5s.

五、Java Client使用示例

注意:TransPort客户端的使用和RESTful风格的使用基本一致,除了获取客户端不一样,还有发送请求有的不一样外

准备:

编写示例之前首先在maven工程里面引入和ES服务端版本一样的Java客户端

<dependency>
        <groupId>org.elasticsearch.client</groupId>
        <artifactId>transport</artifactId>
        <version>6.2.4</version>
    </dependency>

给定集群的多个节点地址,将客户端负载均衡地向这个节点地址集发请求:

InitDemo.java

package com.study.es_java_client;

import java.net.InetAddress;
import java.net.UnknownHostException;

import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.transport.TransportAddress;
import org.elasticsearch.transport.client.PreBuiltTransportClient;

public class InitDemo {
    
    private static TransportClient client;

    public static TransportClient getClient() throws UnknownHostException {

        if(client == null) {
            //client = new PreBuiltTransportClient(Settings.EMPTY)
            
            // 连接集群的设置
            Settings settings = Settings.builder()
                    //.put("cluster.name", "myClusterName") //如果集群的名字不是默认的elasticsearch,需指定
                    .put("client.transport.sniff", true) //自动嗅探
                    .build();   
            client = new PreBuiltTransportClient(settings)
                //.addTransportAddress(new TransportAddress(InetAddress.getByName("localhost"), 9300));
                .addTransportAddress(new TransportAddress(InetAddress.getByName("127.0.0.1"), 9300));
            
            //可用连接设置参数说明
            /*
            cluster.name
                指定集群的名字,如果集群的名字不是默认的elasticsearch,需指定。
            client.transport.sniff
                设置为true,将自动嗅探整个集群,自动加入集群的节点到连接列表中。    
            client.transport.ignore_cluster_name
                Set to true to ignore cluster name validation of connected nodes. (since 0.19.4)    
            client.transport.ping_timeout
                The time to wait for a ping response from a node. Defaults to 5s.
            client.transport.nodes_sampler_interval
                How often to sample / ping the nodes listed and connected. Defaults to 5s.
            */
            
        }
        return client;
    }
}

注意使用ES的客户端时类比之前我们在Kibana进行的ES的相关操作,这样使用起来更加有效果

1. Create index 创建索引

CreateIndexDemo.java

package com.study.es_java_client;

import java.io.IOException;
import java.util.concurrent.ExecutionException;

import org.elasticsearch.action.admin.indices.alias.Alias;
import org.elasticsearch.action.admin.indices.create.CreateIndexRequest;
import org.elasticsearch.action.admin.indices.create.CreateIndexResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.common.xcontent.XContentType;

public class CreateIndexDemo {

    public static void main(String[] args) {
        //这里和RESTful风格不同
        try (TransportClient client = InitDemo.getClient();) {

            // 1、创建 创建索引request
            CreateIndexRequest request = new CreateIndexRequest("mess");

            // 2、设置索引的settings
            request.settings(Settings.builder().put("index.number_of_shards", 3) // 分片数
                    .put("index.number_of_replicas", 2) // 副本数
                    .put("analysis.analyzer.default.tokenizer", "ik_smart") // 默认分词器
            );

            // 3、设置索引的mappings
            request.mapping("_doc",
                    "  {\n" +
                    "    \"_doc\": {\n" +
                    "      \"properties\": {\n" +
                    "        \"message\": {\n" +
                    "          \"type\": \"text\"\n" +
                    "        }\n" +
                    "      }\n" +
                    "    }\n" +
                    "  }",
                    XContentType.JSON);

            // 4、 设置索引的别名
            request.alias(new Alias("mmm"));

            // 5、 发送请求 这里和RESTful风格不同
            CreateIndexResponse createIndexResponse = client.admin().indices()
                    .create(request).get();

            // 6、处理响应
            boolean acknowledged = createIndexResponse.isAcknowledged();
            boolean shardsAcknowledged = createIndexResponse
                    .isShardsAcknowledged();
            System.out.println("acknowledged = " + acknowledged);
            System.out.println("shardsAcknowledged = " + shardsAcknowledged);

            // listener方式发送请求
            /*ActionListener<CreateIndexResponse> listener = new ActionListener<CreateIndexResponse>() {
                @Override
                public void onResponse(
                        CreateIndexResponse createIndexResponse) {
                    // 6、处理响应
                    boolean acknowledged = createIndexResponse.isAcknowledged();
                    boolean shardsAcknowledged = createIndexResponse
                            .isShardsAcknowledged();
                    System.out.println("acknowledged = " + acknowledged);
                    System.out.println(
                            "shardsAcknowledged = " + shardsAcknowledged);
                }

                @Override
                public void onFailure(Exception e) {
                    System.out.println("创建索引异常:" + e.getMessage());
                }
            };
            client.admin().indices().create(request, listener);
            */
        } catch (IOException | InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
}

2. index document

索引文档,即往索引里面放入文档数据.类似于数据库里面向表里面插入一行数据,一行数据就是一个文档
IndexDocumentDemo.java

package com.study.es_java_client;

import java.io.IOException;
import java.util.concurrent.ExecutionException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.support.replication.ReplicationResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.xcontent.XContentType;
import org.elasticsearch.rest.RestStatus;

public class IndexDocumentDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        //这里和RESTful风格不同
        try (TransportClient client = InitDemo.getClient();) {
            // 1、创建索引请求
            IndexRequest request = new IndexRequest(
                    "mess",   //索引
                    "_doc",     // mapping type
                    "11");     //文档id  
            
            // 2、准备文档数据
            // 方式一:直接给JSON串
            String jsonString = "{" +
                    "\"user\":\"kimchy\"," +
                    "\"postDate\":\"2013-01-30\"," +
                    "\"message\":\"trying out Elasticsearch\"" +
                    "}";
            request.source(jsonString, XContentType.JSON); 
            
            // 方式二:以map对象来表示文档
            /*
            Map<String, Object> jsonMap = new HashMap<>();
            jsonMap.put("user", "kimchy");
            jsonMap.put("postDate", new Date());
            jsonMap.put("message", "trying out Elasticsearch");
            request.source(jsonMap); 
            */
            
            // 方式三:用XContentBuilder来构建文档
            /*
            XContentBuilder builder = XContentFactory.jsonBuilder();
            builder.startObject();
            {
                builder.field("user", "kimchy");
                builder.field("postDate", new Date());
                builder.field("message", "trying out Elasticsearch");
            }
            builder.endObject();
            request.source(builder); 
            */
            
            // 方式四:直接用key-value对给出
            /*
            request.source("user", "kimchy",
                            "postDate", new Date(),
                            "message", "trying out Elasticsearch");
            */
            
            //3、其他的一些可选设置
            /*
            request.routing("routing");  //设置routing值
            request.timeout(TimeValue.timeValueSeconds(1));  //设置主分片等待时长
            request.setRefreshPolicy("wait_for");  //设置重刷新策略
            request.version(2);  //设置版本号
            request.opType(DocWriteRequest.OpType.CREATE);  //操作类别  
            */
            
            //4、发送请求
            IndexResponse indexResponse = null;
            try {
                //方式一: 用client.index 方法,返回是 ActionFuture<IndexResponse>,再调用get获取响应结果
                indexResponse = client.index(request).get();
                
                //方式二:client提供了一个 prepareIndex方法,内部为我们创建IndexRequest
                /*IndexResponse indexResponse = client.prepareIndex("mess","_doc","11")
                        .setSource(jsonString, XContentType.JSON)
                        .get();*/
                
                //方式三:request + listener
                //client.index(request, listener);    
                
            } catch(ElasticsearchException e) {
                // 捕获,并处理异常
                //判断是否版本冲突、create但文档已存在冲突
                if (e.status() == RestStatus.CONFLICT) {
                    logger.error("冲突了,请在此写冲突处理逻辑!\n" + e.getDetailedMessage());
                }
                
                logger.error("索引异常", e);
            }catch (InterruptedException | ExecutionException e) {
                logger.error("索引异常", e);
            }
            
            
            
            
            //5、处理响应
            if(indexResponse != null) {
                String index = indexResponse.getIndex();
                String type = indexResponse.getType();
                String id = indexResponse.getId();
                long version = indexResponse.getVersion();
                if (indexResponse.getResult() == DocWriteResponse.Result.CREATED) {
                    System.out.println("新增文档成功,处理逻辑代码写到这里。");
                } else if (indexResponse.getResult() == DocWriteResponse.Result.UPDATED) {
                    System.out.println("修改文档成功,处理逻辑代码写到这里。");
                }
                // 分片处理信息
                ReplicationResponse.ShardInfo shardInfo = indexResponse.getShardInfo();
                if (shardInfo.getTotal() != shardInfo.getSuccessful()) {
                    
                }
                // 如果有分片副本失败,可以获得失败原因信息
                if (shardInfo.getFailed() > 0) {
                    for (ReplicationResponse.ShardInfo.Failure failure : shardInfo.getFailures()) {
                        String reason = failure.reason(); 
                        System.out.println("副本失败原因:" + reason);
                    }
                }
            }
            
            
            //listener 方式
            /*ActionListener<IndexResponse> listener = new ActionListener<IndexResponse>() {
                @Override
                public void onResponse(IndexResponse indexResponse) {
                    
                }

                @Override
                public void onFailure(Exception e) {
                    
                }
            };
            client.index(request, listener);
            */
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

3. get document 

获取文档数据
GetDocumentDemo.java

package com.study.es_java_client;

import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ExecutionException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.ElasticsearchException;
import org.elasticsearch.action.get.GetRequest;
import org.elasticsearch.action.get.GetResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.Strings;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.fetch.subphase.FetchSourceContext;

public class GetDocumentDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        //这里和RESTful风格不同
        try (TransportClient client = InitDemo.getClient();) {
            // 1、创建获取文档请求
            GetRequest request = new GetRequest(
                    "mess",   //索引
                    "_doc",     // mapping type
                    "11");     //文档id  
            
            // 2、可选的设置
            //request.routing("routing");
            //request.version(2);
            
            //request.fetchSourceContext(new FetchSourceContext(false)); //是否获取_source字段
            //选择返回的字段
            String[] includes = new String[]{"message", "*Date"};
            String[] excludes = Strings.EMPTY_ARRAY;
            FetchSourceContext fetchSourceContext = new FetchSourceContext(true, includes, excludes);
            request.fetchSourceContext(fetchSourceContext); 
            
            //也可写成这样
            /*String[] includes = Strings.EMPTY_ARRAY;
            String[] excludes = new String[]{"message"};
            FetchSourceContext fetchSourceContext = new FetchSourceContext(true, includes, excludes);
            request.fetchSourceContext(fetchSourceContext);*/
            
            
            // 取stored字段
            /*request.storedFields("message"); 
            GetResponse getResponse = client.get(request);
            String message = getResponse.getField("message").getValue();*/
            
            
            //3、发送请求        
            GetResponse getResponse = null;
            try {
                getResponse = client.get(request).get();
            } catch (ElasticsearchException e) {
                if (e.status() == RestStatus.NOT_FOUND) {
                    logger.error("没有找到该id的文档" );
                }
                if (e.status() == RestStatus.CONFLICT) {
                    logger.error("获取时版本冲突了,请在此写冲突处理逻辑!" );
                }
                logger.error("获取文档异常", e);
            }catch (InterruptedException | ExecutionException e) {
                logger.error("索引异常", e);
            }
            
            //4、处理响应
            if(getResponse != null) {
                String index = getResponse.getIndex();
                String type = getResponse.getType();
                String id = getResponse.getId();
                if (getResponse.isExists()) { // 文档存在
                    long version = getResponse.getVersion();
                    String sourceAsString = getResponse.getSourceAsString(); //结果取成 String       
                    Map<String, Object> sourceAsMap = getResponse.getSourceAsMap();  // 结果取成Map
                    byte[] sourceAsBytes = getResponse.getSourceAsBytes();    //结果取成字节数组
                    
                    logger.info("index:" + index + "  type:" + type + "  id:" + id);
                    logger.info(sourceAsString);
                    
                } else {
                    logger.error("没有找到该id的文档" );
                }
            }
            
            
            //异步方式发送获取文档请求
            /*
            ActionListener<GetResponse> listener = new ActionListener<GetResponse>() {
                @Override
                public void onResponse(GetResponse getResponse) {
                    
                }
            
                @Override
                public void onFailure(Exception e) {
                    
                }
            };
            client.getAsync(request, listener);
            */
            
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

4. Bulk

批量索引文档,即批量往索引里面放入文档数据.类似于数据库里面批量向表里面插入多行数据,一行数据就是一个文档
BulkDemo.java

package com.study.es_java_client;

import java.io.IOException;
import java.util.concurrent.ExecutionException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.DocWriteRequest;
import org.elasticsearch.action.DocWriteResponse;
import org.elasticsearch.action.bulk.BulkItemResponse;
import org.elasticsearch.action.bulk.BulkRequest;
import org.elasticsearch.action.bulk.BulkResponse;
import org.elasticsearch.action.delete.DeleteResponse;
import org.elasticsearch.action.index.IndexRequest;
import org.elasticsearch.action.index.IndexResponse;
import org.elasticsearch.action.update.UpdateResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.xcontent.XContentType;

public class BulkDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        //这里和RESTful风格不同
        try (TransportClient client = InitDemo.getClient();) {
            
            // 1、创建批量操作请求
            BulkRequest request = new BulkRequest(); 
            request.add(new IndexRequest("mess", "_doc", "1")  
                    .source(XContentType.JSON,"field", "foo"));
            request.add(new IndexRequest("mess", "_doc", "2")  
                    .source(XContentType.JSON,"field", "bar"));
            request.add(new IndexRequest("mess", "_doc", "3")  
                    .source(XContentType.JSON,"field", "baz"));
            
            /*
            request.add(new DeleteRequest("mess", "_doc", "3")); 
            request.add(new UpdateRequest("mess", "_doc", "2") 
                    .doc(XContentType.JSON,"other", "test"));
            request.add(new IndexRequest("mess", "_doc", "4")  
                    .source(XContentType.JSON,"field", "baz"));
            */
            
            // 2、可选的设置
            /*
            request.timeout("2m");
            request.setRefreshPolicy("wait_for");  
            request.waitForActiveShards(2);
            */
            
            
            //3、发送请求        
        
            // 同步请求
            BulkResponse bulkResponse = client.bulk(request).get();
            
            
            //4、处理响应
            if(bulkResponse != null) {
                for (BulkItemResponse bulkItemResponse : bulkResponse) { 
                    DocWriteResponse itemResponse = bulkItemResponse.getResponse(); 

                    if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.INDEX
                            || bulkItemResponse.getOpType() == DocWriteRequest.OpType.CREATE) { 
                        IndexResponse indexResponse = (IndexResponse) itemResponse;
                        //TODO 新增成功的处理

                    } else if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.UPDATE) { 
                        UpdateResponse updateResponse = (UpdateResponse) itemResponse;
                       //TODO 修改成功的处理

                    } else if (bulkItemResponse.getOpType() == DocWriteRequest.OpType.DELETE) { 
                        DeleteResponse deleteResponse = (DeleteResponse) itemResponse;
                        //TODO 删除成功的处理
                    }
                }
            }
            
            
            //异步方式发送批量操作请求
            /*
            ActionListener<BulkResponse> listener = new ActionListener<BulkResponse>() {
                @Override
                public void onResponse(BulkResponse bulkResponse) {
                    
                }
            
                @Override
                public void onFailure(Exception e) {
                    
                }
            };
            client.bulkAsync(request, listener);
            */
            
        } catch (IOException | InterruptedException | ExecutionException e) {
            e.printStackTrace();
        }
    }
}

5. search

搜索数据
SearchDemo.java

package com.study.es_java_client;

import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.TimeUnit;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.action.search.ShardSearchFailure;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.unit.TimeValue;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;

public class SearchDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        try (TransportClient client = InitDemo.getClient();) {
            
            // 1、创建search请求
            //SearchRequest searchRequest = new SearchRequest();
            SearchRequest searchRequest = new SearchRequest("bank"); 
            searchRequest.types("_doc");
            
            // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
            
            //构造QueryBuilder
            /*QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("user", "kimchy")
                    .fuzziness(Fuzziness.AUTO)
                    .prefixLength(3)
                    .maxExpansions(10);
            sourceBuilder.query(matchQueryBuilder);*/
            
            sourceBuilder.query(QueryBuilders.termQuery("age", 24)); 
            sourceBuilder.from(0); 
            sourceBuilder.size(10); 
            sourceBuilder.timeout(new TimeValue(60, TimeUnit.SECONDS)); 
            
            //是否返回_source字段
            //sourceBuilder.fetchSource(false);
            
            //设置返回哪些字段
            /*String[] includeFields = new String[] {"title", "user", "innerObject.*"};
            String[] excludeFields = new String[] {"_type"};
            sourceBuilder.fetchSource(includeFields, excludeFields);*/
            
            //指定排序
            //sourceBuilder.sort(new ScoreSortBuilder().order(SortOrder.DESC)); 
            //sourceBuilder.sort(new FieldSortBuilder("_uid").order(SortOrder.ASC));
            
            // 设置返回 profile 
            //sourceBuilder.profile(true);
            
            //将请求体加入到请求中
            searchRequest.source(sourceBuilder);
            
            // 可选的设置
            //searchRequest.routing("routing");
            
            // 高亮设置
            /*
            HighlightBuilder highlightBuilder = new HighlightBuilder(); 
            HighlightBuilder.Field highlightTitle =
                    new HighlightBuilder.Field("title"); 
            highlightTitle.highlighterType("unified");  
            highlightBuilder.field(highlightTitle);  
            HighlightBuilder.Field highlightUser = new HighlightBuilder.Field("user");
            highlightBuilder.field(highlightUser);
            sourceBuilder.highlighter(highlightBuilder);*/
            
            
            //加入聚合
            /*TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_company")
                    .field("company.keyword");
            aggregation.subAggregation(AggregationBuilders.avg("average_age")
                    .field("age"));
            sourceBuilder.aggregation(aggregation);*/
            
            //做查询建议
            /*SuggestionBuilder termSuggestionBuilder =
                    SuggestBuilders.termSuggestion("user").text("kmichy"); 
                SuggestBuilder suggestBuilder = new SuggestBuilder();
                suggestBuilder.addSuggestion("suggest_user", termSuggestionBuilder); 
            sourceBuilder.suggest(suggestBuilder);*/
            
            //3、发送请求        
            SearchResponse searchResponse = client.search(searchRequest).get();
            
            
            //4、处理响应
            //搜索结果状态信息
            RestStatus status = searchResponse.status();
            TimeValue took = searchResponse.getTook();
            Boolean terminatedEarly = searchResponse.isTerminatedEarly();
            boolean timedOut = searchResponse.isTimedOut();
            
            //分片搜索情况
            int totalShards = searchResponse.getTotalShards();
            int successfulShards = searchResponse.getSuccessfulShards();
            int failedShards = searchResponse.getFailedShards();
            for (ShardSearchFailure failure : searchResponse.getShardFailures()) {
                // failures should be handled here
            }
            
            //处理搜索命中文档结果
            SearchHits hits = searchResponse.getHits();
            
            long totalHits = hits.getTotalHits();
            float maxScore = hits.getMaxScore();
            
            SearchHit[] searchHits = hits.getHits();
            for (SearchHit hit : searchHits) {
                // do something with the SearchHit
                
                String index = hit.getIndex();
                String type = hit.getType();
                String id = hit.getId();
                float score = hit.getScore();
                
                //取_source字段值
                String sourceAsString = hit.getSourceAsString(); //取成json串
                Map<String, Object> sourceAsMap = hit.getSourceAsMap(); // 取成map对象
                //从map中取字段值
                /*
                String documentTitle = (String) sourceAsMap.get("title"); 
                List<Object> users = (List<Object>) sourceAsMap.get("user");
                Map<String, Object> innerObject = (Map<String, Object>) sourceAsMap.get("innerObject");
                */
                logger.info("index:" + index + "  type:" + type + "  id:" + id);
                logger.info(sourceAsString);
                
                //取高亮结果
                /*Map<String, HighlightField> highlightFields = hit.getHighlightFields();
                HighlightField highlight = highlightFields.get("title"); 
                Text[] fragments = highlight.fragments();  
                String fragmentString = fragments[0].string();*/
            }
            
            // 获取聚合结果
            /*
            Aggregations aggregations = searchResponse.getAggregations();
            Terms byCompanyAggregation = aggregations.get("by_company"); 
            Bucket elasticBucket = byCompanyAggregation.getBucketByKey("Elastic"); 
            Avg averageAge = elasticBucket.getAggregations().get("average_age"); 
            double avg = averageAge.getValue();
            */
            
            // 获取建议结果
            /*Suggest suggest = searchResponse.getSuggest(); 
            TermSuggestion termSuggestion = suggest.getSuggestion("suggest_user"); 
            for (TermSuggestion.Entry entry : termSuggestion.getEntries()) { 
                for (TermSuggestion.Entry.Option option : entry) { 
                    String suggestText = option.getText().string();
                }
            }
            */
            
            //异步方式发送获查询请求
            /*
            ActionListener<SearchResponse> listener = new ActionListener<SearchResponse>() {
                @Override
                public void onResponse(SearchResponse getResponse) {
                    //结果获取
                }
            
                @Override
                public void onFailure(Exception e) {
                    //失败处理
                }
            };
            client.searchAsync(searchRequest, listener); 
            */
            
        } catch (IOException | InterruptedException | ExecutionException e) {
            logger.error(e);
        }
    }
}

6. highlight 高亮

HighlightDemo.java

package com.study.es_java_client;

import java.io.IOException;
import java.util.Map;
import java.util.concurrent.ExecutionException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.common.text.Text;
import org.elasticsearch.index.query.QueryBuilder;
import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.SearchHit;
import org.elasticsearch.search.SearchHits;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightBuilder;
import org.elasticsearch.search.fetch.subphase.highlight.HighlightField;

public class HighlightDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        try (TransportClient client = InitDemo.getClient();) {
            
            // 1、创建search请求
            SearchRequest searchRequest = new SearchRequest("hl_test"); 
            
            // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
            
            //构造QueryBuilder
            QueryBuilder matchQueryBuilder = QueryBuilders.matchQuery("title", "lucene solr");
            sourceBuilder.query(matchQueryBuilder);
            
            //分页设置
            /*sourceBuilder.from(0); 
            sourceBuilder.size(5); ;*/ 
            
                    
            // 高亮设置
            HighlightBuilder highlightBuilder = new HighlightBuilder(); 
            highlightBuilder.requireFieldMatch(false).field("title").field("content")
                .preTags("<strong>").postTags("</strong>");
            //不同字段可有不同设置,如不同标签
            /*HighlightBuilder.Field highlightTitle = new HighlightBuilder.Field("title"); 
            highlightTitle.preTags("<strong>").postTags("</strong>");
            highlightBuilder.field(highlightTitle);  
            HighlightBuilder.Field highlightContent = new HighlightBuilder.Field("content");
            highlightContent.preTags("<b>").postTags("</b>");
            highlightBuilder.field(highlightContent).requireFieldMatch(false);*/
            
            sourceBuilder.highlighter(highlightBuilder);
            
            searchRequest.source(sourceBuilder);
            
            //3、发送请求        
            SearchResponse searchResponse = client.search(searchRequest).get();
            
            
            //4、处理响应
            if(RestStatus.OK.equals(searchResponse.status())) {
                //处理搜索命中文档结果
                SearchHits hits = searchResponse.getHits();
                long totalHits = hits.getTotalHits();
                
                SearchHit[] searchHits = hits.getHits();
                for (SearchHit hit : searchHits) {        
                    String index = hit.getIndex();
                    String type = hit.getType();
                    String id = hit.getId();
                    float score = hit.getScore();
                    
                    //取_source字段值
                    //String sourceAsString = hit.getSourceAsString(); //取成json串
                    Map<String, Object> sourceAsMap = hit.getSourceAsMap(); // 取成map对象
                    //从map中取字段值
                    /*String title = (String) sourceAsMap.get("title"); 
                    String content  = (String) sourceAsMap.get("content"); */
                    logger.info("index:" + index + "  type:" + type + "  id:" + id);
                    logger.info("sourceMap : " +  sourceAsMap);
                    //取高亮结果
                    Map<String, HighlightField> highlightFields = hit.getHighlightFields();
                    HighlightField highlight = highlightFields.get("title"); 
                    if(highlight != null) {
                        Text[] fragments = highlight.fragments();  //多值的字段会有多个值
                        if(fragments != null) {
                            String fragmentString = fragments[0].string();
                            logger.info("title highlight : " +  fragmentString);
                            //可用高亮字符串替换上面sourceAsMap中的对应字段返回到上一级调用
                            //sourceAsMap.put("title", fragmentString);
                        }
                    }
                    
                    highlight = highlightFields.get("content"); 
                    if(highlight != null) {
                        Text[] fragments = highlight.fragments();  //多值的字段会有多个值
                        if(fragments != null) {
                            String fragmentString = fragments[0].string();
                            logger.info("content highlight : " +  fragmentString);
                            //可用高亮字符串替换上面sourceAsMap中的对应字段返回到上一级调用
                            //sourceAsMap.put("content", fragmentString);
                        }
                    }
                }
            }
            
        } catch (IOException | InterruptedException | ExecutionException e) {
            logger.error(e);
        }
    }
}

7. suggest 查询建议

SuggestDemo.java

package com.study.es_java_client;

import java.io.IOException;
import java.util.concurrent.ExecutionException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.builder.SearchSourceBuilder;
import org.elasticsearch.search.suggest.Suggest;
import org.elasticsearch.search.suggest.SuggestBuilder;
import org.elasticsearch.search.suggest.SuggestBuilders;
import org.elasticsearch.search.suggest.SuggestionBuilder;
import org.elasticsearch.search.suggest.completion.CompletionSuggestion;
import org.elasticsearch.search.suggest.term.TermSuggestion;

public class SuggestDemo {
    
    private static Logger logger = LogManager.getRootLogger();  
    
    //拼写检查
    public static void termSuggest(TransportClient client) {
            
        // 1、创建search请求
        //SearchRequest searchRequest = new SearchRequest();
        SearchRequest searchRequest = new SearchRequest("mess"); 
        
        // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
         
        sourceBuilder.size(0); 
        
        //做查询建议        
        //词项建议
        SuggestionBuilder termSuggestionBuilder =
                SuggestBuilders.termSuggestion("user").text("kmichy"); 
        SuggestBuilder suggestBuilder = new SuggestBuilder();
        suggestBuilder.addSuggestion("suggest_user", termSuggestionBuilder);     
        sourceBuilder.suggest(suggestBuilder);
        
        searchRequest.source(sourceBuilder);    

        try{
            //3、发送请求        
            SearchResponse searchResponse = client.search(searchRequest).get();
            
            
            //4、处理响应
            //搜索结果状态信息
            if(RestStatus.OK.equals(searchResponse.status())) {
                // 获取建议结果
                Suggest suggest = searchResponse.getSuggest(); 
                TermSuggestion termSuggestion = suggest.getSuggestion("suggest_user"); 
                for (TermSuggestion.Entry entry : termSuggestion.getEntries()) { 
                    logger.info("text: " + entry.getText().string());
                    for (TermSuggestion.Entry.Option option : entry) { 
                        String suggestText = option.getText().string();
                        logger.info("   suggest option : " + suggestText);
                    }
                }
            }

        } catch (InterruptedException | ExecutionException e) {
            logger.error(e);
        }
            /*
              "suggest": {
                "my-suggestion": [
                  {
                    "text": "tring",
                    "offset": 0,
                    "length": 5,
                    "options": [
                      {
                        "text": "trying",
                        "score": 0.8,
                        "freq": 1
                      }
                    ]
                  },
                  {
                    "text": "out",
                    "offset": 6,
                    "length": 3,
                    "options": []
                  },
                  {
                    "text": "elasticsearch",
                    "offset": 10,
                    "length": 13,
                    "options": []
                  }
                ]
              }*/

    }
    //自动补全
    public static void completionSuggester(TransportClient client) {
                
        // 1、创建search请求
        //SearchRequest searchRequest = new SearchRequest();
        SearchRequest searchRequest = new SearchRequest("music"); 
        
        // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
        SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
         
        sourceBuilder.size(0); 
        
        //做查询建议        
        //自动补全
        /*POST music/_search?pretty
                {
                    "suggest": {
                        "song-suggest" : {
                            "prefix" : "lucene s", 
                            "completion" : { 
                                "field" : "suggest" ,
                                "skip_duplicates": true
                            }
                        }
                    }
                }*/

        SuggestionBuilder termSuggestionBuilder =
                SuggestBuilders.completionSuggestion("suggest").prefix("lucene s")
                .skipDuplicates(true); 
        SuggestBuilder suggestBuilder = new SuggestBuilder();
        suggestBuilder.addSuggestion("song-suggest", termSuggestionBuilder);     
        sourceBuilder.suggest(suggestBuilder);
        
        searchRequest.source(sourceBuilder);    
            
        try {
            //3、发送请求        
            SearchResponse searchResponse = client.search(searchRequest).get();
            
            
            //4、处理响应
            //搜索结果状态信息
            if(RestStatus.OK.equals(searchResponse.status())) {
                // 获取建议结果
                Suggest suggest = searchResponse.getSuggest(); 
                CompletionSuggestion termSuggestion = suggest.getSuggestion("song-suggest"); 
                for (CompletionSuggestion.Entry entry : termSuggestion.getEntries()) { 
                    logger.info("text: " + entry.getText().string());
                    for (CompletionSuggestion.Entry.Option option : entry) { 
                        String suggestText = option.getText().string();
                        logger.info("   suggest option : " + suggestText);
                    }
                }
            }

        } catch (InterruptedException | ExecutionException e) {
            logger.error(e);
        }
    }

    public static void main(String[] args) {
        try (TransportClient client = InitDemo.getClient();) {
            termSuggest(client);
            
            logger.info("--------------------------------------");
            
            completionSuggester(client);
        } catch (IOException e) {
            logger.error(e);
        }
    }
}

8. aggregation 聚合分析

AggregationDemo.java

package com.study.es_java_client;

import java.io.IOException;
import java.util.concurrent.ExecutionException;

import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.elasticsearch.action.search.SearchRequest;
import org.elasticsearch.action.search.SearchResponse;
import org.elasticsearch.client.transport.TransportClient;
import org.elasticsearch.rest.RestStatus;
import org.elasticsearch.search.aggregations.AggregationBuilders;
import org.elasticsearch.search.aggregations.Aggregations;
import org.elasticsearch.search.aggregations.BucketOrder;
import org.elasticsearch.search.aggregations.bucket.terms.Terms;
import org.elasticsearch.search.aggregations.bucket.terms.Terms.Bucket;
import org.elasticsearch.search.aggregations.bucket.terms.TermsAggregationBuilder;
import org.elasticsearch.search.aggregations.metrics.avg.Avg;
import org.elasticsearch.search.builder.SearchSourceBuilder;

public class AggregationDemo {
    
    private static Logger logger = LogManager.getRootLogger();  

    public static void main(String[] args) {
        try (TransportClient client = InitDemo.getClient();) {
            
            // 1、创建search请求
            //SearchRequest searchRequest = new SearchRequest();
            SearchRequest searchRequest = new SearchRequest("bank"); 
            
            // 2、用SearchSourceBuilder来构造查询请求体 ,请仔细查看它的方法,构造各种查询的方法都在这。
            SearchSourceBuilder sourceBuilder = new SearchSourceBuilder(); 
             
            sourceBuilder.size(0); 

            //加入聚合
            //字段值项分组聚合
            TermsAggregationBuilder aggregation = AggregationBuilders.terms("by_age")
                    .field("age").order(BucketOrder.aggregation("average_balance", true));
            //计算每组的平均balance指标
            aggregation.subAggregation(AggregationBuilders.avg("average_balance")
                    .field("balance"));
            sourceBuilder.aggregation(aggregation);
            
            searchRequest.source(sourceBuilder);
            
            //3、发送请求        
            SearchResponse searchResponse = client.search(searchRequest).get();
                
            //4、处理响应
            //搜索结果状态信息
            if(RestStatus.OK.equals(searchResponse.status())) {
                // 获取聚合结果
                Aggregations aggregations = searchResponse.getAggregations();
                Terms byAgeAggregation = aggregations.get("by_age"); 
                logger.info("aggregation by_age 结果");
                logger.info("docCountError: " + byAgeAggregation.getDocCountError());
                logger.info("sumOfOtherDocCounts: " + byAgeAggregation.getSumOfOtherDocCounts());
                logger.info("------------------------------------");
                for(Bucket buck : byAgeAggregation.getBuckets()) {
                    logger.info("key: " + buck.getKeyAsNumber());
                    logger.info("docCount: " + buck.getDocCount());
                    //logger.info("docCountError: " + buck.getDocCountError());
                    //取子聚合
                    Avg averageBalance = buck.getAggregations().get("average_balance"); 

                    logger.info("average_balance: " + averageBalance.getValue());
                    logger.info("------------------------------------");
                }
                //直接用key 来去分组
                /*Bucket elasticBucket = byCompanyAggregation.getBucketByKey("24"); 
                Avg averageAge = elasticBucket.getAggregations().get("average_age"); 
                double avg = averageAge.getValue();*/
                
            }
            
        } catch (IOException | InterruptedException | ExecutionException e) {
            logger.error(e);
        }
    }
}

 9. 官网文档

Document API 文档操作API:

https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.2/java-docs.html

Search API:

https://www.elastic.co/guide/en/elasticsearch/client/java-api/6.2/java-search.html

 六、Spring Data Elasticsearch

 ES与Spring集成使用,可以作为了解,个人建议还是使用原生的ES的java客户端

 官网链接:

https://docs.spring.io/spring-data/elasticsearch/docs/current/reference/html/

代码库:

https://github.com/spring-projects/spring-data-elasticsearch

七、源代码获取地址

https://github.com/leeSmall/Elasticsearch-Java-client-api

转自:https://www.cnblogs.com/leeSmall/p/9218779.html

 

注:想学习es相关知识,请到https://www.cnblogs.com/leeSmall/p/9218779.html连接下查找详细信息,该博客写的很好

关于Java 服务器挂掉 很频繁java服务经常自己挂的问题我们已经讲解完毕,感谢您的阅读,如果还想了解更多关于4-1 如何定义 Java 中的方法;Java 中无参无返回值方法的使用;Java 中无参带返回值方法的使用;、5-2 Java 中的 static 使用之静态变量 ;;Java 中的 static 使用之静态方法;;Java 中的 static 使用之静态初始化块、ArrayMap java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Object[]、Elasticsearch Java client(ES Client 简介、Java REST Client、Java Client、Spring Data Elasticsearch)等相关内容,可以在本站寻找。

本文标签: