Skip to main content

direct memory in java

· 28 min read

背景

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 |[email protected]..|
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方法,实际是获取内存的值

相关阅读