JVM中的堆 栈 多线程 引用传递 等

memo一下。

前段时间给公司新人培训技术,想讲一讲JVM中的运行机制,结果没有讲好,后来反过来发现自己也是很多概念不清。

 

1. JVM的启动是作为进程启动,由main主函数启

     main主函数启动JVM -> 分配堆-> 生成主线程(main所在class的执行线程) ,生成守护线程 -> 调用classloader加载对象

 

2. JVM的核心数据存储区域叫做 

    堆中为JVM的所有对象分配了内存空间用以存储和维护变量值等等

 

3. 每个线程会生成一个自有的线程栈

    线程栈中存储了该线程的基本数据常量变量值,和对象常变量的引用

 

4.每个线程执行的时候,是根据代码顺序,压栈(Question 谁来压栈? JVM?)

    但是对象变量的执行不是这样。

    对象变量的执行依靠的是,线程根据栈中的引用去堆上同步该对象数据下来,然后在进行操作。

    操作之后再将线程栈上的运算结果同步上堆中。

    这也就是为什么基本数据在传入方法中执行的时候本身不会发生变化,而对象会发生变化。

 

5.Java线程问题的本质就在于线程中并没有存放任何对象数据

    所有的对象数据都存在JVM的堆中,因此需要对资源进行共享锁。

 

6.从上述来看,Java中的线程只能算是一个指令执行片段

    而JVM才是真正的对象的拥有者。

 

最后,总结一下,自己要多看看基本好书了。

《深入理解Java拟机:JVM级特性与最佳实践》这本书不错

回国买了

 

你可能感兴趣的:(JVM中的堆 栈 多线程 引用传递 等)