Skip to main content

100 posts tagged with "java"

View All Tags

redission 调用流程

· 8 min read

背景

java的redis操作使用redission封装

一个简单的堆栈堆栈

使用

比较核心的堆栈

encode:132, CommandEncoder (org.redisson.client.handler)
encode:99, CommandEncoder (org.redisson.client.handler)
encode:55, CommandEncoder (org.redisson.client.handler)
write:107, MessageToByteEncoder (io.netty.handler.codec)
write:75, CommandEncoder (org.redisson.client.handler)
invokeWrite0:881, AbstractChannelHandlerContext (io.netty.channel)
invokeWrite:863, AbstractChannelHandlerContext (io.netty.channel)
write:968, AbstractChannelHandlerContext (io.netty.channel)
write:856, AbstractChannelHandlerContext (io.netty.channel)
write:120, MessageToByteEncoder (io.netty.handler.codec)
write:45, CommandBatchEncoder (org.redisson.client.handler)
invokeWrite0:881, AbstractChannelHandlerContext (io.netty.channel)
invokeWriteAndFlush:940, AbstractChannelHandlerContext (io.netty.channel)
write:966, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:934, AbstractChannelHandlerContext (io.netty.channel)
write:83, CommandsQueue (org.redisson.client.handler)
invokeWrite0:879, AbstractChannelHandlerContext (io.netty.channel)
invokeWriteAndFlush:940, AbstractChannelHandlerContext (io.netty.channel)
run:1247, AbstractChannelHandlerContext$WriteTask (io.netty.channel)
runTask$$$capture:174, AbstractEventExecutor (io.netty.util.concurrent)
runTask:-1, AbstractEventExecutor (io.netty.util.concurrent)
- Async stack trace
addTask:-1, SingleThreadEventExecutor (io.netty.util.concurrent)
execute:836, SingleThreadEventExecutor (io.netty.util.concurrent)
execute0:827, SingleThreadEventExecutor (io.netty.util.concurrent)
execute:817, SingleThreadEventExecutor (io.netty.util.concurrent)
safeExecute:1165, AbstractChannelHandlerContext (io.netty.channel)
write:972, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:934, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:984, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:1025, DefaultChannelPipeline (io.netty.channel)
writeAndFlush:306, AbstractChannel (io.netty.channel)
send:206, RedisConnection (org.redisson.client)
sendCommand:590, RedisExecutor (org.redisson.command)
lambda$execute$3:164, RedisExecutor (org.redisson.command)
uniWhenComplete:859, CompletableFuture (java.util.concurrent)
uniWhenCompleteStage:883, CompletableFuture (java.util.concurrent)
whenComplete:2251, CompletableFuture (java.util.concurrent)
execute:149, RedisExecutor (org.redisson.command)
async:526, CommandAsyncService (org.redisson.command)
writeAsync:490, CommandAsyncService (org.redisson.command)
setAsync:192, RedissonBucket (org.redisson)
set:183, RedissonBucket (org.redisson)
main:25, App (com.demo.redission)

分配内存

allocateMemory:608, Unsafe (jdk.internal.misc)
<init>:122, DirectByteBuffer (java.nio)
allocateDirect:317, ByteBuffer (java.nio)
<clinit>:93, PlatformDependent0 (io.netty.util.internal)
isAndroid:333, PlatformDependent (io.netty.util.internal)
<clinit>:88, PlatformDependent (io.netty.util.internal)
<clinit>:84, NioEventLoop (io.netty.channel.nio)
newChild:182, NioEventLoopGroup (io.netty.channel.nio)
newChild:38, NioEventLoopGroup (io.netty.channel.nio)
<init>:84, MultithreadEventExecutorGroup (io.netty.util.concurrent)
<init>:60, MultithreadEventExecutorGroup (io.netty.util.concurrent)
<init>:49, MultithreadEventExecutorGroup (io.netty.util.concurrent)
<init>:59, MultithreadEventLoopGroup (io.netty.channel)
<init>:87, NioEventLoopGroup (io.netty.channel.nio)
<init>:82, NioEventLoopGroup (io.netty.channel.nio)
<init>:69, NioEventLoopGroup (io.netty.channel.nio)
<init>:181, MasterSlaveConnectionManager (org.redisson.connection)
<init>:73, ClusterConnectionManager (org.redisson.cluster)
createConnectionManager:196, ConfigSupport (org.redisson.config)
<init>:68, Redisson (org.redisson)
create:109, Redisson (org.redisson)
main:24, App (com.demo.redission)

ByteBuf 写入

堆栈

putByte:704, PlatformDependent0 (io.netty.util.internal)
putByte:719, PlatformDependent (io.netty.util.internal)
unsafeWriteUtf8:1020, ByteBufUtil (io.netty.buffer)
writeUtf8:836, ByteBufUtil (io.netty.buffer)
writeUtf8:820, ByteBufUtil (io.netty.buffer)
setCharSequence0:707, AbstractByteBuf (io.netty.buffer)
writeCharSequence:1187, AbstractByteBuf (io.netty.buffer)
encode:45, StringCodec$1 (org.redisson.client.codec)
encode:622, CommandAsyncService (org.redisson.command)
encode:313, RedissonObject (org.redisson)
setAsync:192, RedissonBucket (org.redisson)
set:183, RedissonBucket (org.redisson)
testApp:57, AppTest (com.demo.redission)
invokeVirtual:-1, LambdaForm$DMH/0x0000000800c0c400 (java.lang.invoke)
invoke:-1, LambdaForm$MH/0x0000000800c0d000 (java.lang.invoke)
invokeExact_MT:-1, Invokers$Holder (java.lang.invoke)
invokeImpl:154, DirectMethodHandleAccessor (jdk.internal.reflect)
invoke:104, DirectMethodHandleAccessor (jdk.internal.reflect)
invoke:577, Method (java.lang.reflect)
runTest:154, TestCase (junit.framework)
runBare:127, TestCase (junit.framework)
protect:106, TestResult$1 (junit.framework)
runProtected:124, TestResult (junit.framework)
run:109, TestResult (junit.framework)
run:118, TestCase (junit.framework)
doRun:116, TestRunner (junit.textui)
doRun:117, JUnit3IdeaTestRunner (com.intellij.junit3)
doRun:109, TestRunner (junit.textui)
startRunnerWithArgs:38, JUnit3IdeaTestRunner (com.intellij.junit3)
execute:38, IdeaTestRunner$Repeater$1 (com.intellij.rt.junit)
repeat:11, TestsRepeater (com.intellij.rt.execution.junit)
startRunnerWithArgs:35, IdeaTestRunner$Repeater (com.intellij.rt.junit)
prepareStreamsAndStart:235, JUnitStarter (com.intellij.rt.junit)
main:54, JUnitStarter (com.intellij.rt.junit)

ByteBuf 最后会调用UNSAFE.putByte(data, offset, value); 写入

ByteBuf 写入socket

write:62, SocketDispatcher (sun.nio.ch)
writeFromNativeBuffer:137, IOUtil (sun.nio.ch)
write:81, IOUtil (sun.nio.ch)
write:58, IOUtil (sun.nio.ch)
write:532, SocketChannelImpl (sun.nio.ch)
doWrite:415, NioSocketChannel (io.netty.channel.socket.nio)
flush0:931, AbstractChannel$AbstractUnsafe (io.netty.channel)
flush0:354, AbstractNioChannel$AbstractNioUnsafe (io.netty.channel.nio)
flush:895, AbstractChannel$AbstractUnsafe (io.netty.channel)
flush:1372, DefaultChannelPipeline$HeadContext (io.netty.channel)
invokeFlush0:921, AbstractChannelHandlerContext (io.netty.channel)
invokeFlush:907, AbstractChannelHandlerContext (io.netty.channel)
flush:893, AbstractChannelHandlerContext (io.netty.channel)
flush:125, ChannelOutboundHandlerAdapter (io.netty.channel)
invokeFlush0:925, AbstractChannelHandlerContext (io.netty.channel)
invokeWriteAndFlush:941, AbstractChannelHandlerContext (io.netty.channel)
write:966, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:934, AbstractChannelHandlerContext (io.netty.channel)
write:83, CommandsQueue (org.redisson.client.handler)
invokeWrite0:879, AbstractChannelHandlerContext (io.netty.channel)
invokeWriteAndFlush:940, AbstractChannelHandlerContext (io.netty.channel)
run:1247, AbstractChannelHandlerContext$WriteTask (io.netty.channel)
runTask$$$capture:174, AbstractEventExecutor (io.netty.util.concurrent)
runTask:-1, AbstractEventExecutor (io.netty.util.concurrent)
- Async stack trace
addTask:-1, SingleThreadEventExecutor (io.netty.util.concurrent)
execute:836, SingleThreadEventExecutor (io.netty.util.concurrent)
execute0:827, SingleThreadEventExecutor (io.netty.util.concurrent)
execute:817, SingleThreadEventExecutor (io.netty.util.concurrent)
safeExecute:1165, AbstractChannelHandlerContext (io.netty.channel)
write:972, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:934, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:984, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:1025, DefaultChannelPipeline (io.netty.channel)
writeAndFlush:306, AbstractChannel (io.netty.channel)
send:206, RedisConnection (org.redisson.client)
sendCommand:590, RedisExecutor (org.redisson.command)
lambda$execute$3:164, RedisExecutor (org.redisson.command)
uniWhenComplete:863, CompletableFuture (java.util.concurrent)
uniWhenCompleteStage:887, CompletableFuture (java.util.concurrent)
whenComplete:2325, CompletableFuture (java.util.concurrent)
execute:149, RedisExecutor (org.redisson.command)
async:526, CommandAsyncService (org.redisson.command)
readAsync:292, CommandAsyncService (org.redisson.command)
getAsync:140, RedissonBucket (org.redisson)
get:135, RedissonBucket (org.redisson)
testApp:59, AppTest (com.demo.redission)
invoke:104, DirectMethodHandleAccessor (jdk.internal.reflect)
invoke:577, Method (java.lang.reflect)
runTest:154, TestCase (junit.framework)
runBare:127, TestCase (junit.framework)
protect:106, TestResult$1 (junit.framework)
runProtected:124, TestResult (junit.framework)
run:109, TestResult (junit.framework)
run:118, TestCase (junit.framework)
doRun:116, TestRunner (junit.textui)
doRun:117, JUnit3IdeaTestRunner (com.intellij.junit3)
doRun:109, TestRunner (junit.textui)
startRunnerWithArgs:38, JUnit3IdeaTestRunner (com.intellij.junit3)
execute:38, IdeaTestRunner$Repeater$1 (com.intellij.rt.junit)
repeat:11, TestsRepeater (com.intellij.rt.execution.junit)
startRunnerWithArgs:35, IdeaTestRunner$Repeater (com.intellij.rt.junit)
prepareStreamsAndStart:235, JUnitStarter (com.intellij.rt.junit)
main:54, JUnitStarter (com.intellij.rt.junit)

ByteBuf 到ByteBuffer 转换

    public ByteBuffer[] nioBuffers(int maxCount, long maxBytes) {
...
ByteBuffer[] nioBuffers = NIO_BUFFERS.get(threadLocalMap);
Entry entry = flushedEntry;
while (isFlushedEntry(entry) && entry.msg instanceof ByteBuf) {
if (!entry.cancelled) {
ByteBuf buf = (ByteBuf) entry.msg;
final int readerIndex = buf.readerIndex();
final int readableBytes = buf.writerIndex() - readerIndex;

if (readableBytes > 0) {
nioBufferSize += readableBytes;
int count = entry.count;
if (count == -1) {
//noinspection ConstantValueVariableUse
entry.count = count = buf.nioBufferCount();
}
int neededSpace = min(maxCount, nioBufferCount + count);
if (neededSpace > nioBuffers.length) {
nioBuffers = expandNioBufferArray(nioBuffers, neededSpace, nioBufferCount);
NIO_BUFFERS.set(threadLocalMap, nioBuffers);
}
if (count == 1) {
ByteBuffer nioBuf = entry.buf;
if (nioBuf == null) {
// cache ByteBuffer as it may need to create a new ByteBuffer instance if its a
// derived buffer
entry.buf = nioBuf = buf.internalNioBuffer(readerIndex, readableBytes); // 转换
}
nioBuffers[nioBufferCount++] = nioBuf;
} else {
// The code exists in an extra method to ensure the method is not too big to inline as this
// branch is not very likely to get hit very frequently.
nioBufferCount = nioBuffers(entry, buf, nioBuffers, nioBufferCount, maxCount); // 转换nioBuffers
}
if (nioBufferCount >= maxCount) {
break;
}
}
}
entry = entry.next;
}
this.nioBufferCount = nioBufferCount;
this.nioBufferSize = nioBufferSize;

return nioBuffers;
}

写入ByteBuf 转换到ByteBuffer 的过程, 最后调用的是PooledByteBuf.internalNioBuffer 这个方法

internalNioBuffer:158, PooledByteBuf (io.netty.buffer)
_internalNioBuffer:194, PooledByteBuf (io.netty.buffer)
internalNioBuffer:207, PooledByteBuf (io.netty.buffer)
nioBuffers:447, ChannelOutboundBuffer (io.netty.channel)
doWrite:399, NioSocketChannel (io.netty.channel.socket.nio)
flush0:931, AbstractChannel$AbstractUnsafe (io.netty.channel)
flush0:354, AbstractNioChannel$AbstractNioUnsafe (io.netty.channel.nio)
flush:895, AbstractChannel$AbstractUnsafe (io.netty.channel)
flush:1372, DefaultChannelPipeline$HeadContext (io.netty.channel)
invokeFlush0:921, AbstractChannelHandlerContext (io.netty.channel)
invokeFlush:907, AbstractChannelHandlerContext (io.netty.channel)
flush:893, AbstractChannelHandlerContext (io.netty.channel)
flush:125, ChannelOutboundHandlerAdapter (io.netty.channel)
invokeFlush0:925, AbstractChannelHandlerContext (io.netty.channel)
invokeWriteAndFlush:941, AbstractChannelHandlerContext (io.netty.channel)
write:966, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:934, AbstractChannelHandlerContext (io.netty.channel)
write:83, CommandsQueue (org.redisson.client.handler)
invokeWrite0:879, AbstractChannelHandlerContext (io.netty.channel)
invokeWriteAndFlush:940, AbstractChannelHandlerContext (io.netty.channel)
run:1247, AbstractChannelHandlerContext$WriteTask (io.netty.channel)
runTask$$$capture:174, AbstractEventExecutor (io.netty.util.concurrent)
runTask:-1, AbstractEventExecutor (io.netty.util.concurrent)
- Async stack trace
addTask:-1, SingleThreadEventExecutor (io.netty.util.concurrent)
execute:836, SingleThreadEventExecutor (io.netty.util.concurrent)
execute0:827, SingleThreadEventExecutor (io.netty.util.concurrent)
execute:817, SingleThreadEventExecutor (io.netty.util.concurrent)
safeExecute:1165, AbstractChannelHandlerContext (io.netty.channel)
write:972, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:934, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:984, AbstractChannelHandlerContext (io.netty.channel)
writeAndFlush:1025, DefaultChannelPipeline (io.netty.channel)
writeAndFlush:306, AbstractChannel (io.netty.channel)
send:206, RedisConnection (org.redisson.client)
sync:215, RedisConnection (org.redisson.client)
sync:202, RedisConnection (org.redisson.client)
<init>:100, ClusterConnectionManager (org.redisson.cluster)
createConnectionManager:196, ConfigSupport (org.redisson.config)
<init>:68, Redisson (org.redisson)
create:109, Redisson (org.redisson)
main:24, App (com.demo.redission)

创建链接的过程:

createConnection:36, RedisConnectionHandler (org.redisson.client.handler)
channelRegistered:53, BaseConnectionHandler (org.redisson.client.handler)
invokeChannelRegistered:176, AbstractChannelHandlerContext (io.netty.channel)
invokeChannelRegistered:152, AbstractChannelHandlerContext (io.netty.channel) [2]
fireChannelRegistered:145, AbstractChannelHandlerContext (io.netty.channel)
channelRegistered:1383, DefaultChannelPipeline$HeadContext (io.netty.channel)
invokeChannelRegistered:172, AbstractChannelHandlerContext (io.netty.channel)
invokeChannelRegistered:152, AbstractChannelHandlerContext (io.netty.channel) [1]
fireChannelRegistered:815, DefaultChannelPipeline (io.netty.channel)
register0:517, AbstractChannel$AbstractUnsafe (io.netty.channel)
access$200:429, AbstractChannel$AbstractUnsafe (io.netty.channel)
run:486, AbstractChannel$AbstractUnsafe$1 (io.netty.channel)
runTask$$$capture:174, AbstractEventExecutor (io.netty.util.concurrent)
runTask:-1, AbstractEventExecutor (io.netty.util.concurrent)
- Async stack trace
addTask:-1, SingleThreadEventExecutor (io.netty.util.concurrent)
execute:836, SingleThreadEventExecutor (io.netty.util.concurrent)
execute0:827, SingleThreadEventExecutor (io.netty.util.concurrent)
execute:817, SingleThreadEventExecutor (io.netty.util.concurrent)
register:483, AbstractChannel$AbstractUnsafe (io.netty.channel)
register:89, SingleThreadEventLoop (io.netty.channel)
register:83, SingleThreadEventLoop (io.netty.channel)
register:86, MultithreadEventLoopGroup (io.netty.channel)
initAndRegister:323, AbstractBootstrap (io.netty.bootstrap)
doResolveAndConnect:155, Bootstrap (io.netty.bootstrap)
connect:139, Bootstrap (io.netty.bootstrap)
lambda$connectAsync$1:220, RedisClient (org.redisson.client)
uniComposeStage:1187, CompletableFuture (java.util.concurrent)
thenCompose:2309, CompletableFuture (java.util.concurrent)
connectAsync:218, RedisClient (org.redisson.client)
connect:189, ClientConnectionsEntry (org.redisson.connection)
connect:249, ConnectionPool (org.redisson.connection.pool)
createConnection:274, ConnectionPool (org.redisson.connection.pool)
lambda$createConnection$1:112, ConnectionPool (org.redisson.connection.pool)
uniAcceptNow:757, CompletableFuture (java.util.concurrent)
uniAcceptStage:735, CompletableFuture (java.util.concurrent)
thenAccept:2182, CompletableFuture (java.util.concurrent)
createConnection:110, ConnectionPool (org.redisson.connection.pool)
initConnections:92, ConnectionPool (org.redisson.connection.pool)
add:69, ConnectionPool (org.redisson.connection.pool)
add:34, MasterConnectionPool (org.redisson.connection.pool)
lambda$setupMasterEntry$1:139, MasterSlaveEntry (org.redisson.connection)
uniComposeStage:1187, CompletableFuture (java.util.concurrent)
thenCompose:2309, CompletableFuture (java.util.concurrent)
setupMasterEntry:122, MasterSlaveEntry (org.redisson.connection)
setupMasterEntry:117, MasterSlaveEntry (org.redisson.connection)
setupMasterEntry:112, MasterSlaveEntry (org.redisson.connection)
initSingleEntry:330, MasterSlaveConnectionManager (org.redisson.connection)
<init>:146, MasterSlaveConnectionManager (org.redisson.connection)
<init>:30, SingleConnectionManager (org.redisson.connection)
createConnectionManager:190, ConfigSupport (org.redisson.config)
<init>:68, Redisson (org.redisson)
create:109, Redisson (org.redisson)
testApp:58, AppTest (com.demo.redission)
invoke:104, DirectMethodHandleAccessor (jdk.internal.reflect)
invoke:577, Method (java.lang.reflect)
runTest:154, TestCase (junit.framework)
runBare:127, TestCase (junit.framework)
protect:106, TestResult$1 (junit.framework)
runProtected:124, TestResult (junit.framework)
run:109, TestResult (junit.framework)
run:118, TestCase (junit.framework)
doRun:116, TestRunner (junit.textui)
doRun:117, JUnit3IdeaTestRunner (com.intellij.junit3)
doRun:109, TestRunner (junit.textui)
startRunnerWithArgs:38, JUnit3IdeaTestRunner (com.intellij.junit3)
execute:38, IdeaTestRunner$Repeater$1 (com.intellij.rt.junit)
repeat:11, TestsRepeater (com.intellij.rt.execution.junit)
startRunnerWithArgs:35, IdeaTestRunner$Repeater (com.intellij.rt.junit)
prepareStreamsAndStart:235, JUnitStarter (com.intellij.rt.junit)
main:54, JUnitStarter (com.intellij.rt.junit)

Bootstrap使用:

createBootstrap:122, RedisClient (org.redisson.client)
<init>:115, RedisClient (org.redisson.client)
create:77, RedisClient (org.redisson.client)
createClient:425, MasterSlaveConnectionManager (org.redisson.connection)
createClient:412, MasterSlaveConnectionManager (org.redisson.connection)
setupMasterEntry:116, MasterSlaveEntry (org.redisson.connection)
setupMasterEntry:112, MasterSlaveEntry (org.redisson.connection)
initSingleEntry:330, MasterSlaveConnectionManager (org.redisson.connection)
<init>:146, MasterSlaveConnectionManager (org.redisson.connection)
<init>:30, SingleConnectionManager (org.redisson.connection)
createConnectionManager:190, ConfigSupport (org.redisson.config)
<init>:68, Redisson (org.redisson)
create:109, Redisson (org.redisson)
testApp:58, AppTest (com.demo.redission)
invokeVirtual:-1, LambdaForm$DMH/0x0000000800c0c400 (java.lang.invoke)
invoke:-1, LambdaForm$MH/0x0000000800c0d800 (java.lang.invoke)
invokeExact_MT:-1, Invokers$Holder (java.lang.invoke)
invokeImpl:154, DirectMethodHandleAccessor (jdk.internal.reflect)
invoke:104, DirectMethodHandleAccessor (jdk.internal.reflect)
invoke:577, Method (java.lang.reflect)
runTest:154, TestCase (junit.framework)
runBare:127, TestCase (junit.framework)
protect:106, TestResult$1 (junit.framework)
runProtected:124, TestResult (junit.framework)
run:109, TestResult (junit.framework)
run:118, TestCase (junit.framework)
runTest:208, TestSuite (junit.framework)
run:203, TestSuite (junit.framework)
doRun:116, TestRunner (junit.textui)
doRun:117, JUnit3IdeaTestRunner (com.intellij.junit3)
doRun:109, TestRunner (junit.textui)
startRunnerWithArgs:38, JUnit3IdeaTestRunner (com.intellij.junit3)
execute:38, IdeaTestRunner$Repeater$1 (com.intellij.rt.junit)
repeat:11, TestsRepeater (com.intellij.rt.execution.junit)
startRunnerWithArgs:35, IdeaTestRunner$Repeater (com.intellij.rt.junit)
prepareStreamsAndStart:235, JUnitStarter (com.intellij.rt.junit)
main:54, JUnitStarter (com.intellij.rt.junit)

future 使用:

handleResult:547, RedisExecutor (org.redisson.command)
checkAttemptPromise:524, RedisExecutor (org.redisson.command)
lambda$execute$4:176, RedisExecutor (org.redisson.command)
accept:-1, RedisExecutor$$Lambda$85/0x0000000800d64c28 (org.redisson.command)
uniWhenComplete:863, CompletableFuture (java.util.concurrent)
tryFire:841, CompletableFuture$UniWhenComplete (java.util.concurrent)
postComplete:510, CompletableFuture (java.util.concurrent)
complete:2147, CompletableFuture (java.util.concurrent)
completeResponse:467, CommandDecoder (org.redisson.client.handler)
handleResult:461, CommandDecoder (org.redisson.client.handler)
decode:340, CommandDecoder (org.redisson.client.handler)
decodeCommand:205, CommandDecoder (org.redisson.client.handler)
decode:144, CommandDecoder (org.redisson.client.handler)
decode:120, CommandDecoder (org.redisson.client.handler)
decodeRemovalReentryProtection:529, ByteToMessageDecoder (io.netty.handler.codec)
callDecode:366, ReplayingDecoder (io.netty.handler.codec)
channelRead:290, ByteToMessageDecoder (io.netty.handler.codec)
invokeChannelRead:444, AbstractChannelHandlerContext (io.netty.channel)
invokeChannelRead:420, AbstractChannelHandlerContext (io.netty.channel)
fireChannelRead:412, AbstractChannelHandlerContext (io.netty.channel)
channelRead:1410, DefaultChannelPipeline$HeadContext (io.netty.channel)
invokeChannelRead:440, AbstractChannelHandlerContext (io.netty.channel)
invokeChannelRead:420, AbstractChannelHandlerContext (io.netty.channel)
fireChannelRead:919, DefaultChannelPipeline (io.netty.channel)
read:166, AbstractNioByteChannel$NioByteUnsafe (io.netty.channel.nio)
processSelectedKey:788, NioEventLoop (io.netty.channel.nio)
processSelectedKeysOptimized:724, NioEventLoop (io.netty.channel.nio)
processSelectedKeys:650, NioEventLoop (io.netty.channel.nio)
run:562, NioEventLoop (io.netty.channel.nio)
run:997, SingleThreadEventExecutor$4 (io.netty.util.concurrent)
run:74, ThreadExecutorMap$2 (io.netty.util.internal)
run:30, FastThreadLocalRunnable (io.netty.util.concurrent)
run:833, Thread (java.lang)

redis 解码

/home/dai/.m2/repository/org/redisson/redisson/3.19.0/redisson-3.19.0-sources.jar!/org/redisson/client/handler/RedisChannelInitializer.java
@Override
protected void initChannel(Channel ch) throws Exception {
initSsl(config, ch);

if (type == Type.PLAIN) {
ch.pipeline().addLast(new RedisConnectionHandler(redisClient));
} else {
ch.pipeline().addLast(new RedisPubSubConnectionHandler(redisClient));
}

ch.pipeline().addLast(
connectionWatchdog,
CommandEncoder.INSTANCE,
CommandBatchEncoder.INSTANCE);

if (type == Type.PLAIN) {
ch.pipeline().addLast(new CommandsQueue());
} else {
ch.pipeline().addLast(new CommandsQueuePubSub());
}

if (pingConnectionHandler != null) {
ch.pipeline().addLast(pingConnectionHandler);
}

if (type == Type.PLAIN) {
ch.pipeline().addLast(new CommandDecoder(config.getAddress().getScheme())); // 解码
} else {
ch.pipeline().addLast(new CommandPubSubDecoder(config));
}

ch.pipeline().addLast(new ErrorsLoggingHandler());

config.getNettyHook().afterChannelInitialization(ch);
}

redission future 回调:

handleResult:547, RedisExecutor (org.redisson.command)
checkAttemptPromise:524, RedisExecutor (org.redisson.command)
lambda$execute$4:176, RedisExecutor (org.redisson.command)
accept:-1, RedisExecutor$$Lambda$86/0x0000000800d64c18 (org.redisson.command)
uniWhenComplete:863, CompletableFuture (java.util.concurrent)
tryFire:841, CompletableFuture$UniWhenComplete (java.util.concurrent)
postComplete:510, CompletableFuture (java.util.concurrent)
complete:2147, CompletableFuture (java.util.concurrent)
completeResponse:467, CommandDecoder (org.redisson.client.handler)
handleResult:461, CommandDecoder (org.redisson.client.handler)
decode:392, CommandDecoder (org.redisson.client.handler)
decodeCommand:205, CommandDecoder (org.redisson.client.handler)
decode:144, CommandDecoder (org.redisson.client.handler)
decode:120, CommandDecoder (org.redisson.client.handler)
decodeRemovalReentryProtection:529, ByteToMessageDecoder (io.netty.handler.codec)
callDecode:366, ReplayingDecoder (io.netty.handler.codec)
channelRead:290, ByteToMessageDecoder (io.netty.handler.codec)
invokeChannelRead:444, AbstractChannelHandlerContext (io.netty.channel)
invokeChannelRead:420, AbstractChannelHandlerContext (io.netty.channel)
fireChannelRead:412, AbstractChannelHandlerContext (io.netty.channel)
channelRead:1410, DefaultChannelPipeline$HeadContext (io.netty.channel)
invokeChannelRead:440, AbstractChannelHandlerContext (io.netty.channel)
invokeChannelRead:420, AbstractChannelHandlerContext (io.netty.channel)
fireChannelRead:919, DefaultChannelPipeline (io.netty.channel)
read:166, AbstractNioByteChannel$NioByteUnsafe (io.netty.channel.nio)
processSelectedKey:788, NioEventLoop (io.netty.channel.nio)
processSelectedKeysOptimized:724, NioEventLoop (io.netty.channel.nio)
processSelectedKeys:650, NioEventLoop (io.netty.channel.nio)
run:562, NioEventLoop (io.netty.channel.nio)
run:997, SingleThreadEventExecutor$4 (io.netty.util.concurrent)
run:74, ThreadExecutorMap$2 (io.netty.util.internal)
run:30, FastThreadLocalRunnable (io.netty.util.concurrent)
run:833, Thread (java.lang)

相关阅读

cms gc

· One min read

背景

了解java 的cms gc 算法

路径

src\hotspot\share\gc\serial\defNewGeneration.cpp
// Ignores "ref" and calls allocate().
oop Generation::promote(oop obj, size_t obj_size) {
assert(obj_size == obj->size(), "bad obj_size passed in");

#ifndef PRODUCT
if (GenCollectedHeap::heap()->promotion_should_fail()) {
return NULL;
}
#endif // #ifndef PRODUCT

HeapWord* result = allocate(obj_size, false);
if (result != NULL) {
Copy::aligned_disjoint_words(cast_from_oop<HeapWord*>(obj), result, obj_size);
return cast_to_oop(result);
} else {
GenCollectedHeap* gch = GenCollectedHeap::heap();
return gch->handle_failed_promotion(this, obj, obj_size);
}
}

相关阅读

java基础

· One min read
  • 查看默认选项
$ java -XX:+PrintCommandLineFlags -version 
-XX:ConcGCThreads=3 -XX:G1ConcRefinementThreads=10 -XX:GCDrainStackTargetSize=64 -XX:InitialHeapSize=525168320 -XX:MarkStackSize=4194304 -XX:MaxHeapSize=8402693120 -XX:MinHeapSize=6815736 -XX:+PrintCommandLineFlags -XX:ReservedCodeCacheSize=251658240 -XX:+SegmentedCodeCache -XX:+UseCompressedClassPointers -XX:+UseCompressedOops -XX:+UseG1GC
openjdk version "17.0.5" 2022-10-18
OpenJDK Runtime Environment (build 17.0.5+8-Ubuntu-2ubuntu122.04)
OpenJDK 64-Bit Server VM (build 17.0.5+8-Ubuntu-2ubuntu122.04, mixed mode, sharing)

java io

java 的io分字节流 : 字节流都是 inputStream/outPutStream 字符流: reader/writer

方向:

类名方法:读、写字节、字符
inputStreamreadbyte
outputStreamwritebyte
readerreadchar
writerwritechar

相关阅读

java arraycopy

· 16 min read

背景

了解arraycopy的实现,是浅拷贝还是深拷贝

arrays

在了解arraycopy之前,先了解arrays

jls里面有很详细的描述

In the Java programming language, arrays are objects (§4.3.1), are dynamically created
An array object contains a number of variables. The number of variables may be zero, in which case the array is said to be empty. The variables contained in an array have no names; instead they are referenced by array access expressions that use non-negative integer index values. These variables are called the components of the array. If an array has n components, we say n is the length of the array; the components of the array are referenced using integer indices from 0 to n - 1, inclusive.

arrays:

  • 类型:Object
  • arrays对象持有的是变量variables

变量 variables

A variable is a storage location and has an associated type, sometimes called its compile-time type, that is either a primitive type (§4.2) or a reference type (§4.3).

A variable's value is changed by an assignment (§15.26) or by a prefix or postfix ++ (increment) or -- (decrement) operator (§15.14.2, §15.14.3, §15.15.1, §15.15.2).

variable 由两部分组成:

  • type
    • primitive type
    • reference type
  • value
    • primitive value
    • reference value
4.3.1 Objects
An object is a class instance or an array.
The reference values (often just references) are pointers to these objects, and a
special null reference, which refers to no object.

jni 实现

src\hotspot\share\oops\objArrayKlass.cpp

void ObjArrayKlass::copy_array(arrayOop s, int src_pos, arrayOop d,
int dst_pos, int length, TRAPS) {
assert(s->is_objArray(), "must be obj array");

if (!d->is_objArray()) {
ResourceMark rm(THREAD);
stringStream ss;
if (d->is_typeArray()) {
ss.print("arraycopy: type mismatch: can not copy object array[] into %s[]",
type2name_tab[ArrayKlass::cast(d->klass())->element_type()]);
} else {
ss.print("arraycopy: destination type %s is not an array", d->klass()->external_name());
}
THROW_MSG(vmSymbols::java_lang_ArrayStoreException(), ss.as_string());
}

// Check is all offsets and lengths are non negative
if (src_pos < 0 || dst_pos < 0 || length < 0) {
// Pass specific exception reason.
ResourceMark rm(THREAD);
stringStream ss;
if (src_pos < 0) {
ss.print("arraycopy: source index %d out of bounds for object array[%d]",
src_pos, s->length());
} else if (dst_pos < 0) {
ss.print("arraycopy: destination index %d out of bounds for object array[%d]",
dst_pos, d->length());
} else {
ss.print("arraycopy: length %d is negative", length);
}
THROW_MSG(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), ss.as_string());
}
// Check if the ranges are valid
if ((((unsigned int) length + (unsigned int) src_pos) > (unsigned int) s->length()) ||
(((unsigned int) length + (unsigned int) dst_pos) > (unsigned int) d->length())) {
// Pass specific exception reason.
ResourceMark rm(THREAD);
stringStream ss;
if (((unsigned int) length + (unsigned int) src_pos) > (unsigned int) s->length()) {
ss.print("arraycopy: last source index %u out of bounds for object array[%d]",
(unsigned int) length + (unsigned int) src_pos, s->length());
} else {
ss.print("arraycopy: last destination index %u out of bounds for object array[%d]",
(unsigned int) length + (unsigned int) dst_pos, d->length());
}
THROW_MSG(vmSymbols::java_lang_ArrayIndexOutOfBoundsException(), ss.as_string());
}

// Special case. Boundary cases must be checked first
// This allows the following call: copy_array(s, s.length(), d.length(), 0).
// This is correct, since the position is supposed to be an 'in between point', i.e., s.length(),
// points to the right of the last element.
if (length==0) {
return;
}
if (UseCompressedOops) {
size_t src_offset = (size_t) objArrayOopDesc::obj_at_offset<narrowOop>(src_pos);
size_t dst_offset = (size_t) objArrayOopDesc::obj_at_offset<narrowOop>(dst_pos);
assert(arrayOopDesc::obj_offset_to_raw<narrowOop>(s, src_offset, NULL) ==
objArrayOop(s)->obj_at_addr<narrowOop>(src_pos), "sanity");
assert(arrayOopDesc::obj_offset_to_raw<narrowOop>(d, dst_offset, NULL) ==
objArrayOop(d)->obj_at_addr<narrowOop>(dst_pos), "sanity");
do_copy(s, src_offset, d, dst_offset, length, CHECK);
} else {
size_t src_offset = (size_t) objArrayOopDesc::obj_at_offset<oop>(src_pos);
size_t dst_offset = (size_t) objArrayOopDesc::obj_at_offset<oop>(dst_pos);
assert(arrayOopDesc::obj_offset_to_raw<oop>(s, src_offset, NULL) ==
objArrayOop(s)->obj_at_addr<oop>(src_pos), "sanity");
assert(arrayOopDesc::obj_offset_to_raw<oop>(d, dst_offset, NULL) ==
objArrayOop(d)->obj_at_addr<oop>(dst_pos), "sanity");
do_copy(s, src_offset, d, dst_offset, length, CHECK);
}
}
(gdb) bt
#0 Copy::conjoint_oops_atomic (count=6, to=0x62a434ee8, from=0x62a42f220) at /home/dai/jdk/src/hotspot/share/utilities/copy.hpp:164
#1 AccessInternal::arraycopy_conjoint_oops (src=0x62a42f220, dst=0x62a434ee8, length=6) at /home/dai/jdk/src/hotspot/share/oops/accessBackend.cpp:94
#2 0x00007ffff7067317 in RawAccessBarrierArrayCopy::arraycopy<18112614ul, narrowOop> (length=6, dst_raw=<optimized out>, dst_offset_in_bytes=0, dst_obj=..., src_raw=0x62a42f220, src_offset_in_bytes=0,
src_obj=...) at /home/dai/jdk/src/hotspot/share/oops/accessBackend.inline.hpp:270
#3 RawAccessBarrier<18112614ul>::arraycopy<narrowOop> (length=6, dst_raw=0x62a434ee8, dst_offset_in_bytes=0, dst_obj=..., src_raw=<optimized out>, src_offset_in_bytes=0, src_obj=...)
at /home/dai/jdk/src/hotspot/share/oops/accessBackend.inline.hpp:344
#4 RawAccessBarrier<18112614ul>::oop_arraycopy<narrowOop> (length=6, dst_raw=0x62a434ee8, dst_offset_in_bytes=0, dst_obj=..., src_raw=<optimized out>, src_offset_in_bytes=0, src_obj=...)
at /home/dai/jdk/src/hotspot/share/oops/accessBackend.inline.hpp:128
#5 ModRefBarrierSet::AccessBarrier<18112614ul, G1BarrierSet>::oop_arraycopy_in_heap<narrowOop> (length=6, dst_raw=0x62a434ee8, dst_offset_in_bytes=<optimized out>, dst_obj=...,
src_raw=<optimized out>, src_offset_in_bytes=<optimized out>, src_obj=...) at /home/dai/jdk/src/hotspot/share/gc/shared/modRefBarrierSet.inline.hpp:108
#6 AccessInternal::PostRuntimeDispatch<G1BarrierSet::AccessBarrier<18112614ul, G1BarrierSet>, (AccessInternal::BarrierType)8, 18112614ul>::oop_access_barrier<HeapWordImpl*> (src_obj=...,
src_offset_in_bytes=<optimized out>, src_raw=<optimized out>, dst_obj=..., dst_offset_in_bytes=<optimized out>, dst_raw=<optimized out>, length=6)
at /home/dai/jdk/src/hotspot/share/oops/access.inline.hpp:142
#7 0x00007ffff7063f43 in AccessInternal::RuntimeDispatch<18112582ul, HeapWordImpl*, (AccessInternal::BarrierType)8>::arraycopy_init (src_obj=..., src_offset_in_bytes=16, src_raw=0x0, dst_obj=...,
dst_offset_in_bytes=<optimized out>, dst_raw=<optimized out>, length=<optimized out>) at /home/dai/jdk/src/hotspot/share/oops/access.inline.hpp:339
#8 0x00007ffff7061a0e in AccessInternal::RuntimeDispatch<18112582ul, HeapWordImpl*, (AccessInternal::BarrierType)8>::arraycopy (length=<optimized out>, dst_raw=<optimized out>,
dst_offset_in_bytes=<optimized out>, dst_obj=..., src_raw=<optimized out>, src_offset_in_bytes=<optimized out>, src_obj=...) at /home/dai/jdk/src/hotspot/share/oops/accessBackend.hpp:554
#9 AccessInternal::PreRuntimeDispatch::arraycopy<18112582ul, HeapWordImpl*> (length=<optimized out>, dst_raw=<optimized out>, dst_offset_in_bytes=<optimized out>, dst_obj=..., src_raw=<optimized out>,
src_offset_in_bytes=<optimized out>, src_obj=...) at /home/dai/jdk/src/hotspot/share/oops/accessBackend.hpp:907
#10 AccessInternal::arraycopy_reduce_types<18112580ul> (length=<optimized out>, dst_raw=<optimized out>, dst_offset_in_bytes=<optimized out>, dst_obj=..., src_raw=<optimized out>,
src_offset_in_bytes=<optimized out>, src_obj=...) at /home/dai/jdk/src/hotspot/share/oops/accessBackend.hpp:1054
#11 AccessInternal::arraycopy<18087940ul, HeapWordImpl*> (length=<optimized out>, dst_raw=<optimized out>, dst_offset_in_bytes=<optimized out>, dst_obj=..., src_raw=<optimized out>,
src_offset_in_bytes=<optimized out>, src_obj=...) at /home/dai/jdk/src/hotspot/share/oops/accessBackend.hpp:1208
#12 Access<18087936ul>::oop_arraycopy<HeapWordImpl*> (length=<optimized out>, dst_raw=<optimized out>, dst_offset_in_bytes=<optimized out>, dst_obj=..., src_raw=<optimized out>,
src_offset_in_bytes=<optimized out>, src_obj=...) at /home/dai/jdk/src/hotspot/share/oops/access.hpp:137
#13 ArrayAccess<16777216ul>::oop_arraycopy (length=<optimized out>, dst_offset_in_bytes=<optimized out>, dst_obj=..., src_offset_in_bytes=<optimized out>, src_obj=...)
at /home/dai/jdk/src/hotspot/share/oops/access.hpp:323
#14 ObjArrayKlass::do_copy (this=this@entry=0x800058a00, s=..., src_offset=src_offset@entry=16, d=..., dst_offset=dst_offset@entry=16, length=length@entry=6, __the_thread__=0x7ffff0028f20)
at /home/dai/jdk/src/hotspot/share/oops/objArrayKlass.cpp:213
#15 0x00007ffff7062e33 in ObjArrayKlass::copy_array (this=0x800058a00, s=..., src_pos=<optimized out>, d=..., dst_pos=<optimized out>, length=6, __the_thread__=0x7ffff0028f20)
at /home/dai/jdk/src/hotspot/share/oops/oopsHierarchy.hpp:85
#16 0x00007ffff6b2d75f in JVM_ArrayCopy (env=<optimized out>, ignored=<optimized out>, src=<optimized out>, src_pos=0, dst=<optimized out>, dst_pos=0, length=6)
at /home/dai/jdk/src/hotspot/share/prims/jvm.cpp:298

x86的汇编代码如下src/hotspot/os_cpu/linux_x86/linux_x86_64.S

        # Support for void Copy::arrayof_conjoint_jlongs(jlong* from,
# jlong* to,
# size_t count)
# Equivalent to
# conjoint_jlongs_atomic
# arrayof_conjoint_oops
# conjoint_oops_atomic
#
# rdi - from
# rsi - to
# rdx - count, treated as ssize_t
#
.p2align 4,,15
.type _Copy_arrayof_conjoint_jlongs,@function
.type _Copy_conjoint_jlongs_atomic,@function
_Copy_arrayof_conjoint_jlongs:
_Copy_conjoint_jlongs_atomic:
cmpq %rdi,%rsi
leaq -8(%rdi,%rdx,8),%rax # from + count*8 - 8
jbe acl_CopyRight
cmpq %rax,%rsi
jbe acl_CopyLeft
acl_CopyRight:
leaq -8(%rsi,%rdx,8),%rcx # to + count*8 - 8
negq %rdx
jmp 3f
1: movq 8(%rax,%rdx,8),%rsi
movq %rsi,8(%rcx,%rdx,8)
addq $1,%rdx
jnz 1b
ret
.p2align 4,,15
2: movq -24(%rax,%rdx,8),%rsi
movq %rsi,-24(%rcx,%rdx,8)
movq -16(%rax,%rdx,8),%rsi
movq %rsi,-16(%rcx,%rdx,8)
movq -8(%rax,%rdx,8),%rsi
movq %rsi,-8(%rcx,%rdx,8)
movq (%rax,%rdx,8),%rsi
movq %rsi,(%rcx,%rdx,8)
3: addq $4,%rdx
jle 2b
subq $4,%rdx
jl 1b
ret
4: movq -8(%rdi,%rdx,8),%rcx
movq %rcx,-8(%rsi,%rdx,8)
subq $1,%rdx
jnz 4b
ret
.p2align 4,,15
5: movq 24(%rdi,%rdx,8),%rcx
movq %rcx,24(%rsi,%rdx,8)
movq 16(%rdi,%rdx,8),%rcx
movq %rcx,16(%rsi,%rdx,8)
movq 8(%rdi,%rdx,8),%rcx
movq %rcx,8(%rsi,%rdx,8)
movq (%rdi,%rdx,8),%rcx
movq %rcx,(%rsi,%rdx,8)
acl_CopyLeft:
subq $4,%rdx
jge 5b
addq $4,%rdx
jg 4b
ret

这里的文件jz jne 是相对段的偏移 , 然后试试编译成字节码之后看效果

这里的as是将汇编代码编译成二进制代码

$ as src/hotspot/os_cpu/linux_x86/linux_x86_64.S
$ objdump -S a.out

a.out: file format elf64-x86-64


Disassembly of section .text:

0000000000000000 <SpinPause>:
0: f3 90 pause
2: 48 c7 c0 01 00 00 00 mov $0x1,%rax
9: c3 ret
a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)

0000000000000010 <_Copy_arrayof_conjoint_bytes>:
10: 49 89 d0 mov %rdx,%r8
13: 48 c1 ea 03 shr $0x3,%rdx
17: 48 39 fe cmp %rdi,%rsi
1a: 4a 8d 44 07 ff lea -0x1(%rdi,%r8,1),%rax
1f: 76 09 jbe 2a <acb_CopyRight>
21: 48 39 c6 cmp %rax,%rsi
24: 0f 86 9e 00 00 00 jbe c8 <acb_CopyLeft>

000000000000002a <acb_CopyRight>:
2a: 48 8d 44 d7 f8 lea -0x8(%rdi,%rdx,8),%rax
2f: 48 8d 4c d6 f8 lea -0x8(%rsi,%rdx,8),%rcx
34: 48 f7 da neg %rdx
37: eb 7d jmp b6 <acb_CopyRight+0x8c>
39: 0f 1f 80 00 00 00 00 nopl 0x0(%rax)
40: 48 8b 74 d0 08 mov 0x8(%rax,%rdx,8),%rsi
45: 48 89 74 d1 08 mov %rsi,0x8(%rcx,%rdx,8)
4a: 48 83 c2 01 add $0x1,%rdx
4e: 75 f0 jne 40 <acb_CopyRight+0x16>
50: 49 f7 c0 04 00 00 00 test $0x4,%r8
57: 74 0e je 67 <acb_CopyRight+0x3d>
59: 8b 70 08 mov 0x8(%rax),%esi
5c: 89 71 08 mov %esi,0x8(%rcx)
5f: 48 83 c0 04 add $0x4,%rax
63: 48 83 c1 04 add $0x4,%rcx
67: 49 f7 c0 02 00 00 00 test $0x2,%r8
6e: 74 0c je 7c <acb_CopyRight+0x52>
70: 66 8b 70 08 mov 0x8(%rax),%si
74: 66 89 71 08 mov %si,0x8(%rcx)
78: 48 83 c1 02 add $0x2,%rcx
7c: 49 f7 c0 01 00 00 00 test $0x1,%r8
83: 74 08 je 8d <acb_CopyRight+0x63>
85: 42 8a 44 07 ff mov -0x1(%rdi,%r8,1),%al
8a: 88 41 08 mov %al,0x8(%rcx)
8d: c3 ret
8e: 66 90 xchg %ax,%ax
90: 48 8b 74 d0 e8 mov -0x18(%rax,%rdx,8),%rsi
95: 48 89 74 d1 e8 mov %rsi,-0x18(%rcx,%rdx,8)
9a: 48 8b 74 d0 f0 mov -0x10(%rax,%rdx,8),%rsi
9f: 48 89 74 d1 f0 mov %rsi,-0x10(%rcx,%rdx,8)
a4: 48 8b 74 d0 f8 mov -0x8(%rax,%rdx,8),%rsi
a9: 48 89 74 d1 f8 mov %rsi,-0x8(%rcx,%rdx,8)
ae: 48 8b 34 d0 mov (%rax,%rdx,8),%rsi
b2: 48 89 34 d1 mov %rsi,(%rcx,%rdx,8)
b6: 48 83 c2 04 add $0x4,%rdx
ba: 7e d4 jle 90 <acb_CopyRight+0x66>
bc: 48 83 ea 04 sub $0x4,%rdx
c0: 0f 8c 7a ff ff ff jl 40 <acb_CopyRight+0x16>
c6: eb 88 jmp 50 <acb_CopyRight+0x26>

00000000000000c8 <acb_CopyLeft>:
c8: 49 f7 c0 01 00 00 00 test $0x1,%r8
cf: 74 0e je df <acb_CopyLeft+0x17>
d1: 42 8a 4c 07 ff mov -0x1(%rdi,%r8,1),%cl
d6: 42 88 4c 06 ff mov %cl,-0x1(%rsi,%r8,1)
db: 49 83 e8 01 sub $0x1,%r8
df: 49 f7 c0 02 00 00 00 test $0x2,%r8
e6: 74 0c je f4 <acb_CopyLeft+0x2c>
e8: 66 42 8b 4c 07 fe mov -0x2(%rdi,%r8,1),%cx
ee: 66 42 89 4c 06 fe mov %cx,-0x2(%rsi,%r8,1)
f4: 49 f7 c0 04 00 00 00 test $0x4,%r8
fb: 74 59 je 156 <acb_CopyLeft+0x8e>
fd: 8b 0c d7 mov (%rdi,%rdx,8),%ecx
100: 89 0c d6 mov %ecx,(%rsi,%rdx,8)
103: eb 51 jmp 156 <acb_CopyLeft+0x8e>
105: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1)
10c: 00 00 00 00
110: 48 8b 4c d7 f8 mov -0x8(%rdi,%rdx,8),%rcx
115: 48 89 4c d6 f8 mov %rcx,-0x8(%rsi,%rdx,8)
11a: 48 83 ea 01 sub $0x1,%rdx
11e: 75 f0 jne 110 <acb_CopyLeft+0x48>
120: c3 ret
121: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1)
128: 00 00 00 00
12c: 0f 1f 40 00 nopl 0x0(%rax)
130: 48 8b 4c d7 18 mov 0x18(%rdi,%rdx,8),%rcx
135: 48 89 4c d6 18 mov %rcx,0x18(%rsi,%rdx,8)
13a: 48 8b 4c d7 10 mov 0x10(%rdi,%rdx,8),%rcx
13f: 48 89 4c d6 10 mov %rcx,0x10(%rsi,%rdx,8)
144: 48 8b 4c d7 08 mov 0x8(%rdi,%rdx,8),%rcx
149: 48 89 4c d6 08 mov %rcx,0x8(%rsi,%rdx,8)
14e: 48 8b 0c d7 mov (%rdi,%rdx,8),%rcx
152: 48 89 0c d6 mov %rcx,(%rsi,%rdx,8)
156: 48 83 ea 04 sub $0x4,%rdx
15a: 7d d4 jge 130 <acb_CopyLeft+0x68>
15c: 48 83 c2 04 add $0x4,%rdx
160: 7f ae jg 110 <acb_CopyLeft+0x48>
162: c3 ret
163: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1)
16a: 00 00 00 00
16e: 66 90 xchg %ax,%ax

0000000000000170 <_Copy_arrayof_conjoint_jshorts>:
170: 49 89 d0 mov %rdx,%r8
173: 48 c1 ea 02 shr $0x2,%rdx
177: 48 39 fe cmp %rdi,%rsi
17a: 4a 8d 44 47 fe lea -0x2(%rdi,%r8,2),%rax
17f: 76 05 jbe 186 <acs_CopyRight>
181: 48 39 c6 cmp %rax,%rsi
184: 76 7e jbe 204 <acs_CopyLeft>

0000000000000186 <acs_CopyRight>:
186: 48 8d 44 d7 f8 lea -0x8(%rdi,%rdx,8),%rax
18b: 48 8d 4c d6 f8 lea -0x8(%rsi,%rdx,8),%rcx
190: 48 f7 da neg %rdx
193: eb 61 jmp 1f6 <acs_CopyRight+0x70>
195: 48 8b 74 d0 08 mov 0x8(%rax,%rdx,8),%rsi
19a: 48 89 74 d1 08 mov %rsi,0x8(%rcx,%rdx,8)
19f: 48 83 c2 01 add $0x1,%rdx
1a3: 75 f0 jne 195 <acs_CopyRight+0xf>
1a5: 49 f7 c0 02 00 00 00 test $0x2,%r8
1ac: 74 0a je 1b8 <acs_CopyRight+0x32>
1ae: 8b 70 08 mov 0x8(%rax),%esi
1b1: 89 71 08 mov %esi,0x8(%rcx)
1b4: 48 83 c1 04 add $0x4,%rcx
1b8: 49 f7 c0 01 00 00 00 test $0x1,%r8
1bf: 74 0a je 1cb <acs_CopyRight+0x45>
1c1: 66 42 8b 74 47 fe mov -0x2(%rdi,%r8,2),%si
1c7: 66 89 71 08 mov %si,0x8(%rcx)
1cb: c3 ret
1cc: 0f 1f 40 00 nopl 0x0(%rax)
1d0: 48 8b 74 d0 e8 mov -0x18(%rax,%rdx,8),%rsi
1d5: 48 89 74 d1 e8 mov %rsi,-0x18(%rcx,%rdx,8)
1da: 48 8b 74 d0 f0 mov -0x10(%rax,%rdx,8),%rsi
1df: 48 89 74 d1 f0 mov %rsi,-0x10(%rcx,%rdx,8)
1e4: 48 8b 74 d0 f8 mov -0x8(%rax,%rdx,8),%rsi
1e9: 48 89 74 d1 f8 mov %rsi,-0x8(%rcx,%rdx,8)
1ee: 48 8b 34 d0 mov (%rax,%rdx,8),%rsi
1f2: 48 89 34 d1 mov %rsi,(%rcx,%rdx,8)
1f6: 48 83 c2 04 add $0x4,%rdx
1fa: 7e d4 jle 1d0 <acs_CopyRight+0x4a>
1fc: 48 83 ea 04 sub $0x4,%rdx
200: 7c 93 jl 195 <acs_CopyRight+0xf>
202: eb a1 jmp 1a5 <acs_CopyRight+0x1f>

0000000000000204 <acs_CopyLeft>:
204: 49 f7 c0 01 00 00 00 test $0x1,%r8
20b: 74 0c je 219 <acs_CopyLeft+0x15>
20d: 66 42 8b 4c 47 fe mov -0x2(%rdi,%r8,2),%cx
213: 66 42 89 4c 46 fe mov %cx,-0x2(%rsi,%r8,2)
219: 49 f7 c0 02 00 00 00 test $0x2,%r8
220: 74 44 je 266 <acs_CopyLeft+0x62>
222: 8b 0c d7 mov (%rdi,%rdx,8),%ecx
225: 89 0c d6 mov %ecx,(%rsi,%rdx,8)
228: eb 3c jmp 266 <acs_CopyLeft+0x62>
22a: 48 8b 4c d7 f8 mov -0x8(%rdi,%rdx,8),%rcx
22f: 48 89 4c d6 f8 mov %rcx,-0x8(%rsi,%rdx,8)
234: 48 83 ea 01 sub $0x1,%rdx
238: 75 f0 jne 22a <acs_CopyLeft+0x26>
23a: c3 ret
23b: 0f 1f 44 00 00 nopl 0x0(%rax,%rax,1)
240: 48 8b 4c d7 18 mov 0x18(%rdi,%rdx,8),%rcx
245: 48 89 4c d6 18 mov %rcx,0x18(%rsi,%rdx,8)
24a: 48 8b 4c d7 10 mov 0x10(%rdi,%rdx,8),%rcx
24f: 48 89 4c d6 10 mov %rcx,0x10(%rsi,%rdx,8)
254: 48 8b 4c d7 08 mov 0x8(%rdi,%rdx,8),%rcx
259: 48 89 4c d6 08 mov %rcx,0x8(%rsi,%rdx,8)
25e: 48 8b 0c d7 mov (%rdi,%rdx,8),%rcx
262: 48 89 0c d6 mov %rcx,(%rsi,%rdx,8)
266: 48 83 ea 04 sub $0x4,%rdx
26a: 7d d4 jge 240 <acs_CopyLeft+0x3c>
26c: 48 83 c2 04 add $0x4,%rdx
270: 7f b8 jg 22a <acs_CopyLeft+0x26>
272: c3 ret
273: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1)
27a: 00 00 00 00
27e: 66 90 xchg %ax,%ax

0000000000000280 <_Copy_arrayof_conjoint_jints>:
280: 49 89 d0 mov %rdx,%r8
283: 48 d1 ea shr %rdx
286: 48 39 fe cmp %rdi,%rsi
289: 4a 8d 44 87 fc lea -0x4(%rdi,%r8,4),%rax
28e: 76 05 jbe 295 <aci_CopyRight>
290: 48 39 c6 cmp %rax,%rsi
293: 76 6f jbe 304 <aci_CopyLeft>

0000000000000295 <aci_CopyRight>:
295: 48 8d 44 d7 f8 lea -0x8(%rdi,%rdx,8),%rax
29a: 48 8d 4c d6 f8 lea -0x8(%rsi,%rdx,8),%rcx
29f: 48 f7 da neg %rdx
2a2: eb 52 jmp 2f6 <aci_CopyRight+0x61>
2a4: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1)
2ab: 00 00 00 00
2af: 90 nop
2b0: 48 8b 74 d0 08 mov 0x8(%rax,%rdx,8),%rsi
2b5: 48 89 74 d1 08 mov %rsi,0x8(%rcx,%rdx,8)
2ba: 48 83 c2 01 add $0x1,%rdx
2be: 75 f0 jne 2b0 <aci_CopyRight+0x1b>
2c0: 49 f7 c0 01 00 00 00 test $0x1,%r8
2c7: 74 06 je 2cf <aci_CopyRight+0x3a>
2c9: 8b 70 08 mov 0x8(%rax),%esi
2cc: 89 71 08 mov %esi,0x8(%rcx)
2cf: c3 ret
2d0: 48 8b 74 d0 e8 mov -0x18(%rax,%rdx,8),%rsi
2d5: 48 89 74 d1 e8 mov %rsi,-0x18(%rcx,%rdx,8)
2da: 48 8b 74 d0 f0 mov -0x10(%rax,%rdx,8),%rsi
2df: 48 89 74 d1 f0 mov %rsi,-0x10(%rcx,%rdx,8)
2e4: 48 8b 74 d0 f8 mov -0x8(%rax,%rdx,8),%rsi
2e9: 48 89 74 d1 f8 mov %rsi,-0x8(%rcx,%rdx,8)
2ee: 48 8b 34 d0 mov (%rax,%rdx,8),%rsi
2f2: 48 89 34 d1 mov %rsi,(%rcx,%rdx,8)
2f6: 48 83 c2 04 add $0x4,%rdx
2fa: 7e d4 jle 2d0 <aci_CopyRight+0x3b>
2fc: 48 83 ea 04 sub $0x4,%rdx
300: 7c ae jl 2b0 <aci_CopyRight+0x1b>
302: eb bc jmp 2c0 <aci_CopyRight+0x2b>

0000000000000304 <aci_CopyLeft>:
304: 49 f7 c0 01 00 00 00 test $0x1,%r8
30b: 74 49 je 356 <aci_CopyLeft+0x52>
30d: 42 8b 4c 87 fc mov -0x4(%rdi,%r8,4),%ecx
312: 42 89 4c 86 fc mov %ecx,-0x4(%rsi,%r8,4)
317: eb 3d jmp 356 <aci_CopyLeft+0x52>
319: 48 8b 4c d7 f8 mov -0x8(%rdi,%rdx,8),%rcx
31e: 48 89 4c d6 f8 mov %rcx,-0x8(%rsi,%rdx,8)
323: 48 83 ea 01 sub $0x1,%rdx
327: 75 f0 jne 319 <aci_CopyLeft+0x15>
329: c3 ret
32a: 66 0f 1f 44 00 00 nopw 0x0(%rax,%rax,1)
330: 48 8b 4c d7 18 mov 0x18(%rdi,%rdx,8),%rcx
335: 48 89 4c d6 18 mov %rcx,0x18(%rsi,%rdx,8)
33a: 48 8b 4c d7 10 mov 0x10(%rdi,%rdx,8),%rcx
33f: 48 89 4c d6 10 mov %rcx,0x10(%rsi,%rdx,8)
344: 48 8b 4c d7 08 mov 0x8(%rdi,%rdx,8),%rcx
349: 48 89 4c d6 08 mov %rcx,0x8(%rsi,%rdx,8)
34e: 48 8b 0c d7 mov (%rdi,%rdx,8),%rcx
352: 48 89 0c d6 mov %rcx,(%rsi,%rdx,8)
356: 48 83 ea 04 sub $0x4,%rdx
35a: 7d d4 jge 330 <aci_CopyLeft+0x2c>
35c: 48 83 c2 04 add $0x4,%rdx
360: 7f b7 jg 319 <aci_CopyLeft+0x15>
362: c3 ret
363: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1)
36a: 00 00 00 00
36e: 66 90 xchg %ax,%ax

0000000000000370 <_Copy_arrayof_conjoint_jlongs>:
370: 48 39 fe cmp %rdi,%rsi
373: 48 8d 44 d7 f8 lea -0x8(%rdi,%rdx,8),%rax
378: 76 09 jbe 383 <acl_CopyRight>
37a: 48 39 c6 cmp %rax,%rsi
37d: 0f 86 93 00 00 00 jbe 416 <acl_CopyLeft>

0000000000000383 <acl_CopyRight>:
383: 48 8d 4c d6 f8 lea -0x8(%rsi,%rdx,8),%rcx
388: 48 f7 da neg %rdx
38b: eb 39 jmp 3c6 <acl_CopyRight+0x43>
38d: 48 8b 74 d0 08 mov 0x8(%rax,%rdx,8),%rsi
392: 48 89 74 d1 08 mov %rsi,0x8(%rcx,%rdx,8)
397: 48 83 c2 01 add $0x1,%rdx
39b: 75 f0 jne 38d <acl_CopyRight+0xa>
39d: c3 ret
39e: 66 90 xchg %ax,%ax
3a0: 48 8b 74 d0 e8 mov -0x18(%rax,%rdx,8),%rsi
3a5: 48 89 74 d1 e8 mov %rsi,-0x18(%rcx,%rdx,8)
3aa: 48 8b 74 d0 f0 mov -0x10(%rax,%rdx,8),%rsi
3af: 48 89 74 d1 f0 mov %rsi,-0x10(%rcx,%rdx,8)
3b4: 48 8b 74 d0 f8 mov -0x8(%rax,%rdx,8),%rsi
3b9: 48 89 74 d1 f8 mov %rsi,-0x8(%rcx,%rdx,8)
3be: 48 8b 34 d0 mov (%rax,%rdx,8),%rsi
3c2: 48 89 34 d1 mov %rsi,(%rcx,%rdx,8)
3c6: 48 83 c2 04 add $0x4,%rdx
3ca: 7e d4 jle 3a0 <acl_CopyRight+0x1d>
3cc: 48 83 ea 04 sub $0x4,%rdx
3d0: 7c bb jl 38d <acl_CopyRight+0xa>
3d2: c3 ret
3d3: 48 8b 4c d7 f8 mov -0x8(%rdi,%rdx,8),%rcx
3d8: 48 89 4c d6 f8 mov %rcx,-0x8(%rsi,%rdx,8)
3dd: 48 83 ea 01 sub $0x1,%rdx
3e1: 75 f0 jne 3d3 <acl_CopyRight+0x50>
3e3: c3 ret
3e4: 66 66 2e 0f 1f 84 00 data16 cs nopw 0x0(%rax,%rax,1)
3eb: 00 00 00 00
3ef: 90 nop
3f0: 48 8b 4c d7 18 mov 0x18(%rdi,%rdx,8),%rcx
3f5: 48 89 4c d6 18 mov %rcx,0x18(%rsi,%rdx,8)
3fa: 48 8b 4c d7 10 mov 0x10(%rdi,%rdx,8),%rcx
3ff: 48 89 4c d6 10 mov %rcx,0x10(%rsi,%rdx,8)
404: 48 8b 4c d7 08 mov 0x8(%rdi,%rdx,8),%rcx
409: 48 89 4c d6 08 mov %rcx,0x8(%rsi,%rdx,8)
40e: 48 8b 0c d7 mov (%rdi,%rdx,8),%rcx
412: 48 89 0c d6 mov %rcx,(%rsi,%rdx,8)

0000000000000416 <acl_CopyLeft>:
416: 48 83 ea 04 sub $0x4,%rdx
41a: 7d d4 jge 3f0 <acl_CopyRight+0x6d>
41c: 48 83 c2 04 add $0x4,%rdx
420: 7f b1 jg 3d3 <acl_CopyRight+0x50>
422: c3 ret

总结

arrays 包含一堆变量.变量有两种值:primitive值 , reference值.

所以copyarrays复制的是变量,也就是复制的是引用

Copies an array from the specified source array, beginning at the specified position, to the specified position of the destination array. A subsequence of array components are copied from the source array referenced by src to the destination array referenced by dest. The number of components copied is equal to the length argument. The components at positions srcPos through srcPos+length-1 in the source array are copied into positions destPos through destPos+length-1, respectively, of the destination array.

相关阅读

rabbitmq spring boot

· 5 min read

背景

了解springboot 的配置怎么加载的,了解spring-boot怎么读取rabbitmq配置的

堆栈

spring boot 设置配置

configure:40, SimpleRabbitListenerContainerFactoryConfigurer (org.springframework.boot.autoconfigure.amqp)
simpleRabbitListenerContainerFactory:81, RabbitAnnotationDrivenConfiguration (org.springframework.boot.autoconfigure.amqp)
invoke0:-1, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:62, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:43, DelegatingMethodAccessorImpl (jdk.internal.reflect)
invoke:566, Method (java.lang.reflect)
instantiate:154, SimpleInstantiationStrategy (org.springframework.beans.factory.support)
instantiate:652, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:637, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:1341, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBeanInstance:1181, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:556, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 1555928242 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$290)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)
preInstantiateSingletons:897, DefaultListableBeanFactory (org.springframework.beans.factory.support)
finishBeanFactoryInitialization:879, AbstractApplicationContext (org.springframework.context.support)
refresh:551, AbstractApplicationContext (org.springframework.context.support)
refresh:755, SpringApplication (org.springframework.boot)
refresh:747, SpringApplication (org.springframework.boot)
refreshContext:402, SpringApplication (org.springframework.boot)
run:312, SpringApplication (org.springframework.boot)
loadContext:120, SpringBootContextLoader (org.springframework.boot.test.context)
loadContextInternal:99, DefaultCacheAwareContextLoaderDelegate (org.springframework.test.context.cache)
loadContext:124, DefaultCacheAwareContextLoaderDelegate (org.springframework.test.context.cache)
getApplicationContext:123, DefaultTestContext (org.springframework.test.context.support)
setUpRequestContextIfNecessary:190, ServletTestExecutionListener (org.springframework.test.context.web)
prepareTestInstance:132, ServletTestExecutionListener (org.springframework.test.context.web)
prepareTestInstance:244, TestContextManager (org.springframework.test.context)
createTest:227, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runReflectiveCall:289, SpringJUnit4ClassRunner$1 (org.springframework.test.context.junit4)
run:12, ReflectiveCallable (org.junit.internal.runners.model)
methodBlock:291, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runChild:246, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runChild:97, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
run:331, ParentRunner$4 (org.junit.runners)
schedule:79, ParentRunner$1 (org.junit.runners)
runChildren:329, ParentRunner (org.junit.runners)
access$100:66, ParentRunner (org.junit.runners)
evaluate:293, ParentRunner$2 (org.junit.runners)
evaluate:61, RunBeforeTestClassCallbacks (org.springframework.test.context.junit4.statements)
evaluate:70, RunAfterTestClassCallbacks (org.springframework.test.context.junit4.statements)
evaluate:306, ParentRunner$3 (org.junit.runners)
run:413, ParentRunner (org.junit.runners)
run:190, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
run:137, JUnitCore (org.junit.runner)
startRunnerWithArgs:69, JUnit4IdeaTestRunner (com.intellij.junit4)
execute:38, IdeaTestRunner$Repeater$1 (com.intellij.rt.junit)
repeat:11, TestsRepeater (com.intellij.rt.execution.junit)
startRunnerWithArgs:35, IdeaTestRunner$Repeater (com.intellij.rt.junit)
prepareStreamsAndStart:235, JUnitStarter (com.intellij.rt.junit)
main:54, JUnitStarter (com.intellij.rt.junit)

设置属性

configure:40, SimpleRabbitListenerContainerFactoryConfigurer (org.springframework.boot.autoconfigure.amqp)
simpleRabbitListenerContainerFactory:81, RabbitAnnotationDrivenConfiguration (org.springframework.boot.autoconfigure.amqp)
invoke0:-1, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:62, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:43, DelegatingMethodAccessorImpl (jdk.internal.reflect)
invoke:566, Method (java.lang.reflect)
instantiate:154, SimpleInstantiationStrategy (org.springframework.beans.factory.support)
instantiate:652, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:637, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:1341, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBeanInstance:1181, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:556, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 622043416 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$290)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)
preInstantiateSingletons:897, DefaultListableBeanFactory (org.springframework.beans.factory.support)
finishBeanFactoryInitialization:879, AbstractApplicationContext (org.springframework.context.support)
refresh:551, AbstractApplicationContext (org.springframework.context.support)
refresh:755, SpringApplication (org.springframework.boot)
refresh:747, SpringApplication (org.springframework.boot)
refreshContext:402, SpringApplication (org.springframework.boot)
run:312, SpringApplication (org.springframework.boot)
loadContext:120, SpringBootContextLoader (org.springframework.boot.test.context)
loadContextInternal:99, DefaultCacheAwareContextLoaderDelegate (org.springframework.test.context.cache)
loadContext:124, DefaultCacheAwareContextLoaderDelegate (org.springframework.test.context.cache)
getApplicationContext:123, DefaultTestContext (org.springframework.test.context.support)
setUpRequestContextIfNecessary:190, ServletTestExecutionListener (org.springframework.test.context.web)
prepareTestInstance:132, ServletTestExecutionListener (org.springframework.test.context.web)
prepareTestInstance:244, TestContextManager (org.springframework.test.context)
createTest:227, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runReflectiveCall:289, SpringJUnit4ClassRunner$1 (org.springframework.test.context.junit4)
run:12, ReflectiveCallable (org.junit.internal.runners.model)
methodBlock:291, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runChild:246, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runChild:97, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
run:331, ParentRunner$4 (org.junit.runners)
schedule:79, ParentRunner$1 (org.junit.runners)
runChildren:329, ParentRunner (org.junit.runners)
access$100:66, ParentRunner (org.junit.runners)
evaluate:293, ParentRunner$2 (org.junit.runners)
evaluate:61, RunBeforeTestClassCallbacks (org.springframework.test.context.junit4.statements)
evaluate:70, RunAfterTestClassCallbacks (org.springframework.test.context.junit4.statements)
evaluate:306, ParentRunner$3 (org.junit.runners)
run:413, ParentRunner (org.junit.runners)
run:190, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
run:137, JUnitCore (org.junit.runner)
startRunnerWithArgs:69, JUnit4IdeaTestRunner (com.intellij.junit4)
execute:38, IdeaTestRunner$Repeater$1 (com.intellij.rt.junit)
repeat:11, TestsRepeater (com.intellij.rt.execution.junit)
startRunnerWithArgs:35, IdeaTestRunner$Repeater (com.intellij.rt.junit)
prepareStreamsAndStart:235, JUnitStarter (com.intellij.rt.junit)
main:54, JUnitStarter (com.intellij.rt.junit)

rabbitmq 配置注入

<init>:57, RabbitAnnotationDrivenConfiguration (org.springframework.boot.autoconfigure.amqp)
newInstance0:-1, NativeConstructorAccessorImpl (jdk.internal.reflect)
newInstance:62, NativeConstructorAccessorImpl (jdk.internal.reflect)
newInstance:45, DelegatingConstructorAccessorImpl (jdk.internal.reflect)
newInstance:490, Constructor (java.lang.reflect)
instantiateClass:204, BeanUtils (org.springframework.beans)
instantiate:117, SimpleInstantiationStrategy (org.springframework.beans.factory.support)
instantiate:310, ConstructorResolver (org.springframework.beans.factory.support)
autowireConstructor:295, ConstructorResolver (org.springframework.beans.factory.support)
autowireConstructor:1361, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBeanInstance:1208, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:556, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 809260538 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$290)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)
preInstantiateSingletons:897, DefaultListableBeanFactory (org.springframework.beans.factory.support)
finishBeanFactoryInitialization:879, AbstractApplicationContext (org.springframework.context.support)
refresh:551, AbstractApplicationContext (org.springframework.context.support)
refresh:755, SpringApplication (org.springframework.boot)
refresh:747, SpringApplication (org.springframework.boot)
refreshContext:402, SpringApplication (org.springframework.boot)
run:312, SpringApplication (org.springframework.boot)
loadContext:120, SpringBootContextLoader (org.springframework.boot.test.context)
loadContextInternal:99, DefaultCacheAwareContextLoaderDelegate (org.springframework.test.context.cache)
loadContext:124, DefaultCacheAwareContextLoaderDelegate (org.springframework.test.context.cache)
getApplicationContext:123, DefaultTestContext (org.springframework.test.context.support)
setUpRequestContextIfNecessary:190, ServletTestExecutionListener (org.springframework.test.context.web)
prepareTestInstance:132, ServletTestExecutionListener (org.springframework.test.context.web)
prepareTestInstance:244, TestContextManager (org.springframework.test.context)
createTest:227, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runReflectiveCall:289, SpringJUnit4ClassRunner$1 (org.springframework.test.context.junit4)
run:12, ReflectiveCallable (org.junit.internal.runners.model)
methodBlock:291, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runChild:246, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runChild:97, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
run:331, ParentRunner$4 (org.junit.runners)
schedule:79, ParentRunner$1 (org.junit.runners)
runChildren:329, ParentRunner (org.junit.runners)
access$100:66, ParentRunner (org.junit.runners)
evaluate:293, ParentRunner$2 (org.junit.runners)
evaluate:61, RunBeforeTestClassCallbacks (org.springframework.test.context.junit4.statements)
evaluate:70, RunAfterTestClassCallbacks (org.springframework.test.context.junit4.statements)
evaluate:306, ParentRunner$3 (org.junit.runners)
run:413, ParentRunner (org.junit.runners)
run:190, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
run:137, JUnitCore (org.junit.runner)
startRunnerWithArgs:69, JUnit4IdeaTestRunner (com.intellij.junit4)
execute:38, IdeaTestRunner$Repeater$1 (com.intellij.rt.junit)
repeat:11, TestsRepeater (com.intellij.rt.execution.junit)
startRunnerWithArgs:35, IdeaTestRunner$Repeater (com.intellij.rt.junit)
prepareStreamsAndStart:235, JUnitStarter (com.intellij.rt.junit)
main:54, JUnitStarter (com.intellij.rt.junit)

初始化空难的配置

<init>:47, RabbitProperties (org.springframework.boot.autoconfigure.amqp)
newInstance0:-1, NativeConstructorAccessorImpl (jdk.internal.reflect)
newInstance:62, NativeConstructorAccessorImpl (jdk.internal.reflect)
newInstance:45, DelegatingConstructorAccessorImpl (jdk.internal.reflect)
newInstance:490, Constructor (java.lang.reflect)
instantiateClass:204, BeanUtils (org.springframework.beans)
instantiate:87, SimpleInstantiationStrategy (org.springframework.beans.factory.support)
instantiateBean:1315, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBeanInstance:1218, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:556, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 47925969 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$290)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)
resolveCandidate:276, DependencyDescriptor (org.springframework.beans.factory.config)
doResolveDependency:1307, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveDependency:1227, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveAutowiredArgument:886, ConstructorResolver (org.springframework.beans.factory.support)
createArgumentArray:790, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:540, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:1341, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBeanInstance:1181, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:556, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 47925969 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$290)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)
resolveCandidate:276, DependencyDescriptor (org.springframework.beans.factory.config)
doResolveDependency:1307, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveDependency:1227, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveAutowiredArgument:886, ConstructorResolver (org.springframework.beans.factory.support)
createArgumentArray:790, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:540, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:1341, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBeanInstance:1181, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:556, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 47925969 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$290)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)
resolveCandidate:276, DependencyDescriptor (org.springframework.beans.factory.config)
doResolveDependency:1307, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveDependency:1227, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveFieldValue:657, AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement (org.springframework.beans.factory.annotation)
inject:640, AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement (org.springframework.beans.factory.annotation)
inject:119, InjectionMetadata (org.springframework.beans.factory.annotation)
postProcessProperties:399, AutowiredAnnotationBeanPostProcessor (org.springframework.beans.factory.annotation)
populateBean:1425, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:593, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 47925969 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$290)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)
resolveCandidate:276, DependencyDescriptor (org.springframework.beans.factory.config)
doResolveDependency:1307, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveDependency:1227, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveFieldValue:657, AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement (org.springframework.beans.factory.annotation)
inject:640, AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement (org.springframework.beans.factory.annotation)
inject:119, InjectionMetadata (org.springframework.beans.factory.annotation)
postProcessProperties:399, AutowiredAnnotationBeanPostProcessor (org.springframework.beans.factory.annotation)
populateBean:1425, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:593, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 47925969 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$290)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:207, AbstractBeanFactory (org.springframework.beans.factory.support)
resolveBeanByName:453, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
autowireResource:527, CommonAnnotationBeanPostProcessor (org.springframework.context.annotation)
getResource:497, CommonAnnotationBeanPostProcessor (org.springframework.context.annotation)
getResourceToInject:650, CommonAnnotationBeanPostProcessor$ResourceElement (org.springframework.context.annotation)
inject:228, InjectionMetadata$InjectedElement (org.springframework.beans.factory.annotation)
inject:119, InjectionMetadata (org.springframework.beans.factory.annotation)
postProcessProperties:318, CommonAnnotationBeanPostProcessor (org.springframework.context.annotation)
populateBean:1425, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:593, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getObject:-1, 47925969 (org.springframework.beans.factory.support.AbstractBeanFactory$$Lambda$290)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)
preInstantiateSingletons:897, DefaultListableBeanFactory (org.springframework.beans.factory.support)
finishBeanFactoryInitialization:879, AbstractApplicationContext (org.springframework.context.support)
refresh:551, AbstractApplicationContext (org.springframework.context.support)
refresh:755, SpringApplication (org.springframework.boot)
refresh:747, SpringApplication (org.springframework.boot)
refreshContext:402, SpringApplication (org.springframework.boot)
run:312, SpringApplication (org.springframework.boot)
loadContext:120, SpringBootContextLoader (org.springframework.boot.test.context)
loadContextInternal:99, DefaultCacheAwareContextLoaderDelegate (org.springframework.test.context.cache)
loadContext:124, DefaultCacheAwareContextLoaderDelegate (org.springframework.test.context.cache)
getApplicationContext:123, DefaultTestContext (org.springframework.test.context.support)
setUpRequestContextIfNecessary:190, ServletTestExecutionListener (org.springframework.test.context.web)
prepareTestInstance:132, ServletTestExecutionListener (org.springframework.test.context.web)
prepareTestInstance:244, TestContextManager (org.springframework.test.context)
createTest:227, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runReflectiveCall:289, SpringJUnit4ClassRunner$1 (org.springframework.test.context.junit4)
run:12, ReflectiveCallable (org.junit.internal.runners.model)
methodBlock:291, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runChild:246, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runChild:97, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
run:331, ParentRunner$4 (org.junit.runners)
schedule:79, ParentRunner$1 (org.junit.runners)
runChildren:329, ParentRunner (org.junit.runners)
access$100:66, ParentRunner (org.junit.runners)
evaluate:293, ParentRunner$2 (org.junit.runners)
evaluate:61, RunBeforeTestClassCallbacks (org.springframework.test.context.junit4.statements)
evaluate:70, RunAfterTestClassCallbacks (org.springframework.test.context.junit4.statements)
evaluate:306, ParentRunner$3 (org.junit.runners)
run:413, ParentRunner (org.junit.runners)
run:190, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
run:137, JUnitCore (org.junit.runner)
startRunnerWithArgs:69, JUnit4IdeaTestRunner (com.intellij.junit4)
execute:38, IdeaTestRunner$Repeater$1 (com.intellij.rt.junit)
repeat:11, TestsRepeater (com.intellij.rt.execution.junit)
startRunnerWithArgs:35, IdeaTestRunner$Repeater (com.intellij.rt.junit)
prepareStreamsAndStart:235, JUnitStarter (com.intellij.rt.junit)
main:54, JUnitStarter (com.intellij.rt.junit)

相关阅读

nacos 获取配置

· 2 min read

背景

nacos 是一个服务注册/发现中间件

获取配置的堆栈

run:744, ClientWorker$ConfigRpcTransportClient$4 (com.alibaba.nacos.client.config.impl)
call:515, Executors$RunnableAdapter (java.util.concurrent)
run$$$capture:264, FutureTask (java.util.concurrent)
run:-1, FutureTask (java.util.concurrent)
- Async stack trace
<init>:151, FutureTask (java.util.concurrent)
<init>:215, ScheduledThreadPoolExecutor$ScheduledFutureTask (java.util.concurrent)
schedule:561, ScheduledThreadPoolExecutor (java.util.concurrent)
startInternal:739, ClientWorker$ConfigRpcTransportClient (com.alibaba.nacos.client.config.impl)
start:255, ConfigTransportClient (com.alibaba.nacos.client.config.impl)
<init>:472, ClientWorker (com.alibaba.nacos.client.config.impl)
<init>:81, NacosConfigService (com.alibaba.nacos.client.config)
newInstance0:-2, NativeConstructorAccessorImpl (jdk.internal.reflect)
newInstance:62, NativeConstructorAccessorImpl (jdk.internal.reflect)
newInstance:45, DelegatingConstructorAccessorImpl (jdk.internal.reflect)
newInstance:490, Constructor (java.lang.reflect)
createConfigService:43, ConfigFactory (com.alibaba.nacos.api.config)
createConfigService:44, NacosFactory (com.alibaba.nacos.api)
createConfigService:55, NacosConfigManager (com.alibaba.cloud.nacos)
<init>:43, NacosConfigManager (com.alibaba.cloud.nacos)
nacosConfigManager:43, NacosConfigBootstrapConfiguration (com.alibaba.cloud.nacos)
invoke0:-2, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:62, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:43, DelegatingMethodAccessorImpl (jdk.internal.reflect)
invoke:566, Method (java.lang.reflect)
instantiate:154, SimpleInstantiationStrategy (org.springframework.beans.factory.support)
instantiate:652, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:637, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:1341, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBeanInstance:1181, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:556, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)
resolveCandidate:276, DependencyDescriptor (org.springframework.beans.factory.config)
doResolveDependency:1307, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveDependency:1227, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveAutowiredArgument:886, ConstructorResolver (org.springframework.beans.factory.support)
createArgumentArray:790, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:540, ConstructorResolver (org.springframework.beans.factory.support)
instantiateUsingFactoryMethod:1341, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBeanInstance:1181, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:556, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)
resolveCandidate:276, DependencyDescriptor (org.springframework.beans.factory.config)
addCandidateEntry:1525, DefaultListableBeanFactory (org.springframework.beans.factory.support)
findAutowireCandidates:1489, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveMultipleBeans:1378, DefaultListableBeanFactory (org.springframework.beans.factory.support)
doResolveDependency:1265, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveDependency:1227, DefaultListableBeanFactory (org.springframework.beans.factory.support)
resolveFieldValue:657, AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement (org.springframework.beans.factory.annotation)
inject:640, AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement (org.springframework.beans.factory.annotation)
inject:119, InjectionMetadata (org.springframework.beans.factory.annotation)
postProcessProperties:399, AutowiredAnnotationBeanPostProcessor (org.springframework.beans.factory.annotation)
populateBean:1425, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
doCreateBean:593, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
createBean:516, AbstractAutowireCapableBeanFactory (org.springframework.beans.factory.support)
lambda$doGetBean$0:324, AbstractBeanFactory (org.springframework.beans.factory.support)
getSingleton:234, DefaultSingletonBeanRegistry (org.springframework.beans.factory.support)
doGetBean:322, AbstractBeanFactory (org.springframework.beans.factory.support)
getBean:202, AbstractBeanFactory (org.springframework.beans.factory.support)
preInstantiateSingletons:897, DefaultListableBeanFactory (org.springframework.beans.factory.support)
finishBeanFactoryInitialization:879, AbstractApplicationContext (org.springframework.context.support)
refresh:551, AbstractApplicationContext (org.springframework.context.support)
refresh:755, SpringApplication (org.springframework.boot)
refresh:747, SpringApplication (org.springframework.boot)
refreshContext:402, SpringApplication (org.springframework.boot)
run:312, SpringApplication (org.springframework.boot)
run:140, SpringApplicationBuilder (org.springframework.boot.builder)
bootstrapServiceContext:212, BootstrapApplicationListener (org.springframework.cloud.bootstrap)
onApplicationEvent:117, BootstrapApplicationListener (org.springframework.cloud.bootstrap)
onApplicationEvent:74, BootstrapApplicationListener (org.springframework.cloud.bootstrap)
doInvokeListener:172, SimpleApplicationEventMulticaster (org.springframework.context.event)
invokeListener:165, SimpleApplicationEventMulticaster (org.springframework.context.event)
multicastEvent:139, SimpleApplicationEventMulticaster (org.springframework.context.event)
multicastEvent:127, SimpleApplicationEventMulticaster (org.springframework.context.event)
environmentPrepared:80, EventPublishingRunListener (org.springframework.boot.context.event)
environmentPrepared:53, SpringApplicationRunListeners (org.springframework.boot)
prepareEnvironment:342, SpringApplication (org.springframework.boot)
run:307, SpringApplication (org.springframework.boot)
loadContext:120, SpringBootContextLoader (org.springframework.boot.test.context)
loadContextInternal:99, DefaultCacheAwareContextLoaderDelegate (org.springframework.test.context.cache)
loadContext:124, DefaultCacheAwareContextLoaderDelegate (org.springframework.test.context.cache)
getApplicationContext:123, DefaultTestContext (org.springframework.test.context.support)
setUpRequestContextIfNecessary:190, ServletTestExecutionListener (org.springframework.test.context.web)
prepareTestInstance:132, ServletTestExecutionListener (org.springframework.test.context.web)
prepareTestInstance:244, TestContextManager (org.springframework.test.context)
createTest:227, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runReflectiveCall:289, SpringJUnit4ClassRunner$1 (org.springframework.test.context.junit4)
run:12, ReflectiveCallable (org.junit.internal.runners.model)
methodBlock:291, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runChild:246, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
runChild:97, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
run:331, ParentRunner$4 (org.junit.runners)
schedule:79, ParentRunner$1 (org.junit.runners)
runChildren:329, ParentRunner (org.junit.runners)
access$100:66, ParentRunner (org.junit.runners)
evaluate:293, ParentRunner$2 (org.junit.runners)
evaluate:61, RunBeforeTestClassCallbacks (org.springframework.test.context.junit4.statements)
evaluate:70, RunAfterTestClassCallbacks (org.springframework.test.context.junit4.statements)
evaluate:306, ParentRunner$3 (org.junit.runners)
run:413, ParentRunner (org.junit.runners)
run:190, SpringJUnit4ClassRunner (org.springframework.test.context.junit4)
run:137, JUnitCore (org.junit.runner)
startRunnerWithArgs:69, JUnit4IdeaTestRunner (com.intellij.junit4)
execute:38, IdeaTestRunner$Repeater$1 (com.intellij.rt.junit)
repeat:11, TestsRepeater (com.intellij.rt.execution.junit)
startRunnerWithArgs:35, IdeaTestRunner$Repeater (com.intellij.rt.junit)
prepareStreamsAndStart:235, JUnitStarter (com.intellij.rt.junit)
main:54, JUnitStarter (com.intellij.rt.junit)

how to debug javac

· One min read

背景

javac 是java的编译器,目前对编译原理非常感兴趣,而且对类型擦除和java的类型系统感兴趣.所以需要调试javac

How to do

java9 之后新增了模块module功能.在这之前,javac是单独有个tools.java负载编译的.在java9之后,相关代码在jdk.compiler的module下面

java parser

· One min read

背景

  • 了解java的.java文件的词法分析
  • 了解java的编译过程

parser

类型检查

src/jdk.compiler/share/classes/com/sun/tools/javac/comp/Check.java

java的的语法词法分析,生成parse树

src/jdk.compiler/share/classes/com/sun/tools/javac/parser/JavacParser.java
(gdb) p (char *) buf
$3 = 0x7ffff5980170 "/home/dai/javademo/learn_java/generic/GenericMethod.java:8: error: name clash: sayHi(List<Integer>) and sayHi(List<String>) have the same erasure\n"
(gdb) bt
#0 __GI___libc_write (fd=fd@entry=2, buf=buf@entry=0x7ffff5980170, nbytes=nbytes@entry=146) at ../sysdeps/unix/sysv/linux/write.c:25
#1 0x00007ffff5851e28 in handleWrite (fd=2, buf=buf@entry=0x7ffff5980170, len=len@entry=146) at /home/dai/jdk/src/java.base/unix/native/libjava/io_util_md.c:196
#2 0x00007ffff58518ba in writeBytes (env=0x7ffff00295d0, this=0x7ffff5982290, bytes=<optimized out>, off=0, len=146, append=<optimized out>, fid=0xd08e043)
at /home/dai/jdk/src/java.base/share/native/libjava/io_util.c:189
#3 0x00007ffff584a2ab in Java_java_io_FileOutputStream_writeBytes (env=<optimized out>, this=<optimized out>, bytes=<optimized out>, off=<optimized out>, len=<optimized out>, append=<optimized out>)
at /home/dai/jdk/src/java.base/share/native/libjava/FileOutputStream.c:70
#4 0x00007fffe100f6cb in ?? ()
#5 0x00007ffff7d41000 in ?? ()
#6 0x0000555555581520 in ?? ()
#7 0x00007ffff00292f0 in ?? ()
#8 0x00007fffb4d44e58 in ?? ()
#9 0x00007fffe100f199 in ?? ()
#10 0x00007ffff5982208 in ?? ()
#11 0x00007fffb41f2960 in ?? ()
#12 0x00007ffff5982290 in ?? ()
#13 0x00007fffb41f3b38 in ?? ()
#14 0x0000000000000000 in ?? ()

相关阅读