JavaLearning-java开发环境与JVM

Dos命令操作

  • cd… 返回上级
  • cd\ 返回根目录
  • cd文件夹名 进入该文件
  • 盘符: 切换盘符
  • dir 显示该文件夹中的内容
  • cls 清屏
  • notepad 打开记事本
  • ipconfig ip地址

Java开发环境

  • JDK(JavaDevelopmentKit)java开发工具包
  • JRE(JavaRuntimeEnvironment)运行环境
    JDK就是Java开发工具包,包括JRE,同时还包括编译Java源代码的编译器javac,还包括java调试和分析工具,以及java程序编写所需要的文档和demo示例。
    JRE是java运行时环境,包括java虚拟机以及java基础类库。是运行java程序所需要的软件环境。

跨平台性

java程序跨平台的实现主要依赖于JVM/java虚拟机/JavaVirtualMachine,针对不同的操作系统,有不同版本的jvm。

类的加载过程

五个过程:加载,验证,准备,解析,初始化

  • Loading
    加载是类加载过程的一个阶段,这个加载会在内存中产生一个java.lang.Class对象,作为方法区这个类各种数据的入口。(不一定从Class文件中获取数据,也可以从ZIP包(包括jar包和war包),也可以是其他文件生成(JSP文件转变成Class文件))
  • Verification
    主要验证class文件的字节流信息是否包含符合当前jvm的要求,以及该信息是否危害jvm的安全
  • Preparation
    准备阶段是正式为变量在方法区中分配内存空间,并设置初始值
  • Resolution
    解析阶段是将常量池中的符号引用替换为直接引用的过程。
    (符号引用与虚拟机的直接布局无关,引用的目标不一定要直接加载到内存中,各种虚拟机实现的内存布局可以不相同,但是要接受的符号引用必须是一致的,符号引用的字面量形式明确定义在JVM的Class文件格式中)
    (直接引用可以是一个指针,或者相对偏移量或者是能够直接定义到目标的句柄。若是直接存在,那么引用目标必定已经存在在内存中)
  • Initialization
    真正开始执行java程序中的代码。
    初始化阶段是执行类构造器方法的过程。方法是由编译器自动收集类变量的赋值操作和静态语句块合并成。虚拟机会保证执行之前,父类的方法已经执行完成。
    如果一个类中没有静态变量,也没有静态语句块,那么编译器可以不为该类生成()方法。

注意:(以下情况不会进行初始化)
1.通过子类引用父类的静态字段,只会触发父类 的初始化,而不会触发子类的初始化。
2.定义对象数组,不会触发该类初始化
3.常量在编译期间会进入类的常量池中,本质上没有直接引用定义常量的类,不会触发定义常量的类。
4.通过类名获取Class对象,不会触发类的初始化
5.通过Class.forname加载类时,若指定参数initialize(该参数告诉jvm是否进行初始化操作)为false,不会触发初始化
6.通过ClassLoader默认的loadClass方法,也不会触发初始化动作。

JVM的分区

五个分区:程序计数器,本地方法栈,方法区,堆,栈

  1. Program Counter Register
    用于指示执行哪条命令。
    在jvm中,多线程是通过线程轮流获取CPU执行时间。因此在任意具体时刻,cpu只会执行一条线程中的一个指令,为了使每个线程切换后能回到原来的位置,每个线程都需要有自己的单独的程序计数器,不会相互干扰
  2. Stack
    java栈是java方法执行的内存模型。java栈由java栈帧(stack frame)构成,栈帧由局部变量表、指向运行时常量池的引用、方法返回地址、附加信息、操作数栈五部分组成。
    当线程执行一个方法时,会有一个相对应的栈帧压栈,在方法执行完毕后出栈。
    局部变量表用于存储方法中产生的局部变量;操作数栈用于计算;指向运行时常量池引用用于取出类中常量;方法返回地址,用于在方法执行完成之后,返回到调用者。
  3. Native Method Stack
    本地方法栈与操作系统机密联系,jvm调用系统中的功能。
  4. Heap
    堆用于存取对象和数组内容(数组引用在栈中)。在c语言中,程序员可以通过malloc以及free函数对堆内存进行管理。与c语言不同,java的垃圾回收机制会自动处理。java堆内存是被所有线程共有的,在jvm中只有一个堆。
  5. Method Area
    在方法区中存储了每一个类的信息、静态变量、常量以及编译器编译后的代码。在方法区中有一个非常重要的内容就是运行时常量池,在类或者接口被加载到jvm中后,相应的运行时常量池就被建立。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值