Java入门之学习随记(三)

一. 栈内存和堆内存

堆内存:存放"引用数据类型的数据"和"new出来的对象",注意-创建出来的对象只包含各自的成员变量,不包括成员方法.

栈内存:存放"基本数据类型的数据","引用数据类型的变量名"以及"对象的引用",但是引用数据类型和对象实际存放在堆中.

public class Demo {
	String username;
	public void method() {
        int i=1;
		System.out.println("执行类方法");
	}
	public static void main(String[] args) {
		int i=1;
		String str="hello java";
		Demo demo=new Demo();
		demo.username="123";
		demo.method();
		
	}
 
}

运行图中的代码

1.这是一个Demo类,编译后会生成Demo.class文件,放在常量池中

2.main方法是程序的主入口,栈中会生成对应的方法栈帧

3.执行第一行代码int i = 1, 因为int是基本数据类型,会在栈中给i=1分配空间

4.执行String,它为引用数据类型,会先到常量池中找是否有该值,如果没有会将该值放在常量池中,并在栈中创建str变量,指向常量池中对应的值

5.创建Demo对象,在栈中存入Demo对象,同时指向堆中对应的对象属性

6.给demo的成员属性赋值,先到堆中的常量池看是否存在"123",如果没有则存入,堆中的demo对象username属性指向该值

7.调用demo的method方法,会在栈中再生成method的方法栈桢,根据栈的先进后出的原则,会先将该栈帧中的内容执行完,method执行完后,方法帧没有线程后,也会出栈

8.main方法执行完毕,出栈,线程结束,栈中没有方法帧,进程结束

Java入门之学习随记(三)_第1张图片

二. 线程与进程

1. 进程:进程是一个具有一定独立功能的程序在一个数据集合上依次动态执行的过程.进程是正在执行的程序的实例 

进程特点:a.进程是动态的,程序是静态的.

               b.是操作系统进行资源调度和分配的独立单位

               c.每个进程都有独立的地址空间,包括代码区,数据区,堆栈区,而且每个进程的地址空间彼此都是相对独立的,隔离且互不影响

2.线程:是针对进程的优化而得来的,系统调度进程所要花费的资源开销比较大,进程内部被设计成多个执行路径,也就是线程,他们共享进程的资源,系统在调度线程的时候所要花费的资源开销就小得多

线程的特点:a.可以是进程本身,也可以被包含-一个进程至少包含一个线程

                   b.一个进程内的线程会分享该进程的资源,每个线程又都有自己的运行栈和程序计数器

                   c.一个进程崩溃掉以后,在保护模式下不会影响到其他进程;但是一个进程中的一个线程崩掉,有可能会带着整个进程崩掉.所以多进程要比多线程健壮

三. jvm虚拟机

我们编写好的程序代码,通过编译器生成.class字节码文件后,在不同的操作系统中,通过对应的解释器将字节码文件解释给系统执行,不同的操作系统都有对应的jvm版本,所以才会有编译一次到处执行的Java

1.Java程序开始运行的时候,它才运行,程序结束的时候它就停止.

2.一个Java程序会开启一个jvm进程

3.jvm中的线程分为两种-普通线程,保护线程

守护线程是jvm自己使用的线程,比如垃圾回收

普通线程一般是Java程序的线程,只要JVM中还有普通线程,就不会结束

4.jvm如何结束生命周期-a.System.exit()方法.b.程序正常执行结束.c.秩序执行过程中遇到了错误而终止进程.d.由于操作系统出现错误而导致Java虚拟机进程终止

你可能感兴趣的:(java,学习,jvm)