Java当中JVM

01

在使用控制面板时的实质:

Hello.java使用javac,然后变成为Hello.class通过运行java这个命令,在类加载器中(含有加载,验证,准备,解析,初始化,使用,卸载),到jvm为Java虚拟机中运行,在jvm中有方法区,堆内存,线程栈,本地方法栈,PC计数器。

类加载器:

  1. 加载,
  2. 验证,class文件的版本是否能兼容当前的Java虚拟机版本,然后class文件要满足虚拟机的规范。
  3. 准备,需要准备什么呢?就是要进行类成员的初始化为初始值,其中为final修饰的类变量除外,final变量就直接初始化为变量值,而类成员不一样。
  4. 解析,什么是解析呢?就是把符号引用解析为直接引用,就是我们变量xxx,这种代表变为直接引用,什么是直接引用呢?就是内存地址,如我们常见的xxx0203r0e,这种。
  5. 初始化,把关于static修饰的变量或者是static静态代码块按照顺序组成构造器进行初始化变量。
  6. 使用,
  7. 卸载

JVM

JVM: 方法区(保存所有类的信息,通过常量池来保存生成所有类信息的对象),堆内存,线程栈,本地方法栈,计数器。

// 在控制面板中,反编译
javap -c xxx
就是将字节码反编译为字节码的指令输出
public class Hello{public Hello();Code:0: aload_01: invokespecial #14: returnpublic static void main(java.lang.String[]);...
}

把程序放进jvm中运行,到线程栈中运行,主方法main(主线程),在线程栈中运行如果有遇到new对象关键字时,main这个主线程就会在自己的内存中(线程栈)声明一个的对象(对象的引用指向堆内存中开辟的对象),Hello hello;在jvm中有个堆内存,就会申请一片空间内存地址,即创建一个对象,实例变量,实例方法从方法区中指向堆内存。

public class Hello{public static void main(String[] args){Hello hello = new Hello();// 对象的声明 和 创建对象}
}

类加载到虚拟机中:

public class Demostatic {System.out.println("静态代码块");}{System.out.println("普通代码块");}public Demo(){System.out.println("构造方法");}public static void main(String[] args){new Demo();}
}
// 结果
静态代码块
普通代码块
构造方法// 加载 验证 准备 解析 初始化 使用 卸载
Demo.java -> Demo.class -> 加载进入虚拟机中,类加载器 (验证类信息,元素信息,版本,字节码,准备,初始化类变量,解析把符号引用解析为直接引用,进行初始化就是把static变量和static静态代码块进行初始化变量)

步骤:

在堆内存中执行的顺序就是加载实例信息,然后在进行构造方法。

02

了解static案例

// 父类
public class Fstatic {System.out.println("F静态代码块");}{System.out.println("F普通代码块");}public F(){System.out.println("F构造方法");}
}
// 子类
public class S extends Fstatic {System.out.println("S静态代码块");}{System.out.println("S普通代码块");}public S(){super(); // 默认的System.out.println("S构造方法");}
}
// 测试
public class Demopublic static void main(String[] args){// 创建子类对象new S();}
}
// 结果
F静态代码块
S静态代码块
F普通代码块
F构造方法
S普通代码块
S构造方法

程序进入JVM中的方法区,子类继承父类,父类进行加载实例信息进入到开辟的内存中,然后执行完再执行构造方法,在堆内存中new一个对象,new S(); 在子类的构造方法中会有默认的super(),加载父类,如果子类调用默认调用super(),而父类没有无参的构造方法,而是有参的构造方法,那么就要自己添加,在super(xxx)中。

往后余生,唯独有你
简书作者:达叔小生
90后帅气小伙,良好的开发习惯;独立思考的能力;主动并且善于沟通
简书博客: https://www.jianshu.com/u/c785ece603d1

结语

  • 下面我将继续对 其他知识 深入讲解 ,有兴趣可以继续关注
  • 小礼物走一走 or 点赞

转载于:https://www.cnblogs.com/dashucoding/p/9665790.html

第44节:Java当中的JVM相关推荐

  1. java中io流实现哪个接口_第55节:Java当中的IO流-时间api(下)-上

    标题图 Java当中的IO流(下)-上日期和时间日期类:java.util.Date 系统时间:long time = System.currentTimeMillis();public class  ...

  2. 第48节:Java当中的集合框架

    Java当中的集合框架 01 在我们班里有50位同学,就有50位对象. // 简书作者:达叔小生 Student[] stus = new Student[20]; 结果来了一位插班生,该同学因为觉得 ...

  3. 第46节:Java当中的常量池

    Java当中的常量池 在Java虚拟机jvm中,内存分布为:虚拟机堆,程序计数器,本地方法栈,虚拟机栈,方法区. 程序计数器是jvm执行程序的流水线,是用来存放一些指令的,本地方法栈是jvm操作系统方 ...

  4. java返回给前端的包装类型_第47节:Java当中的基本类型包装类

    Java当中的基本类型包装类 01 基本数据类型对象的包装类 什么是基本数据类型对象包装类呢?就是把基本数据类型封装成对象,这样就可以提供更多的操作基本数值的功能了. 基本数据类型对象的包装类8个: ...

  5. 【2022最新Java面试宝典】—— Java虚拟机(JVM)面试题(51道含答案)

    目录 一.Java内存模型 1. 我们开发人员编写的Java代码是怎么让电脑认识的 2. 为什么说java是跨平台语言 3. Jdk和Jre和JVM的区别 4. 说一下 JVM由那些部分组成,运行流程 ...

  6. Error:could not open'C:\Porogram Files\Java\jrelib\j386\jvm.cfg'

    Error:could not open'C:\Porogram Files\Java\jrelib\j386\jvm.cfg'之解决方法 不知道什么原因,反正重装完后javac -version能查 ...

  7. Java当中的常量池

    本文转载公众号  达叔与他的朋友们 Java当中的常量池 在Java虚拟机jvm中,内存分布为:虚拟机堆,程序计数器,本地方法栈,虚拟机栈,方法区. 程序计数器是jvm执行程序的流水线,是用来存放一些 ...

  8. 《Java和Android开发实战详解》——1.2节Java基础知识

    本节书摘来自异步社区<Java和Android开发实战详解>一书中的第1章,第1.2节Java基础知识,作者 陈会安,更多章节内容可以访问云栖社区"异步社区"公众号查看 ...

  9. 第68节:Java中的MYSQL运用从小白到大牛

    第68节:Java中的MYSQL运用从小白到大牛 前言 学习java必备要求,学会运用!!! 常见关系化数据库 BootStrap是轻量级开发响应式页面的框架,全局css组件,js插件.栅格系统是将页 ...

最新文章

  1. mysql维护分区脚本_mysql 5.6 分区维护
  2. keil中文乱码解决和个人习惯字体设置
  3. linux下查看文件夹的大小
  4. 对于初学者学习Java语言的建议(转载)
  5. 关于ElasticSearch性能调优几件必须知道的事
  6. ab st语言编程手册_西门子PLC编程SCL和LAD谁才是王者?一起讨论一下
  7. 1 jquery对checkbox的简单操作
  8. Scala变量和常用数据类型
  9. 基于SpringMVC进行REST服务开发
  10. 02Framelayout:帧布局
  11. java 反射 数组,Java 数组
  12. [转] 解决windows下eclipse中android项目关联android library project失败问题
  13. 【ManageEngine】IP地址扫描的作用
  14. 只是一部关于爱情的电影
  15. 流行和声(2)Major6和弦
  16. 适合安装在服务器上使用的操作系统,适合于做服务器的操作系统有
  17. Easypack: Ansible方式部署工具中升级Dashboard至2.0.0版
  18. 【电力电子技术】电力电子器件:概述
  19. 软考高项论文----风险管理
  20. 初中语文修改病句的方法——病句类型

热门文章

  1. 编写线程安全的Java缓存读写机制 (原创)
  2. java的Serialization 机制
  3. 在 iOS 应用中实现飞行模式提醒
  4. .NET 2.0防止同用户同时登陆实例
  5. MS CRM 2011 用Jscript打开新窗口的几种方法
  6. django官方文档1.11编翻:1-1-1概述
  7. Android 开发之 ---- bootloader (LK)
  8. Servlet——简单用户登录实例+http协议解析
  9. 扩展webupload插件,增加ui界面
  10. 某熊周刊:一周推荐外文技术资料(12.2)