Skip to content

direct memory in java

Posted on:April 9, 2023 at 10:51 AM

背景

lucene 使用了direct memory,这类内存是非jvm直接管理的内存

DirectByteBufferR 是read only 版本的DirectByteBuffer,所以DirectByteBufferDirectByteBufferR是差不多的类

lucene的mmap

lucene 会使用DirectByteBufferR,这里申请的内存地址是140063879776283

main[1] dump receiver
 receiver = {
    $assertionsDisabled: true
    java.nio.DirectByteBuffer.ARRAY_BASE_OFFSET: 16
    java.nio.DirectByteBuffer.UNALIGNED: true
    java.nio.DirectByteBuffer.att: instance of java.nio.DirectByteBufferR(id=1500)
    java.nio.DirectByteBuffer.cleaner: null
    java.nio.DirectByteBuffer.$assertionsDisabled: true
    java.nio.MappedByteBuffer.fd: instance of java.io.FileDescriptor(id=1501)
    java.nio.MappedByteBuffer.isSync: false
    java.nio.MappedByteBuffer.SCOPED_MEMORY_ACCESS: instance of jdk.internal.misc.ScopedMemoryAccess(id=1502)
    java.nio.ByteBuffer.ARRAY_BASE_OFFSET: 16
    java.nio.ByteBuffer.hb: null
    java.nio.ByteBuffer.offset: 0
    java.nio.ByteBuffer.isReadOnly: true
    java.nio.ByteBuffer.bigEndian: false
    java.nio.ByteBuffer.nativeByteOrder: true
    java.nio.ByteBuffer.$assertionsDisabled: true
    java.nio.Buffer.UNSAFE: instance of jdk.internal.misc.Unsafe(id=1503)
    java.nio.Buffer.SCOPED_MEMORY_ACCESS: instance of jdk.internal.misc.ScopedMemoryAccess(id=1502)
    java.nio.Buffer.SPLITERATOR_CHARACTERISTICS: 16464
    java.nio.Buffer.mark: -1
    java.nio.Buffer.position: 0
    java.nio.Buffer.limit: 7
    java.nio.Buffer.capacity: 7
    java.nio.Buffer.address: 140063879776283
    java.nio.Buffer.segment: null
    java.nio.Buffer.$assertionsDisabled: true
}
main[1] where
  [1] org.apache.lucene.store.ByteBufferGuard.getByte (ByteBufferGuard.java:118)
  [2] org.apache.lucene.store.ByteBufferIndexInput$SingleBufferImpl.readByte (ByteBufferIndexInput.java:593)
  [3] org.apache.lucene.codecs.lucene90.Lucene90NormsProducer$3.longValue (Lucene90NormsProducer.java:388)
  [4] org.apache.lucene.search.LeafSimScorer.getNormValue (LeafSimScorer.java:47)
  [5] org.apache.lucene.search.LeafSimScorer.score (LeafSimScorer.java:60)
  [6] org.apache.lucene.search.TermScorer.score (TermScorer.java:75)
  [7] org.apache.lucene.search.TopScoreDocCollector$SimpleTopScoreDocCollector$1.collect (TopScoreDocCollector.java:73)
  [8] org.apache.lucene.search.Weight$DefaultBulkScorer.scoreAll (Weight.java:305)
  [9] org.apache.lucene.search.Weight$DefaultBulkScorer.score (Weight.java:247)
  [10] org.apache.lucene.search.BulkScorer.score (BulkScorer.java:38)
  [11] org.apache.lucene.search.IndexSearcher.search (IndexSearcher.java:770)
  [12] org.apache.lucene.search.IndexSearcher.search (IndexSearcher.java:693)
  [13] org.apache.lucene.search.IndexSearcher.search (IndexSearcher.java:687)
  [14] org.apache.lucene.search.IndexSearcher.searchAfter (IndexSearcher.java:532)
  [15] org.apache.lucene.search.IndexSearcher.search (IndexSearcher.java:542)
  [16] org.apache.lucene.demo.SearchFiles.doPagingSearch (SearchFiles.java:180)
  [17] org.apache.lucene.demo.SearchFiles.main (SearchFiles.java:150)

查看_7.cfs 文件:

hexdump -C /home/dai/index/_7.cfs
00000000  3f d7 6c 17 14 4c 75 63  65 6e 65 39 30 43 6f 6d  |?.l..Lucene90Com|
00000010  70 6f 75 6e 64 44 61 74  61 00 00 00 00 6b f0 66  |poundData....k.f|
00000020  56 c3 12 5b 07 08 12 3a  32 4d 4b 92 f8 00 00 00  |V..[...:2MK.....|
00000030  3f d7 6c 17 17 4c 75 63  65 6e 65 39 30 46 69 65  |?.l..Lucene90Fie|
00000040  6c 64 73 49 6e 64 65 78  4d 65 74 61 00 00 00 01  |ldsIndexMeta....|
00000050  6b f0 66 56 c3 12 5b 07  08 12 3a 32 4d 4b 92 f8  |k.fV..[...:2MK..|
00000060  00 80 80 05 07 00 00 00  0a 00 00 00 02 00 00 00  |................|
00000070  30 00 00 00 00 00 00 00  00 00 00 00 00 00 00 00  |0...............|
00000080  00 00 e0 40 00 00 00 00  00 00 00 00 00 30 00 00  |...@.........0..|
00000090  00 00 00 00 00 36 00 00  00 00 00 00 00 00 00 5d  |.....6.........]|
000000a0  43 00 00 00 00 00 00 00  00 00 30 00 00 00 00 00  |C.........0.....|
000000b0  00 00 13 01 00 00 00 00  00 00 01 01 07 c0 28 93  |..............(.|
000000c0  e8 00 00 00 00 00 00 00  00 46 80 fe 32 00 00 00  |.........F..2...|
000000d0  3f d7 6c 17 19 4c 75 63  65 6e 65 39 30 50 6f 69  |?.l..Lucene90Poi|
000000e0  6e 74 73 46 6f 72 6d 61  74 49 6e 64 65 78 00 00  |ntsFormatIndex..|
000000f0  00 00 6b f0 66 56 c3 12  5b 07 08 12 3a 32 4d 4b  |..k.fV..[...:2MK|
00000100  92 f8 00 32 c0 28 93 e8  00 00 00 00 00 00 00 00  |...2.(..........|
00000110  0a 2f 94 55 00 00 00 00  3f d7 6c 17 18 4c 75 63  |./.U....?.l..Luc|
00000120  65 6e 65 39 30 50 6f 69  6e 74 73 46 6f 72 6d 61  |ene90PointsForma|
00000130  74 4d 65 74 61 00 00 00  00 6b f0 66 56 c3 12 5b  |tMeta....k.fV..[|
00000140  07 08 12 3a 32 4d 4b 92  f8 00 01 00 00 00 3f d7  |...:2MK.......?.|
00000150  6c 17 03 42 4b 44 00 00  00 09 01 01 80 04 08 01  |l..BKD..........|
00000160  80 00 01 81 b4 f6 00 0f  80 00 01 81 b5 2b 3d 9d  |.............+=.|
00000170  07 07 01 32 00 00 00 00  00 00 00 33 00 00 00 00  |...2.......3....|
00000180  00 00 00 ff ff ff ff 44  00 00 00 00 00 00 00 72  |.......D.......r|
00000190  00 00 00 00 00 00 00 c0  28 93 e8 00 00 00 00 00  |........(.......|
000001a0  00 00 00 09 71 1c 79 00  3f d7 6c 17 12 42 6c 6f  |....q.y.?.l..Blo|
000001b0  63 6b 54 72 65 65 54 65  72 6d 73 4d 65 74 61 00  |ckTreeTermsMeta.|
000001c0  00 00 00 6b f0 66 56 c3  12 5b 07 08 12 3a 32 4d  |...k.fV..[...:2M|
000001d0  4b 92 f8 0a 4c 75 63 65  6e 65 39 30 5f 30 3f d7  |K...Lucene90_0?.|
000001e0  6c 17 1b 4c 75 63 65 6e  65 39 30 50 6f 73 74 69  |l..Lucene90Posti|
000001f0  6e 67 73 57 72 69 74 65  72 54 65 72 6d 73 00 00  |ngsWriterTerms..|
00000200  00 00 6b f0 66 56 c3 12  5b 07 08 12 3a 32 4d 4b  |..k.fV..[...:2MK|
00000210  92 f8 0a 4c 75 63 65 6e  65 39 30 5f 30 80 01 02  |...Lucene90_0...|
00000220  02 8c 01 0c db 01 03 62  af 05 67 cf 09 6d 95 14  |.......b..g..m..|
00000230  c2 02 a5 01 06 01 30 03  cd b1 69 37 3f d7 6c 17  |......0...i7?.l.|
00000240  03 46 53 54 00 00 00 08  01 0d 14 95 6d 09 cf 67  |.FST........m..g|
00000250  05 af 62 03 01 db 0c 00  00 01 00 07 02 a2 37 07  |..b...........7.|
00000260  07 16 2f 68 6f 6d 65 2f  64 61 69 2f 64 6f 63 73  |../home/dai/docs|
00000270  2f 61 61 61 2e 74 78 74  1f 2f 68 6f 6d 65 2f 64  |/aaa.txt./home/d|
00000280  61 69 2f 64 6f 63 73 2f  69 6e 64 65 78 2f 77 72  |ai/docs/index/wr|
00000290  69 74 65 2e 6c 6f 63 6b  38 3f d7 6c 17 03 46 53  |ite.lock8?.l..FS|
000002a0  54 00 00 00 08 01 03 37  a2 02 00 00 01 49 00 00  |T......7.....I..|
000002b0  00 00 00 00 00 c9 07 00  00 00 00 00 00 c0 28 93  |..............(.|
000002c0  e8 00 00 00 00 00 00 00  00 c1 1b ff e4 00 00 00  |................|
000002d0  3f d7 6c 17 18 4c 75 63  65 6e 65 39 30 50 6f 69  |?.l..Lucene90Poi|
000002e0  6e 74 73 46 6f 72 6d 61  74 44 61 74 61 00 00 00  |ntsFormatData...|
000002f0  00 6b f0 66 56 c3 12 5b  07 08 12 3a 32 4d 4b 92  |.k.fV..[...:2MK.|
00000300  f8 00 07 10 00 01 00 06  00 04 00 00 00 05 00 03  |................|
00000310  00 02 00 04 80 00 01 81  00 b4 03 f6 00 0f f6 55  |...............U|
00000320  d3 f8 31 29 b5 04 2b 3d  81 2b 3d 81 2b 3d 85 2b  |..1)..+=.+=.+=.+|
00000330  3d 9d c0 28 93 e8 00 00  00 00 00 00 00 00 28 e1  |=..(..........(.|
00000340  c0 de 00 00 00 00 00 00  3f d7 6c 17 19 4c 75 63  |........?.l..Luc|
00000350  65 6e 65 39 30 50 6f 73  74 69 6e 67 73 57 72 69  |ene90PostingsWri|
00000360  74 65 72 50 6f 73 00 00  00 00 6b f0 66 56 c3 12  |terPos....k.fV..|
00000370  5b 07 08 12 3a 32 4d 4b  92 f8 0a 4c 75 63 65 6e  |[...:2MK...Lucen|
00000380  65 39 30 5f 30 1e 01 03  b1 01 06 0b 0b a4 01 05  |e90_0...........|
00000390  0d 21 06 02 0b a5 01 0c  0d 0a 0e 19 18 20 09 0b  |.!........... ..|
000003a0  5f 19 45 06 30 08 0a 22  02 02 75 51 58 06 0b 03  |_.E.0.."..uQX...|
000003b0  05 03 07 7c 05 23 96 01  02 3c 54 30 37 01 11 18  |...|.#...<T07...|
000003c0  0a 40 30 29 0b 32 92 01  ae 01 03 1f 21 03 88 01  |.@0).2......!...|
000003d0  23 27 d5 01 73 18 0f 5f  07 3a 04 04 06 06 07 06  |#'..s.._.:......|
000003e0  12 19 38 04 00 72 0c 7d  52 3b 04 04 06 06 07 06  |..8..r.}R;......|
000003f0  25 06 38 04 11 46 3e 08  4c 42 11 10 0f 1f bc 01  |%.8..F>.LB......|
00000400  0b 1c 1a 06 8a 01 20 39  04 04 06 06 07 06 12 51  |...... 9.......Q|
00000410  04 c8 01 15 00 7e 44 06  06 07 06 17 06 08 06 04  |.....~D.........|
00000420  38 04 30 30 12 1d 05 07  19 06 05 02 00 05 05 06  |8.00............|
00000430  02 07 0c 05 07 31 05 2a  06 01 06 09 06 06 08 0b  |.....1.*........|
00000440  04 00 00 1a 00 1c 0c d1  01 06 2f 07 60 07 15 06  |........../.`...|
00000450  01 01 cb 01 63 1a 26 a8  01 9f 01 13 06 2b 99 01  |....c.&......+..|
00000460  b4 01 01 68 28 09 d4 01  09 1b 0d 6f 0a 16 1b 10  |...h(......o....|
00000470  17 80 01 05 71 cf 01 d0  01 06 d2 01 06 17 1e 04  |....q...........|
00000480  05 0d 07 0c 05 07 31 05  2a 07 06 09 06 06 17 08  |......1.*.......|
00000490  04 04 0c 04 0d 12 2a 01  25 76 0e 07 0f 20 14 1e  |......*.%v... ..|
000004a0  53 06 1e 08 a3 01 38 0a  0b a6 01 da 01 03 5e 2b  |S.....8.......^+|
000004b0  c5 01 61 18 01 ba 01 38  03 05 0d 07 0c 05 07 31  |..a....8.......1|
000004c0  05 2a 07 06 09 06 06 17  03 04 04 03 03 02 05 0d  |.*..............|
000004d0  07 0c 05 07 31 05 2a 07  06 09 06 06 17 02 08 02  |....1.*.........|
000004e0  02 c9 01 c0 28 93 e8 00  00 00 00 00 00 00 00 63  |....(..........c|
000004f0  69 b5 c7 00 00 00 00 00  3f d7 6c 17 15 4c 75 63  |i.......?.l..Luc|
00000500  65 6e 65 39 30 4e 6f 72  6d 73 4d 65 74 61 64 61  |ene90NormsMetada|
00000510  74 61 00 00 00 00 6b f0  66 56 c3 12 5b 07 08 12  |ta....k.fV..[...|
00000520  3a 32 4d 4b 92 f8 00 02  00 00 00 ff ff ff ff ff  |:2MK............|
00000530  ff ff ff 00 00 00 00 00  00 00 00 ff ff ff 07 00  |................|
00000540  00 00 01 2b 00 00 00 00  00 00 00 ff ff ff ff c0  |...+............|
00000550  28 93 e8 00 00 00 00 00  00 00 00 72 ba cc 7e 00  |(..........r..~.|
00000560  3f d7 6c 17 12 4c 75 63  65 6e 65 39 30 46 69 65  |?.l..Lucene90Fie|
00000570  6c 64 49 6e 66 6f 73 00  00 00 00 6b f0 66 56 c3  |ldInfos....k.fV.|
00000580  12 5b 07 08 12 3a 32 4d  4b 92 f8 00 03 04 70 61  |.[...:2MK.....pa|
00000590  74 68 00 02 01 00 ff ff  ff ff ff ff ff ff 02 1d  |th..............|
000005a0  50 65 72 46 69 65 6c 64  50 6f 73 74 69 6e 67 73  |PerFieldPostings|
000005b0  46 6f 72 6d 61 74 2e 66  6f 72 6d 61 74 08 4c 75  |Format.format.Lu|
000005c0  63 65 6e 65 39 30 1d 50  65 72 46 69 65 6c 64 50  |cene90.PerFieldP|
000005d0  6f 73 74 69 6e 67 73 46  6f 72 6d 61 74 2e 73 75  |ostingsFormat.su|
000005e0  66 66 69 78 01 30 00 00  00 08 6d 6f 64 69 66 69  |ffix.0....modifi|
000005f0  65 64 01 00 00 00 ff ff  ff ff ff ff ff ff 00 01  |ed..............|
00000600  01 08 00 00 08 63 6f 6e  74 65 6e 74 73 02 00 03  |.....contents...|
00000610  00 ff ff ff ff ff ff ff  ff 02 1d 50 65 72 46 69  |...........PerFi|
00000620  65 6c 64 50 6f 73 74 69  6e 67 73 46 6f 72 6d 61  |eldPostingsForma|
00000630  74 2e 66 6f 72 6d 61 74  08 4c 75 63 65 6e 65 39  |t.format.Lucene9|
00000640  30 1d 50 65 72 46 69 65  6c 64 50 6f 73 74 69 6e  |0.PerFieldPostin|
00000650  67 73 46 6f 72 6d 61 74  2e 73 75 66 66 69 78 01  |gsFormat.suffix.|
00000660  30 00 00 00 c0 28 93 e8  00 00 00 00 00 00 00 00  |0....(..........|
00000670  1f ee 84 f9 00 00 00 00  3f d7 6c 17 1c 4c 75 63  |........?.l..Luc|
00000680  65 6e 65 39 30 53 74 6f  72 65 64 46 69 65 6c 64  |ene90StoredField|
00000690  73 46 61 73 74 44 61 74  61 00 00 00 01 6b f0 66  |sFastData....k.f|
000006a0  56 c3 12 5b 07 08 12 3a  32 4d 4b 92 f8 00 00 1e  |V..[...:2MK.....|
000006b0  00 01 08 18 1d 21 21 1d  1c 18 0a 13 0b 15 12 10  |.....!!.........|
000006c0  15 0f 15 12 10 15 12 a0  00 16 2f 68 6f 6d 65 2f  |........../home/|
000006d0  64 61 f0 04 69 2f 64 6f  63 73 2f 62 62 62 2e 74  |da..i/docs/bbb.t|
000006e0  78 74 00 1b 2f 68 6f 01  05 00 e0 69 2f 64 6f 63  |xt../ho....i/doc|
000006f0  73 2f 69 6e 64 65 78 2f  5f 73 30 2e 63 66 73 00  |s/index/_s0.cfs.|
00000700  1f 0f 00 50 61 69 2f 64  6f f0 04 63 73 2f 69 6e  |...Pai/do..cs/in|
00000710  64 65 78 2f 73 65 67 6d  65 6e 74 73 5f 31 24 00  |dex/segments_1$.|
00000720  1f 0a 00 90 69 2f 64 6f  63 73 2f 69 6e f0 04 64  |....i/docs/in..d|
00000730  65 78 2f 77 72 69 74 65  2e 6c 6f 63 6b 00 1b 2f  |ex/write.lock../|
00000740  68 6f 01 05 00 e0 69 2f  64 6f 63 73 2f 69 6e 64  |ho....i/docs/ind|
00000750  65 78 2f 5f 73 30 2e 63  66 65 00 1a 0f 00 50 61  |ex/_s0.cfe....Pa|
00000760  69 2f 64 6f f0 04 63 73  2f 69 6e 64 65 78 2f 5f  |i/do..cs/index/_|
00000770  30 2e 73 69 00 16 2f 68  6f 01 05 00 e0 69 2f 64  |0.si../ho....i/d|
00000780  6f 63 73 2f 61 61 61 2e  74 78 74 c0 28 93 e8 00  |ocs/aaa.txt.(...|
00000790  00 00 00 00 00 00 00 52  80 f1 02 00 00 00 00 00  |.......R........|
000007a0  3f d7 6c 17 13 42 6c 6f  63 6b 54 72 65 65 54 65  |?.l..BlockTreeTe|
000007b0  72 6d 73 49 6e 64 65 78  00 00 00 00 6b f0 66 56  |rmsIndex....k.fV|
000007c0  c3 12 5b 07 08 12 3a 32  4d 4b 92 f8 0a 4c 75 63  |..[...:2MK...Luc|
000007d0  65 6e 65 39 30 5f 30 00  00 c0 28 93 e8 00 00 00  |ene90_0...(.....|
000007e0  00 00 00 00 00 6e c7 b4  6e 00 00 00 00 00 00 00  |.....n..n.......|
000007f0  3f d7 6c 17 11 4c 75 63  65 6e 65 39 30 4e 6f 72  |?.l..Lucene90Nor|
00000800  6d 73 44 61 74 61 00 00  00 00 6b f0 66 56 c3 12  |msData....k.fV..|
00000810  5b 07 08 12 3a 32 4d 4b  92 f8 00 08 44 0e 00 21  |[...:2MK....D..!|      <------------- here  08 44 0e 00 21
00000820  29 04 c0 28 93 e8 00 00  00 00 00 00 00 00 43 ab  |)..(..........C.|      <------------  04 就是norm
00000830  9e 6c 00 00 00 00 00 00  3f d7 6c 17 19 4c 75 63  |.l......?.l..Luc|
00000840  65 6e 65 39 30 50 6f 73  74 69 6e 67 73 57 72 69  |ene90PostingsWri|
00000850  74 65 72 44 6f 63 00 00  00 00 6b f0 66 56 c3 12  |terDoc....k.fV..|
00000860  5b 07 08 12 3a 32 4d 4b  92 f8 0a 4c 75 63 65 6e  |[...:2MK...Lucen|
00000870  65 39 30 5f 30 03 03 02  05 08 03 01 02 02 0b 03  |e90_0...........|
00000880  07 02 02 07 01 03 02 02  07 02 02 07 03 07 03 07  |................|
00000890  05 02 15 03 04 02 03 02  10 03 05 03 05 05 02 10  |................|
000008a0  02 03 05 03 02 10 02 02  05 03 c0 28 93 e8 00 00  |...........(....|
000008b0  00 00 00 00 00 00 8d fa  92 14 00 00 00 00 00 00  |................|
000008c0  3f d7 6c 17 12 42 6c 6f  63 6b 54 72 65 65 54 65  |?.l..BlockTreeTe|
000008d0  72 6d 73 44 69 63 74 00  00 00 00 6b f0 66 56 c3  |rmsDict....k.fV.|
000008e0  12 5b 07 08 12 3a 32 4d  4b 92 f8 0a 4c 75 63 65  |.[...:2MK...Luce|
000008f0  6e 65 39 30 5f 30 36 84  0e 30 30 75 62 75 6e 74  |ne90_06..00ubunt|
00000900  75 30 2e 32 32 2e 30 34  2e 31 31 31 30 2e 30 2e  |u0.22.04.1110.0.|
00000910  30 31 36 35 36 36 30 31  39 31 38 38 33 36 31 37  |0165660191883617|
00000920  2e 30 2e 33 31 65 31 69  31 6d 31 6d 31 6d 32 33  |.0.31e1i1m1m1m23|
00000930  33 33 35 2e 31 35 2e 30  36 37 39 5f 30 5f 30 5f  |335.15.0679_0_0_|
00000940  6c 75 63 65 6e 65 39 30  66 69 65 6c 64 5f 30 5f  |lucene90field_0_|
00000950  6c 75 63 65 6e 65 39 30  66 69 65 6c 64 73 69 6e  |lucene90fieldsin|
00000960  64 65 78 5f 30 5f 6c 75  63 65 6e 65 39 30 66 69  |dex_0_lucene90fi|
00000970  65 6c 64 73 69 6e 64 65  78 66 69 6c 65 5f 70 6f  |eldsindexfile_po|
00000980  69 6e 74 65 72 73 5f 31  5f 30 cb b9 5f 6c 75 63  |inters_1_0.._luc|
00000990  65 6e 65 39 30 5f 30 5f  6c 75 63 65 6e 65 39 30  |ene90_0_lucene90|
000009a0  66 69 65 6c 64 73 69 6e  64 65 78 61 61 61 61 2e  |fieldsindexaaaa.|
000009b0  74 78 74 61 61 6d 62 6f  79 64 6f 67 6f 6f 64 69  |txtaamboydogoodi|
000009c0  69 73 6b 6e 6f 77 74 68  69 6e 67 77 68 61 74 79  |isknowthingwhaty|
000009d0  6f 75 61 6d 61 6d 64 36  34 36 01 10 01 06 0d 06  |ouamamd646......|
000009e0  08 02 01 01 02 06 01 01  01 02 10 16 25 04 0b 14  |............%...|
000009f0  01 07 1f 02 05 1c 02 04  02 01 04 00 03 02 02 03  |................|
00000a00  02 01 07 02 01 02 01 04  06 07 02 04 01 06 01 02  |................|
00000a10  02 05 3a 7a 01 3d 11 06  00 02 04 05 03 01 01 01  |..:z.=..........|
00000a20  01 0f 03 01 02 01 01 01  02 11 01 01 01 0f 01 11  |................|
00000a30  01 0f 02 00 02 08 01 08  01 01 01 01 05 01 09 01  |................|
00000a40  0b 05 00 01 08 01 05 01  03 15 01 03 01 38 b4 09  |.............8..|
00000a50  62 62 62 62 2e 74 78 74  62 65 73 74 5f 73 70 65  |bbbb.txtbest_spe|
00000a60  65 64 62 6b 64 62 6c 6f  63 6b 74 72 65 65 74 65  |edbkdblocktreete|
00000a70  72 6d 73 64 69 63 74 62  6c 6f 63 6b 74 72 65 65  |rmsdictblocktree|
00000a80  74 65 72 6d 73 69 6e 64  65 78 62 6c 6f 63 6b 74  |termsindexblockt|
00000a90  72 65 65 74 65 72 6d 73  6d 65 74 61 62 6f 79 62  |reetermsmetaboyb|
00000aa0  75 69 6c 64 63 63 66 65  63 66 73 63 6f 6e 74 65  |uildccfecfsconte|
00000ab0  6e 74 73 63 73 64 64 61  69 64 6f 64 6f 63 64 6f  |ntscsddaidodocdo|
00000ac0  63 5f 64 6f 63 5f 69 64  73 5f 30 64 6f 63 73 65  |c_doc_ids_0docse|
00000ad0  75 66 66 64 6d 66 64 74  66 64 78 66 6c 75 73 68  |uffdmfdtfdxflush|
00000ae0  66 6e 6d 66 73 74 38 01  07 0a 03 12 13 12 03 05  |fnmfst8.........|
00000af0  01 03 03 08 02 01 03 02  03 04 09 04 03 03 03 03  |................|
00000b00  05 03 03 1b 04 00 02 01  0d 02 02 05 02 01 04 01  |................|
00000b10  02 0a 04 00 05 02 0a 01  04 01 04 01 05 02 01 3d  |...............=|
00000b20  8e 01 77 04 01 02 11 02  0f 01 01 01 01 01 01 02  |..w.............|
00000b30  15 02 03 01 0f 01 11 04  01 01 0f 01 01 02 00 02  |................|
00000b40  06 01 03 00 0b 04 04 02  0b 01 01 01 01 01 01 0b  |................|
00000b50  00 01 06 03 06 04 03 05  01 03 01 0b 01 50 cc 20  |.............P. |
00000b60  67 67 65 6e 65 72 69 63  67 6f 6f 64 68 68 6f 6d  |ggenericgoodhhom|
00000b70  65 69 69 64 73 5f 30 69  6e 64 65 78 69 73 6a 6a  |eiids_0indexisjj|
00000b80  61 76 61 2e 72 75 6e 74  69 6d 65 2e 76 65 72 73  |ava.runtime.vers|
00000b90  69 6f 6e 6a 61 76 61 2e  76 65 6e 64 6f 72 6a 61  |ionjava.vendorja|
00000ba0  76 61 2e 76 65 72 73 69  6f 6e 6a 61 76 61 2e 76  |va.versionjava.v|
00000bb0  6d 2e 76 65 72 73 69 6f  6e 6b 64 64 6b 64 69 6b  |m.versionkddkdik|
00000bc0  64 6d 30 6b 6e 6f 77 6c  6c 69 6e 75 78 6c 75 63  |dm0knowllinuxluc|
00000bd0  65 6e 65 2e 76 65 72 73  69 6f 6e 6c 75 63 65 6e  |ene.versionlucen|
00000be0  65 39 30 6c 75 63 65 6e  65 39 30 5f 30 6c 75 63  |e90lucene90_0luc|
00000bf0  65 6e 65 39 30 63 6f 6d  70 6f 75 6e 64 64 61 74  |ene90compounddat|
00000c00  61 6c 75 63 65 6e 65 39  30 63 6f 6d 70 6f 75 6e  |alucene90compoun|
00000c10  64 65 6e 74 72 69 65 73  6c 75 63 65 6e 65 39 30  |dentrieslucene90|
00000c20  66 69 65 6c 64 69 6e 66  6f 73 6c 75 63 65 6e 65  |fieldinfoslucene|
00000c30  39 30 66 69 65 6c 64 73  69 6e 64 65 78 69 64 78  |90fieldsindexidx|
00000c40  6c 75 63 65 6e 65 39 30  66 69 65 6c 64 73 69 6e  |lucene90fieldsin|
00000c50  64 65 78 6d 65 74 61 6c  75 63 65 6e 65 39 30 6e  |dexmetalucene90n|
00000c60  6f 72 6d 73 64 61 74 61  6c 75 63 65 6e 65 39 30  |ormsdatalucene90|
00000c70  6e 6f 72 6d 73 6d 65 74  61 64 61 74 61 6c 75 63  |normsmetadataluc|
00000c80  65 6e 65 39 30 70 6f 69  6e 74 73 66 6f 72 6d 61  |ene90pointsforma|
00000c90  74 64 61 74 61 6c 75 63  65 6e 65 39 30 70 6f 69  |tdatalucene90poi|
00000ca0  6e 74 73 66 6f 72 6d 61  74 69 6e 64 65 78 6c 75  |ntsformatindexlu|
00000cb0  63 65 6e 65 39 30 70 6f  69 6e 74 73 66 6f 72 6d  |cene90pointsform|
00000cc0  61 74 6d 65 74 61 6c 75  63 65 6e 65 39 30 70 6f  |atmetalucene90po|
00000cd0  73 74 69 6e 67 73 77 72  69 74 65 72 64 6f 63 6c  |stingswriterdocl|
00000ce0  75 63 65 6e 65 39 30 70  6f 73 74 69 6e 67 73 77  |ucene90postingsw|
00000cf0  72 69 74 65 72 70 6f 73  6c 75 63 65 6e 65 39 30  |riterposlucene90|
00000d00  70 6f 73 74 69 6e 67 73  77 72 69 74 65 72 74 65  |postingswriterte|
00000d10  72 6d 73 6c 75 63 65 6e  65 39 30 73 65 67 6d 65  |rmslucene90segme|
00000d20  6e 74 69 6e 66 6f 6c 75  63 65 6e 65 39 30 73 74  |ntinfolucene90st|
00000d30  6f 72 65 64 66 69 65 6c  64 73 66 61 73 74 64 61  |oredfieldsfastda|
00000d40  74 61 6c 75 63 65 6e 65  39 30 73 74 6f 72 65 64  |talucene90stored|
00000d50  66 69 65 6c 64 73 66 6f  72 6d 61 74 2e 6d 6f 64  |fieldsformat.mod|
00000d60  65 6c 75 63 65 6e 65 39  33 50 01 07 04 01 04 01  |elucene93P......|
00000d70  05 05 02 01 14 0b 0c 0f  03 03 04 04 01 05 0e 08  |................|
00000d80  0a 14 17 12 16 17 11 15  18 19 18 19 19 1b 13 1c  |................|
00000d90  1f 08 16 05 04 00 02 09  06 00 01 02 0a 01 02 01  |................|
00000da0  0f 08 15 03 02 01 02 05  21 56 a8 01 04 b9 01 05  |........!V......|
00000db0  01 13 01 00 01 04 01 03  00 0a 06 01 04 01 01 03  |................|
00000dc0  0b 05 01 11 02 01 01 01  01 01 01 03 01 01 01 01  |................|
00000dd0  01 0f 01 00 01 0c 05 19  01 01 0f 01 01 03 01 06  |................|
00000de0  0d 01 0b 01 01 02 01 01  01 01 01 01 01 02 01 02  |................|
00000df0  01 01 01 01 01 01 01 02  11 02 0f 01 11 01 0b 01  |................|
00000e00  5b a4 0f 6d 6f 64 69 66  69 65 64 6e 76 64 6e 76  |[..modifiednvdnv|
00000e10  6d 6f 6f 63 73 6f 73 6f  73 2e 61 72 63 68 6f 73  |moocsosos.archos|
00000e20  2e 76 65 72 73 69 6f 6e  70 70 61 69 70 61 74 68  |.versionppaipath|
00000e30  70 65 72 66 69 65 6c 64  70 6f 73 74 69 6e 67 73  |perfieldpostings|
00000e40  66 6f 72 6d 61 74 2e 66  6f 72 6d 61 74 70 65 72  |format.formatper|
00000e50  66 69 65 6c 64 70 6f 73  74 69 6e 67 73 66 6f 72  |fieldpostingsfor|
00000e60  6d 61 74 2e 73 75 66 66  69 78 70 6f 73 70 72 69  |mat.suffixpospri|
00000e70  76 61 74 65 70 d7 99 70  d7 9b 70 d7 9c 71 71 78  |vatep..p..p..qqx|
00000e80  72 73 65 67 6d 65 6e 74  73 73 69 73 69 6e 64 65  |rsegmentssisinde|
00000e90  78 66 69 6c 65 5f 70 6f  69 6e 74 65 72 73 5f 31  |xfile_pointers_1|
00000ea0  73 6f 75 72 63 65 74 68  69 6e 67 74 69 6d 74 69  |sourcethingtimti|
00000eb0  6d 65 73 74 61 6d 70 74  69 70 78 74 6d 64 74 6d  |mestamptipxtmdtm|
00000ec0  70 75 75 62 75 6e 74 75  76 78 77 63 77 68 61 74  |puubuntuvxwcwhat|
00000ed0  77 72 69 74 65 2e 6c 6f  63 6b 77 72 69 74 65 2e  |write.lockwrite.|
00000ee0  6c 6f 63 6b 38 78 79 79  6f 75 79 6f 75 37 7a 7a  |lock8xyyouyou7zz|
00000ef0  74 37 cb b9 cd b1 69 5a  08 03 03 01 03 02 07 0a  |t7....iZ........|
00000f00  01 03 04 1d 1d 03 07 03  03 03 01 03 08 02 15 06  |................|
00000f10  05 03 09 04 03 03 01 06  02 02 04 0a 0b 01 01 03  |................|
00000f20  04 01 03 02 03 21 07 02  02 05 02 01 03 02 01 02  |.....!..........|
00000f30  01 03 08 0f 03 04 00 13  02 03 02 01 02 01 05 02  |................|
00000f40  01 0b 08 11 08 10 01 60  be 01 01 9e 02 0d 02 01  |.......`........|
00000f50  01 01 01 0b 01 11 03 01  01 01 01 0f 01 01 03 01  |................|
00000f60  01 01 02 01 03 0d 03 05  01 00 01 0a 02 13 01 01  |................|
00000f70  00 01 04 05 02 0b 01 0d  01 0f 01 11 01 13 01 11  |................|
00000f80  01 05 01 03 01 01 01 0b  01 01 04 11 03 0f 02 01  |................|
00000f90  02 03 02 05 01 01 02 01  02 0d 01 0f 01 05 01 01  |................|
00000fa0  02 00 01 0c 15 0c 01 14  0f d4 0b 2f 68 6f 6d 65  |.........../home|
00000fb0  2f 64 61 69 2f 64 6f 63  73 2f 61 61 61 2e 74 78  |/dai/docs/aaa.tx|
00000fc0  74 2f 68 6f 6d 65 2f 64  61 69 2f 64 6f 63 73 2f  |t/home/dai/docs/|
00000fd0  62 62 62 2e 74 78 74 2f  68 6f 6d 65 2f 64 61 69  |bbb.txt/home/dai|
00000fe0  2f 64 6f 63 73 2f 69 6e  64 65 78 2f 5f 30 2e 63  |/docs/index/_0.c|
00000ff0  66 65 2f 68 6f 6d 65 2f  64 61 69 2f 64 6f 63 73  |fe/home/dai/docs|
00001000  2f 69 6e 64 65 78 2f 5f  30 2e 63 66 73 2f 68 6f  |/index/_0.cfs/ho|
00001010  6d 65 2f 64 61 69 2f 64  6f 63 73 2f 69 6e 64 65  |me/dai/docs/inde|
00001020  78 2f 5f 30 2e 73 69 2f  68 6f 6d 65 2f 64 61 69  |x/_0.si/home/dai|
00001030  2f 64 6f 63 73 2f 69 6e  64 65 78 2f 73 65 67 6d  |/docs/index/segm|
00001040  65 6e 74 73 5f 31 2f 68  6f 6d 65 2f 64 61 69 2f  |ents_1/home/dai/|
00001050  64 6f 63 73 2f 69 6e 64  65 78 2f 77 72 69 74 65  |docs/index/write|
00001060  2e 6c 6f 63 6b 0e 16 16  1b 1b 1a 1f 1f 01 0d 09  |.lock...........|
00001070  e4 01 06 17 11 0b 11 0b  05 c0 28 93 e8 00 00 00  |..........(.....|
00001080  00 00 00 00 00 26 7d 6b  cb 00 00 00 00 00 00 00  |.....&}k........|
00001090  3f d7 6c 17 16 4c 75 63  65 6e 65 39 30 46 69 65  |?.l..Lucene90Fie|
000010a0  6c 64 73 49 6e 64 65 78  49 64 78 00 00 00 00 6b  |ldsIndexIdx....k|
000010b0  f0 66 56 c3 12 5b 07 08  12 3a 32 4d 4b 92 f8 00  |.fV..[...:2MK...|
000010c0  c0 28 93 e8 00 00 00 00  00 00 00 00 be 7c 21 a1  |.(...........|!.|
000010d0  c0 28 93 e8 00 00 00 00  00 00 00 00 15 f4 63 e8  |.(............c.|
000010e0

gdb 读取内容:

(gdb) x/32xb 140063879776283
0x7f6329ccc81b:	0x08	0x44	0x0e	0x00	0x21	0x29	0x04	0xc0
0x7f6329ccc823:	0x28	0x93	0xe8	0x00	0x00	0x00	0x00	0x00
0x7f6329ccc82b:	0x00	0x00	0x00	0x43	0xab	0x9e	0x6c	0x00
0x7f6329ccc833:	0x00	0x00	0x00	0x00	0x00	0x3f	0xd7	0x6c

源码分析

DirectByteBufferR 继承关系

DirectByteBufferR extend

依赖以下的脚本自动根据平台自动实现nio的DirectByteBufferR这个类:

// 源码地址 jdk/make/modules/java.base/gensrc/GensrcBuffer.gmk
# Direct byte buffer
#
DIRECT_X_BUF := Direct-X-Buffer

$(eval $(call SetupGenBuffer,DirectByteBuffer, $(DIRECT_X_BUF), type:=byte, BIN:=1))
$(eval $(call SetupGenBuffer,DirectByteBufferR,$(DIRECT_X_BUF), type:=byte, BIN:=1, RW:=R))

DirectByteBufferR 继承 DirectByteBuffer , DirectByteBuffer 则继承ByteBuffer
下面是编译后通过宏自动构建的DirectByteBufferR类,需要编译jvm的时候才能生成,我的在这个目录生成(编译jdk之后才会有这个文件,直接下载是没有这个文件的) jdk/build/linux-x86_64-server-slowdebug/support/gensrc/java.base/java/nio/DirectByteBufferR.java



// -- This file was mechanically generated: Do not edit! -- //

package java.nio;

import java.io.FileDescriptor;
import java.lang.ref.Reference;
import java.util.Objects;
import jdk.internal.access.foreign.MemorySegmentProxy;
import jdk.internal.misc.ScopedMemoryAccess.Scope;
import jdk.internal.misc.VM;
import jdk.internal.ref.Cleaner;
import sun.nio.ch.DirectBuffer;


class DirectByteBufferR  extends DirectByteBuffer implements DirectBuffer
{
...
    // Primary constructor
    //
    DirectByteBufferR(int cap) {                   // package-private
        super(cap);
        this.isReadOnly = true;

    }



    // For memory-mapped buffers -- invoked by FileChannelImpl via reflection
    //
    protected DirectByteBufferR(int cap, long addr,
                                     FileDescriptor fd,
                                     Runnable unmapper,
                                     boolean isSync, MemorySegmentProxy segment)
    {
        super(cap, addr, fd, unmapper, isSync, segment);
        this.isReadOnly = true;
    }

...

}

他的读取方法DirectByteBufferR.get是从DirectByteBuffer继承的,下面是实现:

实际是调用SCOPED_MEMORY_ACCESS.getByte

// jdk/build/linux-x86_64-server-slowdebug/support/gensrc/java.base/java/nio/DirectByteBuffer.java
    public byte get() {
        try {
            return ((SCOPED_MEMORY_ACCESS.getByte(scope(), null, ix(nextGetIndex()))));
        } finally {
            Reference.reachabilityFence(this);
        }
    }

    public byte get(int i) {
        try {
            return ((SCOPED_MEMORY_ACCESS.getByte(scope(), null, ix(checkIndex(i)))));
        } finally {
            Reference.reachabilityFence(this);
        }
    }

SCOPED_MEMORY_ACCESS是在MappedByteBuffer里面定义的 ,而DirectByteBufferMappedByteBuffer 子类

class DirectByteBuffer  extends MappedByteBuffer implements DirectBuffer
{
    ...
}

SCOPED_MEMORY_ACCESS.getByte最后调用的是UNSAFE.getByte


public class ScopedMemoryAccess {

    private static final Unsafe UNSAFE = Unsafe.getUnsafe();


    @ForceInline
    public byte getByte(Scope scope, Object base, long offset) {
        ...
            return getByteInternal(scope, base, offset);  // 调用 内部函数
        ...
    }

    @ForceInline @Scoped
    private byte getByteInternal(Scope scope, Object base, long offset) {
            ...
            return UNSAFE.getByte(base, offset);  // 最后调用的是UNSAFE.getByte
            ...
    }

UNSAFE是一个全局的静态变量,最后调用的是

// jdk/src/hotspot/share/prims/unsafe.cpp

UNSAFE_ENTRY(java_type, Unsafe_Get##Type(JNIEnv *env, jobject unsafe, jobject obj, jlong offset)) { \
  return MemoryAccess<java_type>(thread, obj, offset).get(); \
} UNSAFE_END \

展开之后是调用MemoryAccess的get方法,实际是获取内存的值

相关阅读