jvm에는
스레드별로 PC register, Stack ,Native Method Stack이 있고
공용 메모리로는 Heap, Method Area가 있다.
공용 메모리는 이해가 됐다 heap이랑 소스코드 method area가 있겠지
스레드별로 stack이 있는건 이해되는데 왜 따로 native method stack이라는게 있는지 어떻게 있는지 애매했다.
gdb로 봐봤다.
java -Djava.library.path=. MyLibrary 라이브러리 위치 정해주고 실행
418800000-457000000 rw-p 00000000 00:00 0
457000000-7ff800000 ---p 00000000 00:00 0
7ff800000-7ff908000 rw-p 00ced000 103:0a 17185179 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/classes.jsa
7ff908000-800000000 rw-p 00000000 00:00 0
5feb14773000-5feb14774000 r--p 00000000 103:0a 17185026 /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5feb14774000-5feb14775000 r-xp 00001000 103:0a 17185026 /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5feb14775000-5feb14776000 r--p 00002000 103:0a 17185026 /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5feb14776000-5feb14777000 r--p 00002000 103:0a 17185026 /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5feb14777000-5feb14778000 rw-p 00003000 103:0a 17185026 /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5feb1631a000-5feb16361000 rw-p 00000000 00:00 0 [heap]
7608dc000000-7608dc021000 rw-p 00000000 00:00 0
7608dc021000-7608e0000000 ---p 00000000 00:00 0
7608e0000000-7608e0021000 rw-p 00000000 00:00 0
7608e0021000-7608e4000000 ---p 00000000 00:00 0
7608e8000000-7608e8034000 rw-p 00000000 00:00 0
7608e8034000-7608ec000000 ---p 00000000 00:00 0
7608ec000000-7608ec05f000 rw-p 00000000 00:00 0
7608ec05f000-7608f0000000 ---p 00000000 00:00 0
7608f4000000-7608f4021000 rw-p 00000000 00:00 0
7608f4021000-7608f8000000 ---p 00000000 00:00 0
7608f8000000-7608f8021000 rw-p 00000000 00:00 0
7608f8021000-7608fc000000 ---p 00000000 00:00 0
760900000000-760900021000 rw-p 00000000 00:00 0
760900021000-760904000000 ---p 00000000 00:00 0
760904000000-760904021000 rw-p 00000000 00:00 0
760904021000-760908000000 ---p 00000000 00:00 0
76090c000000-76090c021000 rw-p 00000000 00:00 0
76090c021000-760910000000 ---p 00000000 00:00 0
760910000000-760910021000 rw-p 00000000 00:00 0
760910021000-760914000000 ---p 00000000 00:00 0
760918000000-760918020000 rw-p 00000000 00:00 0
760918020000-760918400000 ---p 00000000 00:00 0
760918400000-760918410000 rw-p 00000000 00:00 0
760918410000-76091c000000 ---p 00000000 00:00 0
76091c000000-76091c021000 rw-p 00000000 00:00 0
76091c021000-760920000000 ---p 00000000 00:00 0
760923000000-760923cae000 rw-p 00001000 103:0a 17185179 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/classes.jsa
760923cae000-760924000000 ---p 00000000 00:00 0
760924000000-760924010000 rw-p 00000000 00:00 0
760924010000-760924040000 ---p 00000000 00:00 0
760924040000-760924050000 rw-p 00000000 00:00 0
760924050000-760964000000 ---p 00000000 00:00 0
760964000000-760964021000 rw-p 00000000 00:00 0
760964021000-760968000000 ---p 00000000 00:00 0
760968000000-760968021000 rw-p 00000000 00:00 0
760968021000-76096c000000 ---p 00000000 00:00 0
760970000000-760970021000 rw-p 00000000 00:00 0
760970021000-760974000000 ---p 00000000 00:00 0
760974000000-760974021000 rw-p 00000000 00:00 0
760974021000-760978000000 ---p 00000000 00:00 0
760979000000-760979f36000 r--p 00000000 103:0a 16517754 /usr/lib/locale/locale-archive
76097a000000-76097c021000 rw-p 00000000 00:00 0
76097c021000-760980000000 ---p 00000000 00:00 0
760980d00000-760980d04000 ---p 00000000 00:00 0
760980d04000-760980e00000 rw-p 00000000 00:00 0
760980e00000-760981da0000 rw-p 00000000 00:00 0
760981da0000-7609907c0000 ---p 00000000 00:00 0
7609907c0000-7609907e0000 rw-p 00000000 00:00 0
760990800000-7609909f4000 rw-p 00000000 00:00 0
7609909f4000-760992738000 ---p 00000000 00:00 0
760992738000-76099273c000 rw-p 00000000 00:00 0
760992800000-7609929f4000 rw-p 00000000 00:00 0
7609929f4000-760994738000 ---p 00000000 00:00 0
760994738000-76099473c000 rw-p 00000000 00:00 0
760994800000-760994a70000 rwxp 00000000 00:00 0
760994a70000-76099bc5f000 ---p 00000000 00:00 0
76099bc5f000-76099becf000 rwxp 00000000 00:00 0
76099becf000-76099c3a0000 ---p 00000000 00:00 0
76099c3a0000-76099c610000 rwxp 00000000 00:00 0
76099c610000-7609a3800000 ---p 00000000 00:00 0
7609a3800000-7609abe02000 r--s 00000000 103:0a 17185176 /usr/lib/jvm/java-21-openjdk-amd64/lib/modules
7609abe2f000-7609abe33000 ---p 00000000 00:00 0
7609abe33000-7609abf2f000 rw-p 00000000 00:00 0
7609abf2f000-7609abf34000 r--p 00000000 103:0a 17185160 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7609abf34000-7609abf75000 r-xp 00005000 103:0a 17185160 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7609abf75000-7609abffe000 r--p 00046000 103:0a 17185160 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7609abffe000-7609abfff000 r--p 000ce000 103:0a 17185160 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7609abfff000-7609ac000000 rw-p 000cf000 103:0a 17185160 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7609ac000000-7609ac16e000 rw-p 00000000 00:00 0
7609ac16e000-7609b0000000 ---p 00000000 00:00 0
7609b002f000-7609b0033000 ---p 00000000 00:00 0
7609b0033000-7609b012f000 rw-p 00000000 00:00 0
7609b012f000-7609b0133000 ---p 00000000 00:00 0
7609b0133000-7609b022f000 rw-p 00000000 00:00 0
7609b022f000-7609b0233000 ---p 00000000 00:00 0
7609b0233000-7609b032f000 rw-p 00000000 00:00 0
7609b032f000-7609b0333000 ---p 00000000 00:00 0
7609b0333000-7609b042f000 rw-p 00000000 00:00 0
7609b042f000-7609b0433000 ---p 00000000 00:00 0
7609b0433000-7609b052f000 rw-p 00000000 00:00 0
7609b052f000-7609b0533000 ---p 00000000 00:00 0
7609b0533000-7609b062f000 rw-p 00000000 00:00 0
7609b062f000-7609b0633000 ---p 00000000 00:00 0
7609b0633000-7609b072f000 rw-p 00000000 00:00 0
7609b072f000-7609b0730000 ---p 00000000 00:00 0
7609b0730000-7609b0830000 rw-p 00000000 00:00 0
7609b0830000-7609b0831000 ---p 00000000 00:00 0
7609b0831000-7609b0931000 rw-p 00000000 00:00 0
7609b0931000-7609b0a0d000 rw-p 00000000 00:00 0
7609b0a0d000-7609b0a0e000 ---p 00000000 00:00 0
7609b0a0e000-7609b0b0e000 rw-p 00000000 00:00 0
7609b0b0e000-7609b0b0f000 ---p 00000000 00:00 0
7609b0b0f000-7609b0c0f000 rw-p 00000000 00:00 0
7609b0c0f000-7609b1b1e000 rw-p 00000000 00:00 0
7609b1b1e000-7609b1b1f000 ---p 00000000 00:00 0
7609b1b1f000-7609b1c1f000 rw-p 00000000 00:00 0
7609b1c1f000-7609b1c20000 ---p 00000000 00:00 0
7609b1c20000-7609b1d20000 rw-p 00000000 00:00 0
7609b1d20000-7609b1d21000 ---p 00000000 00:00 0
7609b1d21000-7609b1e21000 rw-p 00000000 00:00 0
7609b1e21000-7609b2e33000 rw-p 00000000 00:00 0
7609b2e33000-7609b2f17000 ---p 00000000 00:00 0
7609b2f17000-7609b2f1c000 rw-p 00000000 00:00 0
7609b2f1c000-7609b3000000 ---p 00000000 00:00 0
7609b3000000-7609b309d000 r--p 00000000 103:0a 16526993 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7609b309d000-7609b31dd000 r-xp 0009d000 103:0a 16526993 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7609b31dd000-7609b326b000 r--p 001dd000 103:0a 16526993 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7609b326b000-7609b3276000 r--p 0026b000 103:0a 16526993 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7609b3276000-7609b3279000 rw-p 00276000 103:0a 16526993 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7609b3279000-7609b327d000 rw-p 00000000 00:00 0
7609b3280000-7609b3300000 rw-p 00000000 00:00 0
7609b3300000-7609b3304000 ---p 00000000 00:00 0
7609b3304000-7609b3400000 rw-p 00000000 00:00 0
7609b3400000-7609b3696000 r--p 00000000 103:0a 17185182 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7609b3696000-7609b44fe000 r-xp 00296000 103:0a 17185182 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7609b44fe000-7609b47d1000 r--p 010fe000 103:0a 17185182 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7609b47d1000-7609b48a1000 r--p 013d0000 103:0a 17185182 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7609b48a1000-7609b48d1000 rw-p 014a0000 103:0a 17185182 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7609b48d1000-7609b4937000 rw-p 00000000 00:00 0
7609b4950000-7609b49d2000 rw-p 00000000 00:00 0
7609b49d2000-7609b49dc000 ---p 00000000 00:00 0
7609b49dc000-7609b49e9000 r--p 00000000 103:0a 17185153 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7609b49e9000-7609b49f8000 r-xp 0000d000 103:0a 17185153 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7609b49f8000-7609b49fd000 r--p 0001c000 103:0a 17185153 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7609b49fd000-7609b49fe000 r--p 00021000 103:0a 17185153 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7609b49fe000-7609b49ff000 rw-p 00022000 103:0a 17185153 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7609b49ff000-7609b4a00000 rw-p 00000000 00:00 0
7609b4a00000-7609b4a28000 r--p 00000000 103:0a 16526467 /usr/lib/x86_64-linux-gnu/libc.so.6
7609b4a28000-7609b4bb0000 r-xp 00028000 103:0a 16526467 /usr/lib/x86_64-linux-gnu/libc.so.6
7609b4bb0000-7609b4bff000 r--p 001b0000 103:0a 16526467 /usr/lib/x86_64-linux-gnu/libc.so.6
7609b4bff000-7609b4c03000 r--p 001fe000 103:0a 16526467 /usr/lib/x86_64-linux-gnu/libc.so.6
7609b4c03000-7609b4c05000 rw-p 00202000 103:0a 16526467 /usr/lib/x86_64-linux-gnu/libc.so.6
7609b4c05000-7609b4c12000 rw-p 00000000 00:00 0
7609b4c1b000-7609b4c23000 rw-s 00000000 103:0a 17301594 /tmp/hsperfdata_yeongjae/93041
7609b4c23000-7609b4c27000 r--p 00000000 103:0a 16526600 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7609b4c27000-7609b4c4a000 r-xp 00004000 103:0a 16526600 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7609b4c4a000-7609b4c4e000 r--p 00027000 103:0a 16526600 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7609b4c4e000-7609b4c4f000 r--p 0002b000 103:0a 16526600 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7609b4c4f000-7609b4c50000 rw-p 0002c000 103:0a 16526600 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7609b4c50000-7609b4c60000 r--p 00000000 103:0a 16526772 /usr/lib/x86_64-linux-gnu/libm.so.6
7609b4c60000-7609b4cdf000 r-xp 00010000 103:0a 16526772 /usr/lib/x86_64-linux-gnu/libm.so.6
7609b4cdf000-7609b4d37000 r--p 0008f000 103:0a 16526772 /usr/lib/x86_64-linux-gnu/libm.so.6
7609b4d37000-7609b4d38000 r--p 000e7000 103:0a 16526772 /usr/lib/x86_64-linux-gnu/libm.so.6
7609b4d38000-7609b4d39000 rw-p 000e8000 103:0a 16526772 /usr/lib/x86_64-linux-gnu/libm.so.6
7609b4d39000-7609b4d3b000 rw-p 00000000 00:00 0
7609b4d3b000-7609b4d3d000 r--p 00000000 103:0a 17185157 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7609b4d3d000-7609b4d47000 r-xp 00002000 103:0a 17185157 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7609b4d47000-7609b4d4a000 r--p 0000c000 103:0a 17185157 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7609b4d4a000-7609b4d4b000 r--p 0000f000 103:0a 17185157 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7609b4d4b000-7609b4d4c000 rw-p 00010000 103:0a 17185157 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7609b4d4c000-7609b4d4e000 r--p 00000000 103:0a 16527124 /usr/lib/x86_64-linux-gnu/libz.so.1.3
7609b4d4e000-7609b4d60000 r-xp 00002000 103:0a 16527124 /usr/lib/x86_64-linux-gnu/libz.so.1.3
7609b4d60000-7609b4d66000 r--p 00014000 103:0a 16527124 /usr/lib/x86_64-linux-gnu/libz.so.1.3
7609b4d66000-7609b4d67000 r--p 0001a000 103:0a 16527124 /usr/lib/x86_64-linux-gnu/libz.so.1.3
7609b4d67000-7609b4d68000 rw-p 0001b000 103:0a 16527124 /usr/lib/x86_64-linux-gnu/libz.so.1.3
7609b4d69000-7609b4d6a000 r--p 00000000 103:0a 11431798 /home/yeongjae/Desktop/java_test/libMyLibrary.so
7609b4d6a000-7609b4d6b000 r-xp 00001000 103:0a 11431798 /home/yeongjae/Desktop/java_test/libMyLibrary.so
7609b4d6b000-7609b4d6c000 r--p 00002000 103:0a 11431798 /home/yeongjae/Desktop/java_test/libMyLibrary.so
7609b4d6c000-7609b4d6d000 r--p 00002000 103:0a 11431798 /home/yeongjae/Desktop/java_test/libMyLibrary.so
7609b4d6d000-7609b4d6e000 rw-p 00003000 103:0a 11431798 /home/yeongjae/Desktop/java_test/libMyLibrary.so
7609b4d6e000-7609b4d6f000 ---p 00000000 00:00 0
7609b4d6f000-7609b4d70000 r--p 00000000 00:00 0
7609b4d70000-7609b4d71000 ---p 00000000 00:00 0
7609b4d71000-7609b4d73000 r--p 00000000 103:0a 17185156 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7609b4d73000-7609b4d76000 r-xp 00002000 103:0a 17185156 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7609b4d76000-7609b4d77000 r--p 00005000 103:0a 17185156 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7609b4d77000-7609b4d78000 r--p 00006000 103:0a 17185156 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7609b4d78000-7609b4d79000 rw-p 00007000 103:0a 17185156 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7609b4d79000-7609b4d7b000 rw-p 00000000 00:00 0
7609b4d7b000-7609b4d7c000 r--p 00000000 103:0a 16526285 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7609b4d7c000-7609b4da7000 r-xp 00001000 103:0a 16526285 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7609b4da7000-7609b4db1000 r--p 0002c000 103:0a 16526285 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7609b4db1000-7609b4db3000 r--p 00036000 103:0a 16526285 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7609b4db3000-7609b4db5000 rw-p 00038000 103:0a 16526285 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7fff32a87000-7fff32aa8000 rw-p 00000000 00:00 0 [stack]
7fff32bd4000-7fff32bd8000 r--p 00000000 00:00 0 [vvar]
7fff32bd8000-7fff32bda000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]
#include <stdio.h>
// MyLibrary.c
#include <jni.h>
#include <stdio.h>
#include <unistd.h>
JNIEXPORT void JNICALL Java_MyLibrary_printMessage(JNIEnv *env, jobject obj) {
void *stackAddress;
__asm__ volatile ("mov %%rsp, %0" : "=r"(stackAddress)); // x86-64에서 스택 포인터를 가져옴
printf("Current stack address: %p\n", stackAddress);
printf("Hello from C Library!\n");
sleep(2);
}
이걸로 so 라이브러리 만들어서
// MyLibrary.java
public class MyLibrary {
// Load the C library
static {
System.loadLibrary("MyLibrary");
}
// Declare the native method
public native void printMessage();
public static void main(String[] args) {
MyLibrary myLib = new MyLibrary();
while(true){
myLib.printMessage(); // Call the native method
System.out.println("aa");
try {
Thread.sleep(3000); // 3초 대기
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
jni로 자바에서 c 호출
왜냐면 native method stack이 jni같은 java가 아닌 함수 호출할때 쓰인다고 한다.
결과는
Current stack address: 0x7609b33fe8e0
Hello from C Library!
aa
Current stack address: 0x7609b33fe8e0
Hello from C Library!
aa
Current stack address: 0x7609b33fe8e0
Hello from C Library!
aa
를 반복해서 내는데
gdb로 이 프로세스에 붙어서 backtrace를 보며 스택 위치를 보기로 했다.
Target Id Frame
* 1 Thread 0x7609b4d39b80 (LWP 93041) "java" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265,
expected=93042, futex_word=0x7609b33ff990) at ./nptl/futex-internal.c:57
2 Thread 0x760980dff6c0 (LWP 93058) "Common-Cleaner" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true,
abstime=0x760980dfe430, op=137, expected=0, futex_word=0x7609ac1681b0) at ./nptl/futex-internal.c:57
3 Thread 0x7609abf2e6c0 (LWP 93057) "Notification Th" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, abstime=0x0,
op=393, expected=0, futex_word=0x7609b4904c78 <mutex_init()::Notification_lock_storage+88>) at ./nptl/futex-internal.c:57
4 Thread 0x7609b012e6c0 (LWP 93056) "C1 CompilerThre" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=11, cancel=true,
abstime=0x7609b012daf0, op=137, expected=0, futex_word=0x7609b49042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
5 Thread 0x7609b022e6c0 (LWP 93055) "C2 CompilerThre" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b022daf0,
op=137, expected=0, futex_word=0x7609b49042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
6 Thread 0x7609b032e6c0 (LWP 93054) "Monitor Deflati" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b032dce0,
op=137, expected=0, futex_word=0x7609b4904d78 <mutex_init()::MonitorDeflation_lock_storage+88>) at ./nptl/futex-internal.c:57
7 Thread 0x7609b042e6c0 (LWP 93053) "Service Thread" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7609b4904cf8 <mutex_init()::Service_lock_storage+88>) at ./nptl/futex-internal.c:57
8 Thread 0x7609b052e6c0 (LWP 93052) "Signal Dispatch" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true,
abstime=0x0, op=393, expected=0, futex_word=0x5feb1631b550) at ./nptl/futex-internal.c:57
9 Thread 0x7609b062e6c0 (LWP 93051) "Finalizer" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7609ac14f878) at ./nptl/futex-internal.c:57
10 Thread 0x7609b072e6c0 (LWP 93050) "Reference Handl" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, abstime=0x0,
op=393, expected=0, futex_word=0x7609b4902d78 <mutex_init()::Heap_lock_storage+88>) at ./nptl/futex-internal.c:57
11 Thread 0x7609b082f6c0 (LWP 93049) "VM Thread" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b082ed00,
op=137, expected=0, futex_word=0x7609b4902b78 <mutex_init()::VMOperation_lock_storage+88>) at ./nptl/futex-internal.c:57
12 Thread 0x7609b09306c0 (LWP 93048) "VM Periodic Tas" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b092fd20,
op=137, expected=0, futex_word=0x7609b4903d78 <mutex_init()::PeriodicTask_lock_storage+88>) at ./nptl/futex-internal.c:57
13 Thread 0x7609b0b0d6c0 (LWP 93047) "G1 Service" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true,
abstime=0x7609b0b0cd50, op=137, expected=0, futex_word=0x7609ac10bef8) at ./nptl/futex-internal.c:57
14 Thread 0x7609b0c0e6c0 (LWP 93046) "G1 Refine#0" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7609ac10af48) at ./nptl/futex-internal.c:57
15 Thread 0x7609b1c1e6c0 (LWP 93045) "G1 Conc#0" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true,
abstime=0x0, op=393, expected=0, futex_word=0x7609ac058898) at ./nptl/futex-internal.c:57
16 Thread 0x7609b1d1f6c0 (LWP 93044) "G1 Main Marker" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7609b49054f8 <mutex_init()::CGC_lock_storage+88>) at ./nptl/futex-internal.c:57
17 Thread 0x7609b1e206c0 (LWP 93043) "GC Thread#0" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true,
--Type <RET> for more, q to quit, c to continue without paging--
abstime=0x0, op=393, expected=0, futex_word=0x7609ac046848) at ./nptl/futex-internal.c:57
18 Thread 0x7609b33ff6c0 (LWP 93042) "java" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b33fe770,
op=137, expected=0, futex_word=0x7609ac01b978) at ./nptl/futex-internal.c:57
이때는 자바의 Thread.sleep에서 멈췄을 때다 이떄의
rsp rbp를 보면
rbp 0x7609b33fe680 0x7609b33fe680
rsp 0x7609b33fe640 0x7609b33fe640
(gdb) bt
#0 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b33fe770, op=137, expected=0, futex_word=0x7609ac01b978)
at ./nptl/futex-internal.c:57
#1 __futex_abstimed_wait_common (cancel=true, private=0, abstime=0x7609b33fe770, clockid=0, expected=0, futex_word=0x7609ac01b978) at ./nptl/futex-internal.c:87
#2 __GI___futex_abstimed_wait_cancelable64 (futex_word=futex_word@entry=0x7609ac01b978, expected=expected@entry=0, clockid=clockid@entry=1,
abstime=abstime@entry=0x7609b33fe770, private=private@entry=0) at ./nptl/futex-internal.c:139
#3 0x00007609b4a9bc7e in __pthread_cond_wait_common (abstime=0x7609b33fe770, clockid=1, mutex=0x7609ac01b928, cond=0x7609ac01b950)
at ./nptl/pthread_cond_wait.c:503
#4 ___pthread_cond_timedwait64 (cond=0x7609ac01b950, mutex=0x7609ac01b928, abstime=0x7609b33fe770) at ./nptl/pthread_cond_wait.c:652
#5 0x00007609b40f5277 in PlatformEvent::park_nanos (nanos=0, this=0x7609ac01b900) at src/hotspot/os/posix/os_posix.cpp:1591
#6 PlatformEvent::park_nanos (this=this@entry=0x7609ac01b900, nanos=nanos@entry=3000000000) at src/hotspot/os/posix/os_posix.cpp:1560
#7 0x00007609b3d22b14 in JavaThread::sleep_nanos (this=this@entry=0x7609ac0192c0, nanos=nanos@entry=3000000000) at src/hotspot/share/runtime/javaThread.cpp:2051
#8 0x00007609b3ddaa51 in JVM_Sleep (env=0x7609ac019678, threadClass=<optimized out>, nanos=3000000000) at src/hotspot/share/prims/jvm.cpp:3066
#9 0x000076099bc6b9c0 in ?? ()
#10 0x00007609b33fe8c8 in ?? ()
#11 0x000076099bc672a8 in ?? ()
#12 0x00007609b33fe880 in ?? ()
#13 0x0000000000000000 in ?? ()
bt를 보면 내가 공부한 대로 보면 .cpp인 frame 0~8은 네이티브스택을 사용하고 9~13은 자바 스택을 사용한다.
아래는 라이브러리의 sleep에서 멈춘 상황
1 Thread 0x7609b4d39b80 (LWP 93041) "java" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265,
expected=93042, futex_word=0x7609b33ff990) at ./nptl/futex-internal.c:57
2 Thread 0x760980dff6c0 (LWP 93058) "Common-Cleaner" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true,
abstime=0x760980dfe430, op=137, expected=0, futex_word=0x7609ac1681b0) at ./nptl/futex-internal.c:57
3 Thread 0x7609abf2e6c0 (LWP 93057) "Notification Th" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, abstime=0x0,
op=393, expected=0, futex_word=0x7609b4904c78 <mutex_init()::Notification_lock_storage+88>) at ./nptl/futex-internal.c:57
4 Thread 0x7609b012e6c0 (LWP 93056) "C1 CompilerThre" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=11, cancel=true,
abstime=0x7609b012daf0, op=137, expected=0, futex_word=0x7609b49042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
5 Thread 0x7609b022e6c0 (LWP 93055) "C2 CompilerThre" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b022daf0,
op=137, expected=0, futex_word=0x7609b49042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
6 Thread 0x7609b032e6c0 (LWP 93054) "Monitor Deflati" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b032dce0,
op=137, expected=0, futex_word=0x7609b4904d78 <mutex_init()::MonitorDeflation_lock_storage+88>) at ./nptl/futex-internal.c:57
7 Thread 0x7609b042e6c0 (LWP 93053) "Service Thread" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7609b4904cf8 <mutex_init()::Service_lock_storage+88>) at ./nptl/futex-internal.c:57
8 Thread 0x7609b052e6c0 (LWP 93052) "Signal Dispatch" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true,
abstime=0x0, op=393, expected=0, futex_word=0x5feb1631b550) at ./nptl/futex-internal.c:57
9 Thread 0x7609b062e6c0 (LWP 93051) "Finalizer" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7609ac14f878) at ./nptl/futex-internal.c:57
10 Thread 0x7609b072e6c0 (LWP 93050) "Reference Handl" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true, abstime=0x0,
op=393, expected=0, futex_word=0x7609b4902d78 <mutex_init()::Heap_lock_storage+88>) at ./nptl/futex-internal.c:57
11 Thread 0x7609b082f6c0 (LWP 93049) "VM Thread" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b082ed00,
op=137, expected=0, futex_word=0x7609b4902b78 <mutex_init()::VMOperation_lock_storage+88>) at ./nptl/futex-internal.c:57
12 Thread 0x7609b09306c0 (LWP 93048) "VM Periodic Tas" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7609b092fd20,
op=137, expected=0, futex_word=0x7609b4903d78 <mutex_init()::PeriodicTask_lock_storage+88>) at ./nptl/futex-internal.c:57
13 Thread 0x7609b0b0d6c0 (LWP 93047) "G1 Service" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=30217, cancel=true,
abstime=0x7609b0b0cd50, op=137, expected=0, futex_word=0x7609ac10bef8) at ./nptl/futex-internal.c:57
14 Thread 0x7609b0c0e6c0 (LWP 93046) "G1 Refine#0" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7609ac10af48) at ./nptl/futex-internal.c:57
15 Thread 0x7609b1c1e6c0 (LWP 93045) "G1 Conc#0" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true,
abstime=0x0, op=393, expected=0, futex_word=0x7609ac058898) at ./nptl/futex-internal.c:57
16 Thread 0x7609b1d1f6c0 (LWP 93044) "G1 Main Marker" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7609b49054f8 <mutex_init()::CGC_lock_storage+88>) at ./nptl/futex-internal.c:57
17 Thread 0x7609b1e206c0 (LWP 93043) "GC Thread#0" 0x00007609b4a98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true,
--Type <RET> for more, q to quit, c to continue without paging--
abstime=0x0, op=393, expected=0, futex_word=0x7609ac046848) at ./nptl/futex-internal.c:57
18 Thread 0x7609b33ff6c0 (LWP 93042) "java" 0x00007609b4aecadf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0,
req=req@entry=0x7609b33fe8a0, rem=rem@entry=0x7609b33fe8a0) at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
(gdb) thr 18
[Switching to thread 18 (Thread 0x7609b33ff6c0 (LWP 93042))]
#0 0x00007609b4aecadf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7609b33fe8a0, rem=rem@entry=0x7609b33fe8a0)
at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
warning: 78 ../sysdeps/unix/sysv/linux/clock_nanosleep.c: No such file or directory
(gdb) bt
#0 0x00007609b4aecadf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7609b33fe8a0, rem=rem@entry=0x7609b33fe8a0)
at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
#1 0x00007609b4af9a27 in __GI___nanosleep (req=req@entry=0x7609b33fe8a0, rem=rem@entry=0x7609b33fe8a0) at ../sysdeps/unix/sysv/linux/nanosleep.c:25
#2 0x00007609b4b0ec63 in __sleep (seconds=0) at ../sysdeps/posix/sleep.c:55
#3 0x00007609b4d6a1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#4 0x000076099bc6b9c0 in ?? ()
#5 0x0000760923437ef0 in ?? ()
#6 0x0000000000000000 in ?? ()
0~3은 네이티브스택, 4~6은 자바스택을 쓴다
rbp 0x7609b33fe880 0x7609b33fe880
rsp 0x7609b33fe810 0x7609b33fe810
이 상황에서 하나씩 내려가보면
#0 __GI___nanosleep (req=req@entry=0x7609b33fe8a0, rem=rem@entry=0x7609b33fe8a0) at ../sysdeps/unix/sysv/linux/nanosleep.c:26
#1 0x00007609b4b0ec63 in __sleep (seconds=0) at ../sysdeps/posix/sleep.c:55
#2 0x00007609b4d6a1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#3 0x000076099bc6b9c0 in ?? ()
#4 0x0000760923437ef0 in ?? ()
#5 0x0000000000000000 in ?? ()
rbp 0x7609b33fe890 0x7609b33fe890
rsp 0x7609b33fe890 0x7609b33fe890
#0 0x00007609b4b0ec63 in __sleep (seconds=0) at ../sysdeps/posix/sleep.c:55
#1 0x00007609b4d6a1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#2 0x000076099bc6b9c0 in ?? ()
#3 0x0000760923437ef0 in ?? ()
#4 0x0000000000000000 in ?? ()
rbp 0x7609b33fe8d0 0x7609b33fe8d0
rsp 0x7609b33fe8a0 0x7609b33fe8a0
#0 0x00007609b4d6a1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#1 0x000076099bc6b9c0 in ?? ()
#2 0x0000760923437ef0 in ?? ()
#3 0x0000000000000000 in ?? ()
rbp 0x7609b33fe900 0x7609b33fe900
rsp 0x7609b33fe8e0 0x7609b33fe8e0
#0 0x000076099bc6b9c0 in ?? ()
#1 0x0000760923437ef0 in ?? ()
#2 0x0000000000000000 in ?? ()
rbp 0x7609b33fe968 0x7609b33fe968
rsp 0x7609b33fe910 0x7609b33fe910
#0 0x000076099bc6b9c7 in ?? ()
#1 0x00007609b33fe968 in ?? ()
#2 0x000076099bc6b9c0 in ?? ()
#3 0x0000760923437ef0 in ?? ()
#4 0x0000000000000000 in ?? ()
rbp 0x7609b33fe968 0x7609b33fe968
rsp 0x7609b33fe900 0x7609b33fe900
스택 자체는 1개지만 native 메서드를 call할때 전용 스택이 있는 것이 아니라 그냥 스택프레임 모양이 다른것같다.
어느 스택이나
7609b3304000-7609b3400000 rw-p 00000000 00:00 0 여기에 해당하는 메모리를 스택으로 사용한다.
76099bc5f000-76099becf000 rwxp 00000000 00:00 0 여기에는 내가 작성한 자바 코드가 jit으로 컴파일되어 기계어로 들어가있는듯하다
아닌가
#0 0x00007609b4b0ec63 in __sleep (seconds=0) at ../sysdeps/posix/sleep.c:55
#1 0x00007609b4d6a1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#2 0x000076099bc6b9c0 in ?? ()
#3 0x0000760923437ef0 in ?? ()
#4 0x0000000000000000 in ?? ()
#8 0x00007609b3ddaa51 in JVM_Sleep (env=0x7609ac019678, threadClass=<optimized out>, nanos=3000000000) at src/hotspot/share/prims/jvm.cpp:3066
#9 0x000076099bc6b9c0 in ?? ()
#10 0x00007609b33fe8c8 in ?? ()
#11 0x000076099bc672a8 in ?? ()
#12 0x00007609b33fe880 in ?? ()
#13 0x0000000000000000 in ?? ()
보면
c코드 전에
0x76099bc6b9be: call *%rax를 호출하는데
jni코드가 아닐까 추측한다.
그 전 코드들 중에 내 코드가 있는게 아닐까
// MyLibrary.java
public class MyLibrary {
// Load the C library
static {
System.loadLibrary("MyLibrary");
}
// Declare the native method
public native void printMessage();
public static void main(String[] args) {
MyLibrary myLib = new MyLibrary();
// System.out.println("aa");
while(true){
myLib.printMessage(); // Call the native method
System.out.println("aa");
try {
Thread.sleep(1); // 0.5초 대기
int c=0;
for(int i=0;i<2100000000;i++){
c+=i;
}
System.out.println(c);
} catch (InterruptedException e) {
e.printStackTrace();
}
// Thread.sleep(3000); // 0.5초 대기
}
}
}
이런식으로 연산을 엄청해서 늦춰서 break를 걸어보면
418800000-457000000 rw-p 00000000 00:00 0
457000000-7ff800000 ---p 00000000 00:00 0
7ff800000-7ff908000 rw-p 00ced000 103:0a 17185179 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/classes.jsa
7ff908000-800000000 rw-p 00000000 00:00 0
5ab5f1272000-5ab5f1273000 r--p 00000000 103:0a 17185026 /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5ab5f1273000-5ab5f1274000 r-xp 00001000 103:0a 17185026 /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5ab5f1274000-5ab5f1275000 r--p 00002000 103:0a 17185026 /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5ab5f1275000-5ab5f1276000 r--p 00002000 103:0a 17185026 /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5ab5f1276000-5ab5f1277000 rw-p 00003000 103:0a 17185026 /usr/lib/jvm/java-21-openjdk-amd64/bin/java
5ab5f2bbc000-5ab5f2c03000 rw-p 00000000 00:00 0 [heap]
7a4af8000000-7a4af8021000 rw-p 00000000 00:00 0
7a4af8021000-7a4afc000000 ---p 00000000 00:00 0
7a4afc000000-7a4afc021000 rw-p 00000000 00:00 0
7a4afc021000-7a4b00000000 ---p 00000000 00:00 0
7a4b04000000-7a4b0402d000 rw-p 00000000 00:00 0
7a4b0402d000-7a4b08000000 ---p 00000000 00:00 0
7a4b08000000-7a4b0810b000 rw-p 00000000 00:00 0
7a4b0810b000-7a4b0c000000 ---p 00000000 00:00 0
7a4b10000000-7a4b10021000 rw-p 00000000 00:00 0
7a4b10021000-7a4b14000000 ---p 00000000 00:00 0
7a4b14000000-7a4b14021000 rw-p 00000000 00:00 0
7a4b14021000-7a4b18000000 ---p 00000000 00:00 0
7a4b1c000000-7a4b1c021000 rw-p 00000000 00:00 0
7a4b1c021000-7a4b20000000 ---p 00000000 00:00 0
7a4b20000000-7a4b20021000 rw-p 00000000 00:00 0
7a4b20021000-7a4b24000000 ---p 00000000 00:00 0
7a4b28000000-7a4b28021000 rw-p 00000000 00:00 0
7a4b28021000-7a4b2c000000 ---p 00000000 00:00 0
7a4b2c000000-7a4b2c021000 rw-p 00000000 00:00 0
7a4b2c021000-7a4b30000000 ---p 00000000 00:00 0
7a4b34000000-7a4b34020000 rw-p 00000000 00:00 0
7a4b34020000-7a4b34400000 ---p 00000000 00:00 0
7a4b34400000-7a4b34410000 rw-p 00000000 00:00 0
7a4b34410000-7a4b38000000 ---p 00000000 00:00 0
7a4b38000000-7a4b38021000 rw-p 00000000 00:00 0
7a4b38021000-7a4b3c000000 ---p 00000000 00:00 0
7a4b3f000000-7a4b3fcae000 rw-p 00001000 103:0a 17185179 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/classes.jsa
7a4b3fcae000-7a4b40000000 ---p 00000000 00:00 0
7a4b40000000-7a4b40010000 rw-p 00000000 00:00 0
7a4b40010000-7a4b40040000 ---p 00000000 00:00 0
7a4b40040000-7a4b40050000 rw-p 00000000 00:00 0
7a4b40050000-7a4b80000000 ---p 00000000 00:00 0
7a4b80000000-7a4b80021000 rw-p 00000000 00:00 0
7a4b80021000-7a4b84000000 ---p 00000000 00:00 0
7a4b84000000-7a4b84021000 rw-p 00000000 00:00 0
7a4b84021000-7a4b88000000 ---p 00000000 00:00 0
7a4b8bf00000-7a4b8bf04000 ---p 00000000 00:00 0
7a4b8bf04000-7a4b8c000000 rw-p 00000000 00:00 0
7a4b8c000000-7a4b8c021000 rw-p 00000000 00:00 0
7a4b8c021000-7a4b90000000 ---p 00000000 00:00 0
7a4b90000000-7a4b90021000 rw-p 00000000 00:00 0
7a4b90021000-7a4b94004000 ---p 00000000 00:00 0
7a4b94004000-7a4b94100000 rw-p 00000000 00:00 0
7a4b94100000-7a4b94104000 ---p 00000000 00:00 0
7a4b94104000-7a4b94200000 rw-p 00000000 00:00 0
7a4b94200000-7a4b94204000 ---p 00000000 00:00 0
7a4b94204000-7a4b94300000 rw-p 00000000 00:00 0
7a4b94300000-7a4b94304000 ---p 00000000 00:00 0
7a4b94304000-7a4b94400000 rw-p 00000000 00:00 0
7a4b94400000-7a4b94404000 ---p 00000000 00:00 0
7a4b94404000-7a4b94500000 rw-p 00000000 00:00 0
7a4b94500000-7a4b94504000 ---p 00000000 00:00 0
7a4b94504000-7a4b94600000 rw-p 00000000 00:00 0
7a4b94600000-7a4b94604000 ---p 00000000 00:00 0
7a4b94604000-7a4b94700000 rw-p 00000000 00:00 0
7a4b94700000-7a4b94704000 ---p 00000000 00:00 0
7a4b94704000-7a4b94800000 rw-p 00000000 00:00 0
7a4b94800000-7a4b95736000 r--p 00000000 103:0a 16517754 /usr/lib/locale/locale-archive
7a4b957f8000-7a4b957f9000 ---p 00000000 00:00 0
7a4b957f9000-7a4b958f9000 rw-p 00000000 00:00 0
7a4b958f9000-7a4b958fa000 ---p 00000000 00:00 0
7a4b958fa000-7a4b959fa000 rw-p 00000000 00:00 0
7a4b959fa000-7a4b959fb000 ---p 00000000 00:00 0
7a4b959fb000-7a4b95afb000 rw-p 00000000 00:00 0
7a4b95afb000-7a4b95afc000 ---p 00000000 00:00 0
7a4b95afc000-7a4b95bfc000 rw-p 00000000 00:00 0
7a4b95bfc000-7a4b98021000 rw-p 00000000 00:00 0
7a4b98021000-7a4b9c000000 ---p 00000000 00:00 0
7a4b9c022000-7a4b9c027000 r--p 00000000 103:0a 17185160 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7a4b9c027000-7a4b9c068000 r-xp 00005000 103:0a 17185160 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7a4b9c068000-7a4b9c0f1000 r--p 00046000 103:0a 17185160 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7a4b9c0f1000-7a4b9c0f2000 r--p 000ce000 103:0a 17185160 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7a4b9c0f2000-7a4b9c0f3000 rw-p 000cf000 103:0a 17185160 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjsvml.so
7a4b9c0f3000-7a4b9cbfe000 rw-p 00000000 00:00 0
7a4b9cbfe000-7a4b9cbff000 ---p 00000000 00:00 0
7a4b9cbff000-7a4b9ccff000 rw-p 00000000 00:00 0
7a4b9ccff000-7a4b9cd00000 ---p 00000000 00:00 0
7a4b9cd00000-7a4b9ce00000 rw-p 00000000 00:00 0
7a4b9ce00000-7a4b9dda0000 rw-p 00000000 00:00 0
7a4b9dda0000-7a4bac7c0000 ---p 00000000 00:00 0
7a4bac7c0000-7a4bac7e0000 rw-p 00000000 00:00 0
7a4bac800000-7a4bac9f4000 rw-p 00000000 00:00 0
7a4bac9f4000-7a4bae738000 ---p 00000000 00:00 0
7a4bae738000-7a4bae73c000 rw-p 00000000 00:00 0
7a4bae800000-7a4bae9f4000 rw-p 00000000 00:00 0
7a4bae9f4000-7a4bb0738000 ---p 00000000 00:00 0
7a4bb0738000-7a4bb073c000 rw-p 00000000 00:00 0
7a4bb0800000-7a4bb0a70000 rwxp 00000000 00:00 0
7a4bb0a70000-7a4bb7c5f000 ---p 00000000 00:00 0
7a4bb7c5f000-7a4bb7ecf000 rwxp 00000000 00:00 0
7a4bb7ecf000-7a4bb83a0000 ---p 00000000 00:00 0
7a4bb83a0000-7a4bb8610000 rwxp 00000000 00:00 0
7a4bb8610000-7a4bbf800000 ---p 00000000 00:00 0
7a4bbf800000-7a4bc7e02000 r--s 00000000 103:0a 17185176 /usr/lib/jvm/java-21-openjdk-amd64/lib/modules
7a4bc7e7e000-7a4bc7eff000 rw-p 00000000 00:00 0
7a4bc7eff000-7a4bc7f00000 ---p 00000000 00:00 0
7a4bc7f00000-7a4bc8000000 rw-p 00000000 00:00 0
7a4bc8000000-7a4bc8176000 rw-p 00000000 00:00 0
7a4bc8176000-7a4bcc000000 ---p 00000000 00:00 0
7a4bcc021000-7a4bcd033000 rw-p 00000000 00:00 0
7a4bcd033000-7a4bcd117000 ---p 00000000 00:00 0
7a4bcd117000-7a4bcd11c000 rw-p 00000000 00:00 0
7a4bcd11c000-7a4bcd200000 ---p 00000000 00:00 0
7a4bcd200000-7a4bcd29d000 r--p 00000000 103:0a 16526993 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7a4bcd29d000-7a4bcd3dd000 r-xp 0009d000 103:0a 16526993 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7a4bcd3dd000-7a4bcd46b000 r--p 001dd000 103:0a 16526993 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7a4bcd46b000-7a4bcd476000 r--p 0026b000 103:0a 16526993 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7a4bcd476000-7a4bcd479000 rw-p 00276000 103:0a 16526993 /usr/lib/x86_64-linux-gnu/libstdc++.so.6.0.33
7a4bcd479000-7a4bcd47d000 rw-p 00000000 00:00 0
7a4bcd4a5000-7a4bcd500000 rw-p 00000000 00:00 0
7a4bcd500000-7a4bcd504000 ---p 00000000 00:00 0
7a4bcd504000-7a4bcd600000 rw-p 00000000 00:00 0
7a4bcd600000-7a4bcd896000 r--p 00000000 103:0a 17185182 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7a4bcd896000-7a4bce6fe000 r-xp 00296000 103:0a 17185182 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7a4bce6fe000-7a4bce9d1000 r--p 010fe000 103:0a 17185182 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7a4bce9d1000-7a4bceaa1000 r--p 013d0000 103:0a 17185182 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7a4bceaa1000-7a4bcead1000 rw-p 014a0000 103:0a 17185182 /usr/lib/jvm/java-21-openjdk-amd64/lib/server/libjvm.so
7a4bcead1000-7a4bceb37000 rw-p 00000000 00:00 0
7a4bceb42000-7a4bcec00000 rw-p 00000000 00:00 0
7a4bcec00000-7a4bcec28000 r--p 00000000 103:0a 16526467 /usr/lib/x86_64-linux-gnu/libc.so.6
7a4bcec28000-7a4bcedb0000 r-xp 00028000 103:0a 16526467 /usr/lib/x86_64-linux-gnu/libc.so.6
7a4bcedb0000-7a4bcedff000 r--p 001b0000 103:0a 16526467 /usr/lib/x86_64-linux-gnu/libc.so.6
7a4bcedff000-7a4bcee03000 r--p 001fe000 103:0a 16526467 /usr/lib/x86_64-linux-gnu/libc.so.6
7a4bcee03000-7a4bcee05000 rw-p 00202000 103:0a 16526467 /usr/lib/x86_64-linux-gnu/libc.so.6
7a4bcee05000-7a4bcee12000 rw-p 00000000 00:00 0
7a4bcee3c000-7a4bcee80000 rw-p 00000000 00:00 0
7a4bcee80000-7a4bcee8a000 ---p 00000000 00:00 0
7a4bcee8a000-7a4bcee97000 r--p 00000000 103:0a 17185153 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7a4bcee97000-7a4bceea6000 r-xp 0000d000 103:0a 17185153 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7a4bceea6000-7a4bceeab000 r--p 0001c000 103:0a 17185153 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7a4bceeab000-7a4bceeac000 r--p 00021000 103:0a 17185153 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7a4bceeac000-7a4bceead000 rw-p 00022000 103:0a 17185153 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjava.so
7a4bceead000-7a4bceeae000 rw-p 00000000 00:00 0
7a4bceeae000-7a4bceeb6000 rw-s 00000000 103:0a 17301594 /tmp/hsperfdata_yeongjae/96036
7a4bceeb6000-7a4bceeba000 r--p 00000000 103:0a 16526600 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7a4bceeba000-7a4bceedd000 r-xp 00004000 103:0a 16526600 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7a4bceedd000-7a4bceee1000 r--p 00027000 103:0a 16526600 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7a4bceee1000-7a4bceee2000 r--p 0002b000 103:0a 16526600 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7a4bceee2000-7a4bceee3000 rw-p 0002c000 103:0a 16526600 /usr/lib/x86_64-linux-gnu/libgcc_s.so.1
7a4bceee3000-7a4bceef3000 r--p 00000000 103:0a 16526772 /usr/lib/x86_64-linux-gnu/libm.so.6
7a4bceef3000-7a4bcef72000 r-xp 00010000 103:0a 16526772 /usr/lib/x86_64-linux-gnu/libm.so.6
7a4bcef72000-7a4bcefca000 r--p 0008f000 103:0a 16526772 /usr/lib/x86_64-linux-gnu/libm.so.6
7a4bcefca000-7a4bcefcb000 r--p 000e7000 103:0a 16526772 /usr/lib/x86_64-linux-gnu/libm.so.6
7a4bcefcb000-7a4bcefcc000 rw-p 000e8000 103:0a 16526772 /usr/lib/x86_64-linux-gnu/libm.so.6
7a4bcefcc000-7a4bcefce000 rw-p 00000000 00:00 0
7a4bcefce000-7a4bcefd0000 r--p 00000000 103:0a 17185157 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7a4bcefd0000-7a4bcefda000 r-xp 00002000 103:0a 17185157 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7a4bcefda000-7a4bcefdd000 r--p 0000c000 103:0a 17185157 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7a4bcefdd000-7a4bcefde000 r--p 0000f000 103:0a 17185157 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7a4bcefde000-7a4bcefdf000 rw-p 00010000 103:0a 17185157 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjli.so
7a4bcefdf000-7a4bcefe1000 r--p 00000000 103:0a 16527124 /usr/lib/x86_64-linux-gnu/libz.so.1.3
7a4bcefe1000-7a4bceff3000 r-xp 00002000 103:0a 16527124 /usr/lib/x86_64-linux-gnu/libz.so.1.3
7a4bceff3000-7a4bceff9000 r--p 00014000 103:0a 16527124 /usr/lib/x86_64-linux-gnu/libz.so.1.3
7a4bceff9000-7a4bceffa000 r--p 0001a000 103:0a 16527124 /usr/lib/x86_64-linux-gnu/libz.so.1.3
7a4bceffa000-7a4bceffb000 rw-p 0001b000 103:0a 16527124 /usr/lib/x86_64-linux-gnu/libz.so.1.3
7a4bceffc000-7a4bceffd000 r--p 00000000 103:0a 11431798 /home/yeongjae/Desktop/java_test/libMyLibrary.so
7a4bceffd000-7a4bceffe000 r-xp 00001000 103:0a 11431798 /home/yeongjae/Desktop/java_test/libMyLibrary.so
7a4bceffe000-7a4bcefff000 r--p 00002000 103:0a 11431798 /home/yeongjae/Desktop/java_test/libMyLibrary.so
7a4bcefff000-7a4bcf000000 r--p 00002000 103:0a 11431798 /home/yeongjae/Desktop/java_test/libMyLibrary.so
7a4bcf000000-7a4bcf001000 rw-p 00003000 103:0a 11431798 /home/yeongjae/Desktop/java_test/libMyLibrary.so
7a4bcf001000-7a4bcf002000 ---p 00000000 00:00 0
7a4bcf002000-7a4bcf003000 r--p 00000000 00:00 0
7a4bcf003000-7a4bcf004000 ---p 00000000 00:00 0
7a4bcf004000-7a4bcf006000 r--p 00000000 103:0a 17185156 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7a4bcf006000-7a4bcf009000 r-xp 00002000 103:0a 17185156 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7a4bcf009000-7a4bcf00a000 r--p 00005000 103:0a 17185156 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7a4bcf00a000-7a4bcf00b000 r--p 00006000 103:0a 17185156 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7a4bcf00b000-7a4bcf00c000 rw-p 00007000 103:0a 17185156 /usr/lib/jvm/java-21-openjdk-amd64/lib/libjimage.so
7a4bcf00c000-7a4bcf00e000 rw-p 00000000 00:00 0
7a4bcf00e000-7a4bcf00f000 r--p 00000000 103:0a 16526285 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7a4bcf00f000-7a4bcf03a000 r-xp 00001000 103:0a 16526285 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7a4bcf03a000-7a4bcf044000 r--p 0002c000 103:0a 16526285 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7a4bcf044000-7a4bcf046000 r--p 00036000 103:0a 16526285 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7a4bcf046000-7a4bcf048000 rw-p 00038000 103:0a 16526285 /usr/lib/x86_64-linux-gnu/ld-linux-x86-64.so.2
7ffc5a00a000-7ffc5a02b000 rw-p 00000000 00:00 0 [stack]
7ffc5a1b7000-7ffc5a1bb000 r--p 00000000 00:00 0 [vvar]
7ffc5a1bb000-7ffc5a1bd000 r-xp 00000000 00:00 0 [vdso]
ffffffffff600000-ffffffffff601000 --xp 00000000 00:00 0 [vsyscall]
1 Thread 0x7a4bcefccb80 (LWP 96036) "java" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=128, cancel=true, abstime=0x0, op=265,
expected=96037, futex_word=0x7a4bcd5ff990) at ./nptl/futex-internal.c:57
2 Thread 0x7a4b8bfff6c0 (LWP 96053) "Common-Cleaner" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7a4b8bffe430,
op=137, expected=0, futex_word=0x7a4bc81681b0) at ./nptl/futex-internal.c:57
3 Thread 0x7a4b940ff6c0 (LWP 96052) "Notification Th" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=31307, cancel=true, abstime=0x0,
op=393, expected=0, futex_word=0x7a4bceb04c78 <mutex_init()::Notification_lock_storage+88>) at ./nptl/futex-internal.c:57
4 Thread 0x7a4b941ff6c0 (LWP 96051) "C1 CompilerThre" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=12, cancel=true,
abstime=0x7a4b941feaf0, op=137, expected=0, futex_word=0x7a4bceb042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
5 Thread 0x7a4b942ff6c0 (LWP 96050) "C2 CompilerThre" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=12, cancel=true,
abstime=0x7a4b942feaf0, op=137, expected=0, futex_word=0x7a4bceb042fc <mutex_init()::MethodCompileQueue_lock_storage+92>) at ./nptl/futex-internal.c:57
6 Thread 0x7a4b943ff6c0 (LWP 96049) "Monitor Deflati" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=31307, cancel=true,
abstime=0x7a4b943fece0, op=137, expected=0, futex_word=0x7a4bceb04d78 <mutex_init()::MonitorDeflation_lock_storage+88>) at ./nptl/futex-internal.c:57
7 Thread 0x7a4b944ff6c0 (LWP 96048) "Service Thread" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7a4bceb04cf8 <mutex_init()::Service_lock_storage+88>) at ./nptl/futex-internal.c:57
8 Thread 0x7a4b945ff6c0 (LWP 96047) "Signal Dispatch" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true,
abstime=0x0, op=393, expected=0, futex_word=0x5ab5f2bbd550) at ./nptl/futex-internal.c:57
9 Thread 0x7a4b946ff6c0 (LWP 96046) "Finalizer" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7a4bc814f878) at ./nptl/futex-internal.c:57
10 Thread 0x7a4b947ff6c0 (LWP 96045) "Reference Handl" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=31307, cancel=true, abstime=0x0,
op=393, expected=0, futex_word=0x7a4bceb02d78 <mutex_init()::Heap_lock_storage+88>) at ./nptl/futex-internal.c:57
11 Thread 0x7a4b958f86c0 (LWP 96044) "VM Thread" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7a4b958f7d00,
op=137, expected=0, futex_word=0x7a4bceb02b78 <mutex_init()::VMOperation_lock_storage+88>) at ./nptl/futex-internal.c:57
12 Thread 0x7a4b959f96c0 (LWP 96043) "VM Periodic Tas" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x7a4b959f8d20,
op=137, expected=0, futex_word=0x7a4bceb03d78 <mutex_init()::PeriodicTask_lock_storage+88>) at ./nptl/futex-internal.c:57
13 Thread 0x7a4b95afa6c0 (LWP 96042) "G1 Service" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=31307, cancel=true,
abstime=0x7a4b95af9d50, op=137, expected=0, futex_word=0x7a4bc810bef8) at ./nptl/futex-internal.c:57
14 Thread 0x7a4b95bfb6c0 (LWP 96041) "G1 Refine#0" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7a4bc810af48) at ./nptl/futex-internal.c:57
15 Thread 0x7a4b9ccfe6c0 (LWP 96040) "G1 Conc#0" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true,
abstime=0x0, op=393, expected=0, futex_word=0x7a4bc8058898) at ./nptl/futex-internal.c:57
16 Thread 0x7a4b9cdff6c0 (LWP 96039) "G1 Main Marker" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=0, cancel=true, abstime=0x0, op=393,
expected=0, futex_word=0x7a4bceb054f8 <mutex_init()::CGC_lock_storage+88>) at ./nptl/futex-internal.c:57
17 Thread 0x7a4bc7fff6c0 (LWP 96038) "GC Thread#0" 0x00007a4bcec98d61 in __futex_abstimed_wait_common64 (private=<optimized out>, cancel=true,
--Type <RET> for more, q to quit, c to continue without paging--
abstime=0x0, op=393, expected=0, futex_word=0x7a4bc8046848) at ./nptl/futex-internal.c:57
18 Thread 0x7a4bcd5ff6c0 (LWP 96037) "java" 0x00007a4bb83a0f02 in ?? ()
#0 0x00007a4bb83a0f02 in ?? ()
#1 0x0000000456812a08 in ?? ()
#2 0x0000000456801310 in ?? ()
#3 0x0000000000017138 in ?? ()
#4 0x00000000000f4240 in ?? ()
#5 0x0000000000000000 in ?? ()
0x7a4bb83a0ed0: add %ebx,%r13d
0x7a4bb83a0ed3: add %ebx,%r13d
0x7a4bb83a0ed6: add %ebx,%r13d
0x7a4bb83a0ed9: add %ebx,%r13d
0x7a4bb83a0edc: add %ebx,%r13d
0x7a4bb83a0edf: add %ebx,%r13d
0x7a4bb83a0ee2: add %ebx,%r13d
0x7a4bb83a0ee5: add %ebx,%r13d
0x7a4bb83a0ee8: add %ebx,%r13d
0x7a4bb83a0eeb: add %ebx,%r13d
0x7a4bb83a0eee: add %ebx,%r13d
0x7a4bb83a0ef1: add %ebx,%r13d
0x7a4bb83a0ef4: add %ebx,%r13d
0x7a4bb83a0ef7: add %ebx,%r13d
0x7a4bb83a0efa: add %ebx,%r13d
0x7a4bb83a0efd: lea 0x78(%r13,%rbx,1),%r13d
0x7a4bb83a0f02: add $0x10,%ebx
0x7a4bb83a0f05: cmp %r11d,%ebx
0x7a4bb83a0f08: jl 0x7a4bb83a0ed0
이런식으로 루프가 있다
rsp 0x7a4bcd5fe9a0 0x7a4bcd5fe9a0
rbx값을 조작하니까 결과값이 달라짐
#0 0x00007a4bcececadf in __GI___clock_nanosleep (clock_id=clock_id@entry=0, flags=flags@entry=0, req=req@entry=0x7a4bcd5fe8b0, rem=rem@entry=0x7a4bcd5fe8b0)
at ../sysdeps/unix/sysv/linux/clock_nanosleep.c:78
#1 0x00007a4bcecf9a27 in __GI___nanosleep (req=req@entry=0x7a4bcd5fe8b0, rem=rem@entry=0x7a4bcd5fe8b0) at ../sysdeps/unix/sysv/linux/nanosleep.c:25
#2 0x00007a4bced0ec63 in __sleep (seconds=0) at ../sysdeps/posix/sleep.c:55
#3 0x00007a4bceffd1a8 in Java_MyLibrary_printMessage () from /home/yeongjae/Desktop/java_test/libMyLibrary.so
#4 0x00007a4bb7c6b9c0 in ?? ()
#5 0x00000004568088e0 in ?? ()
#6 0x00007a4bcd5fe928 in ?? ()
#7 0x0000000000000000 in ?? ()
라이브러리 sleep함수 때
rbp 0x7a4bcd5fe890 0x7a4bcd5fe890
rsp 0x7a4bcd5fe820 0x7a4bcd5fe820
7a4bb83a0000-7a4bb8610000 rwxp 00000000 00:00 0 여기에 코드가 있고
7a4bb7c5f000-7a4bb7ecf000 rwxp 00000000 00:00 0 여기엔 아마 jni관련 코드가 있는거같다.