diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..4fc82c1
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml
new file mode 100644
index 0000000..db0f74e
--- /dev/null
+++ b/.idea/inspectionProfiles/Project_Default.xml
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml
new file mode 100644
index 0000000..b074d70
--- /dev/null
+++ b/.idea/jarRepositories.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
index 6f29fee..fdc35ea 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -1,5 +1,13 @@
+
+
+
+
diff --git a/java_test.iml b/java_test.iml
index c90834f..a80f8af 100644
--- a/java_test.iml
+++ b/java_test.iml
@@ -1,11 +1,8 @@
-
-
-
+
+
-
-
\ No newline at end of file
diff --git a/pom.xml b/pom.xml
new file mode 100644
index 0000000..23124b4
--- /dev/null
+++ b/pom.xml
@@ -0,0 +1,38 @@
+
+
+ 4.0.0
+
+ com.kuaslab
+ java-learning
+ 1.0-SNAPSHOT
+
+
+ 21
+ 21
+
+
+
+
+ org.openjdk.jol
+ jol-core
+ 0.17
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+ {maven.compiler.source}
+ {maven.compiler.target}
+
+
+
+
+
+
\ No newline at end of file
diff --git a/src/jvm/ObjectCreate.java b/src/main/java/jvm/ObjectCreate.java
similarity index 79%
rename from src/jvm/ObjectCreate.java
rename to src/main/java/jvm/ObjectCreate.java
index 1431aad..3af3da1 100644
--- a/src/jvm/ObjectCreate.java
+++ b/src/main/java/jvm/ObjectCreate.java
@@ -1,7 +1,7 @@
-package jvm;
+package main.java.jvm;
/**
- * This class is intended to demo how jvm create object and invoke constructor. Please see byte code.
+ * This class is intended to demo how main.java.jvm create object and invoke constructor. Please see byte code.
* use javap -v ObjectCreate.class or javap -c ObjectCreate.class to see byte code
*/
public class ObjectCreate {
diff --git a/src/main/java/jvm/ShowObjectHeader.java b/src/main/java/jvm/ShowObjectHeader.java
new file mode 100644
index 0000000..ec89b7d
--- /dev/null
+++ b/src/main/java/jvm/ShowObjectHeader.java
@@ -0,0 +1,42 @@
+package jvm;
+
+import org.openjdk.jol.info.ClassLayout;
+
+public class ShowObjectHeader {
+
+ static final Object lock = new Object();
+
+ public void syncObject() {
+ synchronized (lock) {
+ try {
+ Thread.sleep(1000);
+ System.out.println("enter sync");
+ System.out.println(ClassLayout.parseInstance(lock).toPrintable());
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+
+ public static void main(String[] args) throws InterruptedException {
+ ShowObjectHeader showObjectHeader = new ShowObjectHeader();
+ System.out.println("newly created");
+ System.out.println(ClassLayout.parseInstance(lock).toPrintable());
+
+ Thread t1 = new Thread(showObjectHeader::syncObject);
+ t1.start();
+ t1.join();
+
+ Thread t2 = new Thread(showObjectHeader::syncObject);
+ Thread t3 = new Thread(showObjectHeader::syncObject);
+
+ t2.start();
+ t3.start();
+
+ t2.join();
+ t3.join();
+ System.out.println("after sync");
+ System.out.println(ClassLayout.parseInstance(lock).toPrintable());
+
+ }
+}
diff --git a/src/createthread/CreateByAnonymousClass.java b/src/main/java/jvm/createthread/CreateByAnonymousClass.java
similarity index 91%
rename from src/createthread/CreateByAnonymousClass.java
rename to src/main/java/jvm/createthread/CreateByAnonymousClass.java
index 6643a7d..13188b0 100644
--- a/src/createthread/CreateByAnonymousClass.java
+++ b/src/main/java/jvm/createthread/CreateByAnonymousClass.java
@@ -1,4 +1,4 @@
-package createthread;
+package main.java.jvm.createthread;
public class CreateByAnonymousClass {
diff --git a/src/createthread/CreateByCallable.java b/src/main/java/jvm/createthread/CreateByCallable.java
similarity index 94%
rename from src/createthread/CreateByCallable.java
rename to src/main/java/jvm/createthread/CreateByCallable.java
index 1fe5eba..d038c09 100644
--- a/src/createthread/CreateByCallable.java
+++ b/src/main/java/jvm/createthread/CreateByCallable.java
@@ -1,4 +1,4 @@
-package createthread;
+package main.java.jvm.createthread;
import java.util.concurrent.Callable;
import java.util.concurrent.FutureTask;
diff --git a/src/createthread/CreateByCompletableFuture.java b/src/main/java/jvm/createthread/CreateByCompletableFuture.java
similarity index 96%
rename from src/createthread/CreateByCompletableFuture.java
rename to src/main/java/jvm/createthread/CreateByCompletableFuture.java
index f4409c0..0c09314 100644
--- a/src/createthread/CreateByCompletableFuture.java
+++ b/src/main/java/jvm/createthread/CreateByCompletableFuture.java
@@ -1,4 +1,4 @@
-package createthread;
+package main.java.jvm.createthread;
import java.util.concurrent.CompletableFuture;
import java.util.concurrent.ExecutionException;
diff --git a/src/createthread/CreateByExecutorService.java b/src/main/java/jvm/createthread/CreateByExecutorService.java
similarity index 94%
rename from src/createthread/CreateByExecutorService.java
rename to src/main/java/jvm/createthread/CreateByExecutorService.java
index 0f775b7..72f3de3 100644
--- a/src/createthread/CreateByExecutorService.java
+++ b/src/main/java/jvm/createthread/CreateByExecutorService.java
@@ -1,4 +1,4 @@
-package createthread;
+package main.java.jvm.createthread;
import java.util.concurrent.*;
diff --git a/src/createthread/CreateByForkJoin.java b/src/main/java/jvm/createthread/CreateByForkJoin.java
similarity index 92%
rename from src/createthread/CreateByForkJoin.java
rename to src/main/java/jvm/createthread/CreateByForkJoin.java
index 5fd769d..ac1e6ad 100644
--- a/src/createthread/CreateByForkJoin.java
+++ b/src/main/java/jvm/createthread/CreateByForkJoin.java
@@ -1,4 +1,4 @@
-package createthread;
+package main.java.jvm.createthread;
import java.util.Arrays;
import java.util.List;
diff --git a/src/createthread/CreateByFutureTask.java b/src/main/java/jvm/createthread/CreateByFutureTask.java
similarity index 91%
rename from src/createthread/CreateByFutureTask.java
rename to src/main/java/jvm/createthread/CreateByFutureTask.java
index 1dcbfa3..973d233 100644
--- a/src/createthread/CreateByFutureTask.java
+++ b/src/main/java/jvm/createthread/CreateByFutureTask.java
@@ -1,4 +1,4 @@
-package createthread;
+package main.java.jvm.createthread;
import java.util.concurrent.FutureTask;
diff --git a/src/createthread/CreateByRunnable.java b/src/main/java/jvm/createthread/CreateByRunnable.java
similarity index 90%
rename from src/createthread/CreateByRunnable.java
rename to src/main/java/jvm/createthread/CreateByRunnable.java
index 5948c5e..636dfeb 100644
--- a/src/createthread/CreateByRunnable.java
+++ b/src/main/java/jvm/createthread/CreateByRunnable.java
@@ -1,4 +1,4 @@
-package createthread;
+package main.java.jvm.createthread;
public class CreateByRunnable implements Runnable{
@Override
diff --git a/src/createthread/CreateByThread.java b/src/main/java/jvm/createthread/CreateByThread.java
similarity index 89%
rename from src/createthread/CreateByThread.java
rename to src/main/java/jvm/createthread/CreateByThread.java
index 5bab5b2..88ffb25 100644
--- a/src/createthread/CreateByThread.java
+++ b/src/main/java/jvm/createthread/CreateByThread.java
@@ -1,4 +1,4 @@
-package createthread;
+package main.java.jvm.createthread;
public class CreateByThread extends Thread{
@Override
diff --git a/src/createthread/CreateByThreadGroup.java b/src/main/java/jvm/createthread/CreateByThreadGroup.java
similarity index 93%
rename from src/createthread/CreateByThreadGroup.java
rename to src/main/java/jvm/createthread/CreateByThreadGroup.java
index 2c907d0..9ca8961 100644
--- a/src/createthread/CreateByThreadGroup.java
+++ b/src/main/java/jvm/createthread/CreateByThreadGroup.java
@@ -1,4 +1,4 @@
-package createthread;
+package main.java.jvm.createthread;
public class CreateByThreadGroup {
diff --git a/src/createthread/CreateByTimer.java b/src/main/java/jvm/createthread/CreateByTimer.java
similarity index 91%
rename from src/createthread/CreateByTimer.java
rename to src/main/java/jvm/createthread/CreateByTimer.java
index b4222bb..706dd20 100644
--- a/src/createthread/CreateByTimer.java
+++ b/src/main/java/jvm/createthread/CreateByTimer.java
@@ -1,4 +1,4 @@
-package createthread;
+package main.java.jvm.createthread;
import java.util.Timer;
import java.util.TimerTask;
diff --git a/src/recursive/TreeNode.java b/src/main/java/recursive/TreeNode.java
similarity index 96%
rename from src/recursive/TreeNode.java
rename to src/main/java/recursive/TreeNode.java
index be85746..30b7814 100644
--- a/src/recursive/TreeNode.java
+++ b/src/main/java/recursive/TreeNode.java
@@ -1,4 +1,4 @@
-package recursive;
+package main.java.recursive;
import java.util.ArrayList;
import java.util.List;
diff --git a/src/recursive/TreeStructure.java b/src/main/java/recursive/TreeStructure.java
similarity index 97%
rename from src/recursive/TreeStructure.java
rename to src/main/java/recursive/TreeStructure.java
index 10fb3c0..ef848ca 100644
--- a/src/recursive/TreeStructure.java
+++ b/src/main/java/recursive/TreeStructure.java
@@ -1,4 +1,4 @@
-package recursive;
+package main.java.recursive;
import java.util.*;