##主内存和工作内存
java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的细节。这里的变量指的是
实例字段
,静态字段
和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享。自然不会有竞争问题java内存模型规定所有的变量都在主内存中(即方法区和堆中),线程的工作内存中保存了被该线程使用 到的变量的主内存拷贝副本。,线程对变量的修改和使用都必须在自己的工作内存中。
##主内存和工作内存
java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的细节。这里的变量指的是
实例字段
,静态字段
和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享。自然不会有竞争问题java内存模型规定所有的变量都在主内存中(即方法区和堆中),线程的工作内存中保存了被该线程使用 到的变量的主内存拷贝副本。,线程对变量的修改和使用都必须在自己的工作内存中。
加载时类加载过程的第一个阶段,在加载阶段,虚拟机需要完成以下三件事情:
1、通过一个类的全限定名来获取其定义的二进制字节流。
2、将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构。
3、在Java内存中中生成一个代表这个类的java.lang.Class对象,作为对方法区中这些数据的访问入口。(对HotSpot来说class对象比较特殊,它虽然是对象,但是存放在方法区
里面)
class对象会将作为程序访问方法区中的这些类型数据的外部接口
可以看到该JAVA Application所使用的操作系统的进程ID
常用参数
因为通过引用计数的方法无法解决循环引用的问题,所以目前的虚拟机都是通过可达性分析算法来判断一个对象是否该回收。
可达性分析算法的基本思路就是通过一系列的GC Roots对象作为起始点,通过这个节点向下搜索,如果一个对象没有一条从GC Roots到该对象的路径,则不可达,即可被回收。
Java与C/C++不同点:
>
public static void main(String[] args)为程序的入口地址,参数args为开发人员在命令行状态下与程序交互提供了一种手段
Java程序初始化过程:
(父类静态变量 |父类静态代码块) (子类静态变量 |子类静态代码块) 父类非静态变量 父类非静态代码块 父类构造函数 子类非静态变量 子类非静态代码块 子类构造函数