博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
好程序员Java分享JVM结构
阅读量:7120 次
发布时间:2019-06-28

本文共 1461 字,大约阅读时间需要 4 分钟。

  好程序员Java分享JVM结构,jvm的基本结构,也就是我们俗称概述。内容很多,而且概念量也很大,关于概念方面,让概念在你的脑子里变成图形,所以只要你有耐心、仔细,发挥自己的想象力,会让你充满信心。当然,不是说看完,就对jvm了解啦,jvm学习的知识非常的多。在你看完,后续我们还会来学jvm的细节,但是如果你在看完的前提下去学习,再学习其他jvm的细节会事半功倍。

  1. 什么是java虚拟机

  首先我们先写一个类

然后打开cmd窗口输入:java test.JVMForJava,打开任务管理器-进程,你看到一个叫java.exe的程序没有,是的这就是java的虚拟机,java xxx这个命令就是用来启动一个java虚拟机,而main函数就是一个java应用的入口,main函数被执行时,java虚拟机就启动了。好了ctrl+c结束你的jvm。在打开你的ecplise,右键run application,再run application一次,再次打开任务管理器-进程,好了,我们看见会有两个javaw.exe,为什么会有两个?因为我们刚才运行了两次run application。这里我是要告诉你,一个java的application对应了一个java.exe/javaw.exe(java.exe和javaw.exe你可以把它看成java的虚拟机,一个有窗口界面一个没有)。你运行几个application就有几个java.exe/javaw.exe。或者更加具体的说,你运行了几个main函数就启动了几个java应用,同时也就启动了几个java的虚拟机。

  什么是java虚拟机和虚拟机实例?java的虚拟机相当于我们的一个java类,而java虚拟机实例,相当我们new一个java类,不过java虚拟机不是通过new这个关键字而是通过java.exe或者javaw.exe来启动一个虚拟机实例。

  1. jvm的生命周期
    1. 话不多说看代码,然后ecplise里run application 之后在打开任务管理器-进程,你会看到一个javaw.exe的虚拟机在跑,查看控制台输出,并观察任务管理器中的javaw.exe什么时候消失。

  (结果我就不截图了,太长了。)

  如果你观察控制台和任务管理器的javaw.exe会发现,当main函数的for循环打印完的时候,程序它跟我想的不一样居然没有退出,而等到整个new Thread()里的匿名类的run方法执行结束后,javaw.exe才退出。我们知道在c++的win32编程(CreatThread()),main函数执行完了,寄宿线程也跟着退出了,在c#中如果你用线程池(ThreadPool)的话,结论也是如此,线程都跟着宿主进程的结束而结束。但是在java中貌似和我们的认知有很大的出入,这是怎么回事,先不要看结果自己想想为什么。

  没错这就是由于java的虚拟机中它有两种线程,一种叫叫守护线程,一种叫非守护线程,main函数就是个非守护线程,虚拟机的gc就是一个守护线程。java的虚拟机中只要有任何非守护线程还没有结束,java虚拟机的实例都不会退出,所以即使main函数这个非守护线程退出,但是由于在main函数中启动的匿名线程也是非守护线程,它还没有结束,所以jvm没办法退出。

java虚拟机的生命周期,当一个java应用main函数启动时虚拟机也同时被启动,而只有当在虚拟机实例中的所有非守护进程都结束时,java虚拟机实例才结束生命。

转载地址:http://pkdel.baihongyu.com/

你可能感兴趣的文章
【MySQL】【ProxySQL】ProxySQL Cluster的搭建
查看>>
shell基础
查看>>
【Oracle Database 12c新特性】wait event DISPLAY_NAME
查看>>
AutoItLibrary实现web自动上传文件方法
查看>>
快速诊断内存泄漏
查看>>
批量检查单选和多选按钮是否选中
查看>>
JQuery实现Excel表格呈现
查看>>
润乾集算报表优化应用结构之可挂接算法
查看>>
java 双亲委派机制 的思考
查看>>
我的友情链接
查看>>
阿里云上构建本地仓库Docker images
查看>>
第一个Android程序
查看>>
关于Linux上修改open files数目
查看>>
tcpdump命令使用介绍
查看>>
zabbix_proxy部署
查看>>
通过SQL Server的扩展事件来跟踪SQL语句在运行时,时间都消耗到哪儿了?
查看>>
CentOS 6.5 apache源码安装2.0版
查看>>
文件属性设置常量
查看>>
Mysql Cluster基于时间点的恢复
查看>>
链表常见面试题
查看>>