- 浏览: 324876 次
- 性别:
- 来自: 西宁
文章分类
- 全部博客 (120)
- Java Thought (29)
- Java Pattern (4)
- Data Base (7)
- Algorithm Design (33)
- Linux (0)
- Mysql (2)
- Oracle (0)
- ConstructionDesign-架构 (5)
- Spring Platform (0)
- Tomcat (1)
- JavaScript (7)
- Web System (3)
- MS SQLServer (1)
- 软件哲学 (6)
- View (3)
- Java GUI (4)
- CSSDIV (7)
- CloudComputing (0)
- WebService (0)
- SystemOrProject (2)
- SOA (0)
- 互转共享 (3)
- 偶尔java习题 (0)
- Thinks with does (1)
最新评论
-
sassds:
佩服啊 高手
分享一款js特效 -
bhjackson:
学习啦,能否详细介绍下回溯的过程?O(∩_∩)O谢谢
分享回溯法- 找n个数中r个数的组合 -
zk7019311:
了解了解。。。。。
业务层代码复用的一点建议 -
lijie1819:
看到LZ的设计思想,感觉和抽象工厂模式有点相像。
业务层代码复用的一点建议 -
wjjcml1982:
酷毙了!楼主太强悍了!
分享一款js特效
1. Java虚拟机的生命周期
一个运行时的Java虚拟机负责运行一个Java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当程序关闭退出,这个虚拟机实例也就随之消亡。如果在同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。
Java虚拟机实例通过调用某个初始类的main()方法来运行一个Java程序。而这个main()方法必须是public static的,返回值为void,并且接受一个String[]数组作为参数。任何拥有这样一个main()方法的类都可以作为Java程序运行的起点。告诉Java虚拟机要运行的Java程序中初始类的名字,整个程序将从它的main()方法开始运行。
Java程序初始类中的main()方法,将作为该程序初始线程的起点,任何其他的线程都是由这个初始线程启动的。
Java虚拟机内部有两种线程:守护线程和非守护线程。守护线程通常是由虚拟机自己使用的,比如执行垃圾收集任务的线程。 但是,Java程序也可以把它创建的任何线程标记为守护线程。而Java程序中的初始线程-就是开始于main()的那个是非守护线程。
只要还有任何非守护线程在运行,那么这个Java程序也在继续运行(虚拟机仍然存活)。当程序中的所有的非守护线程都终止时,虚拟机实例自动退出。假如安全管理器允许,程序本身也能够通过调用Runtime类或者System类的exit()方法退出。
2. Java虚拟机的体系结构
在Java假虚拟机规范中,一个虚拟机实例的行为时分别按照子系统、内存区、数据类型以及指令这几个术语来描述的。这些组成部分一起展示了抽象的虚拟机的内部抽象体系结构。
当Java虚拟机运行一个程序时,它需要内存来存储多个东西、例如,字节码、从已装载的class文件中得到的其他信息、对象、方法参数、返回值、局部变量以及运算的中间结果等等,Java虚拟机把这些东西组织到几个"运行时数据区"中,以便于管理。
尽管这些"运行时数据区"都会以某种形式存在于每一个Java虚拟机实现中,但是规范对它们的描述却是相当抽象的。这些运行时数据区结构上的细节,大多数由具体实现的设计者决定。
某些运行时数据区是由程序中所有线程共享的,还有一些则只能由一个线程拥有,每个Java虚拟机实例都有一个方法区以及一个堆,它们是由该虚拟机实例中所有线程共享的。当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析类型信息。然后,它把这些类型信息放到方法区中。当程序运行时,虚拟机会把所有该程序在运行时创建的对象都放到堆中。
当每一个线程被创建时,它都将得到它自己的PC寄存器(程序计数器)以及一个Java栈:如果线程正在执行一个Java方法(非本地方法),那么PC寄存器的值将总是指示下一条将被执行的指令,而它的Java栈则总是存储该线程中Java方法调用的状态-包括它的局部变量,被调用时传进来的参数,它的返回值,以及运算的中间结果等。而本地方法调用的状态,则是以某种依赖于具体实现的方式存储在本地方法栈中,也可能是在寄存器或者其他某些与特定实现相关的内存区中。
Java栈是由许多栈帧组成的,一个栈帧包含一个Java方法调用的状态。当线程调用一个Java方法时,虚拟机压入一个新的栈帧到该线程的Java栈中:当该方法返回时,这个栈帧被从Java栈中弹出被抛弃。
Java虚拟机没有寄存器,其指令集使用Java栈来存储中间数据。这样设计的原因是为了保持Java虚拟机的指令尽量紧凑,同时也便于Java虚拟机在那些只有很少通用寄存器的平台上实现。Java虚拟机的这种基于栈的体系结构,也有助于运行时某些虚拟机实现的动态编译器和即时编译器的代码优化。
Java虚拟机为每一个线程创建的内存区,这些内存区域是私有的。任何线程都不能访问另一个线程的PC寄存器或者Java栈。
如图展示了一个虚拟机实例的快照,它有三个线程正在执行。线程1和线程2都正在执行Java方法,而线程3则正在执行一个本地方法。Java栈都是向下生长的,而栈顶都显示在图的底部。当前正在执行的方法的栈帧以浅色表示,对于一个正在运行Java方法的程序而言,它的PC寄存器总是指向下一条将被执行的指令。
目前只有 Bill venners的深入java虚拟机了
是Bill vinners 的深入java虚拟机
有本书叫深入java虚拟机.
一个运行时的Java虚拟机负责运行一个Java程序。当启动一个Java程序时,一个虚拟机实例也就诞生了。当程序关闭退出,这个虚拟机实例也就随之消亡。如果在同一台计算机上同时运行三个Java程序,将得到三个Java虚拟机实例。每个Java程序都运行于它自己的Java虚拟机实例中。
Java虚拟机实例通过调用某个初始类的main()方法来运行一个Java程序。而这个main()方法必须是public static的,返回值为void,并且接受一个String[]数组作为参数。任何拥有这样一个main()方法的类都可以作为Java程序运行的起点。告诉Java虚拟机要运行的Java程序中初始类的名字,整个程序将从它的main()方法开始运行。
Java程序初始类中的main()方法,将作为该程序初始线程的起点,任何其他的线程都是由这个初始线程启动的。
Java虚拟机内部有两种线程:守护线程和非守护线程。守护线程通常是由虚拟机自己使用的,比如执行垃圾收集任务的线程。 但是,Java程序也可以把它创建的任何线程标记为守护线程。而Java程序中的初始线程-就是开始于main()的那个是非守护线程。
只要还有任何非守护线程在运行,那么这个Java程序也在继续运行(虚拟机仍然存活)。当程序中的所有的非守护线程都终止时,虚拟机实例自动退出。假如安全管理器允许,程序本身也能够通过调用Runtime类或者System类的exit()方法退出。
2. Java虚拟机的体系结构
在Java假虚拟机规范中,一个虚拟机实例的行为时分别按照子系统、内存区、数据类型以及指令这几个术语来描述的。这些组成部分一起展示了抽象的虚拟机的内部抽象体系结构。
当Java虚拟机运行一个程序时,它需要内存来存储多个东西、例如,字节码、从已装载的class文件中得到的其他信息、对象、方法参数、返回值、局部变量以及运算的中间结果等等,Java虚拟机把这些东西组织到几个"运行时数据区"中,以便于管理。
尽管这些"运行时数据区"都会以某种形式存在于每一个Java虚拟机实现中,但是规范对它们的描述却是相当抽象的。这些运行时数据区结构上的细节,大多数由具体实现的设计者决定。
某些运行时数据区是由程序中所有线程共享的,还有一些则只能由一个线程拥有,每个Java虚拟机实例都有一个方法区以及一个堆,它们是由该虚拟机实例中所有线程共享的。当虚拟机装载一个class文件时,它会从这个class文件包含的二进制数据中解析类型信息。然后,它把这些类型信息放到方法区中。当程序运行时,虚拟机会把所有该程序在运行时创建的对象都放到堆中。
当每一个线程被创建时,它都将得到它自己的PC寄存器(程序计数器)以及一个Java栈:如果线程正在执行一个Java方法(非本地方法),那么PC寄存器的值将总是指示下一条将被执行的指令,而它的Java栈则总是存储该线程中Java方法调用的状态-包括它的局部变量,被调用时传进来的参数,它的返回值,以及运算的中间结果等。而本地方法调用的状态,则是以某种依赖于具体实现的方式存储在本地方法栈中,也可能是在寄存器或者其他某些与特定实现相关的内存区中。
Java栈是由许多栈帧组成的,一个栈帧包含一个Java方法调用的状态。当线程调用一个Java方法时,虚拟机压入一个新的栈帧到该线程的Java栈中:当该方法返回时,这个栈帧被从Java栈中弹出被抛弃。
Java虚拟机没有寄存器,其指令集使用Java栈来存储中间数据。这样设计的原因是为了保持Java虚拟机的指令尽量紧凑,同时也便于Java虚拟机在那些只有很少通用寄存器的平台上实现。Java虚拟机的这种基于栈的体系结构,也有助于运行时某些虚拟机实现的动态编译器和即时编译器的代码优化。
Java虚拟机为每一个线程创建的内存区,这些内存区域是私有的。任何线程都不能访问另一个线程的PC寄存器或者Java栈。
如图展示了一个虚拟机实例的快照,它有三个线程正在执行。线程1和线程2都正在执行Java方法,而线程3则正在执行一个本地方法。Java栈都是向下生长的,而栈顶都显示在图的底部。当前正在执行的方法的栈帧以浅色表示,对于一个正在运行Java方法的程序而言,它的PC寄存器总是指向下一条将被执行的指令。
评论
16 楼
nrxqq
2010-06-26
学了这么长时间java了都不知道有这么神奇的东西
15 楼
MySSH
2010-06-25
写得不错~~研究研究
14 楼
xiaojing3517
2010-06-24
看来楼主是一边看Thinking in Java 一边看这本书啊。。。
13 楼
southking
2010-06-24
看图片貌似是《深入java虚拟机》里的截图。。
12 楼
lianzerong
2010-06-24
文章有什么不对么 ? 为什么投那么多的隐藏帖 ?
11 楼
iq527
2010-06-24
额,发错 囧
10 楼
piao_bo_yi
2010-06-24
和OS里面讲进程与线程的东西差不多。
9 楼
lydawen
2010-06-24
看了截图,像《深入java虚拟机》第二版,还是D版的书(图像)。
8 楼
weishuang
2010-06-23
这本书好像已经没有卖的了,一年前我就在各大网站上找,找不到卖的了,只有电子版,不清晰
7 楼
maozj
2010-06-23
weiyc_16000 写道
条理清楚,逻辑清晰,期待楼主的后续文章。
BTW,能否推荐以下Java虚拟机相关书籍?
BTW,能否推荐以下Java虚拟机相关书籍?
目前只有 Bill venners的深入java虚拟机了
6 楼
mercyblitz
2010-06-23
楼主的图像欢得勤啊
5 楼
maozj
2010-06-23
书中的内容很是值得讨论学习 如果你有其他分享 一起分享
4 楼
maozj
2010-06-23
冇心人 写道
上面的内容,好像就是书里面的...
是Bill vinners 的深入java虚拟机
3 楼
冇心人
2010-06-23
上面的内容,好像就是书里面的...
2 楼
冇心人
2010-06-23
weiyc_16000 写道
条理清楚,逻辑清晰,期待楼主的后续文章。
BTW,能否推荐以下Java虚拟机相关书籍?
BTW,能否推荐以下Java虚拟机相关书籍?
有本书叫深入java虚拟机.
1 楼
weiyc_16000
2010-06-23
条理清楚,逻辑清晰,期待楼主的后续文章。
BTW,能否推荐以下Java虚拟机相关书籍?
BTW,能否推荐以下Java虚拟机相关书籍?
发表评论
-
Java常用集合包适用场景
2010-10-25 08:52 42701. ArrayList 基于数组方式实现,无容量的限制 ... -
同一任务和对象锁的问题
2010-08-04 08:31 2547偶尔翻开java编程思想看看多线程的篇章,意焦突然卡在某 ... -
类的装载、连接与初始化 -- 纠正
2010-07-02 09:03 10211.首先纠正<<深入java虚拟机>> ... -
Java体系结构中的四个核心技术思想
2010-06-22 14:27 2117看着瓜娃瓜娃,最近突然很有兴趣想了解下Java这杯&q ... -
Java中的垃圾回收与对象生命周期
2010-06-21 08:23 3066在<<Java编程思想>>书中 ... -
通过系统缓冲字节流类提高IO操作效率
2010-06-01 08:35 1145/** * 通过系统缓冲字节流类提高IO操作效率 ... -
通过系统缓冲字符流类提高IO操作效率
2010-06-01 08:34 1325/** * 通过系统缓冲字符流类提高IO操作效率 ... -
通过自定义缓冲区提高IO操作效率
2010-06-01 08:33 1095/****************************** ... -
java多态性总结二
2010-05-31 11:49 1027多态性:发送消息给某个对象,让该对象自行决定响应何种行为。 ... -
数值包装类 - 性能优化
2010-05-31 08:36 10151. 良好的风格 Double d = new Dou ... -
字符串toCharArray - 性能优化
2010-05-31 08:35 17561. 良好的风格: String s = "a ... -
字符串的length - 性能优化
2010-05-31 08:34 1283尽量提前计算length: (1) 好的风格: Str ... -
字符串累加 - 性能优化
2010-05-31 08:33 12571. 测试代码: package boke.string; ... -
用Java线程协作模拟 - Alice,Bob和Robert博士的协作
2010-05-31 08:26 12181. 问题描述: Robert博士要进行一场实验,她需 ... -
用Java线程池技术模拟 - 容器中的最大值输出及排序输出
2010-05-31 08:23 13041. 输出结果: 排序前的数组: 容器0: 6 15 82 ... -
Java的多态性总结
2010-05-26 10:27 13281. Java的多态性总结: (1) 首先, 要明确Chil ... -
从这个例子你可以想到JAVA多态的什么特性?
2010-05-24 09:03 2973不加一句注解,请看下面内容:你会想到JAVA多态的什么特性? ... -
this是个很巧妙地东西
2010-05-24 09:01 947递归引起堆栈异常。。。 package com.maozj.j ... -
JAVA内存管理的一些经验.
2010-05-24 08:59 9561. 尽早释放无用对象的引用。 A a = new A( ... -
JAVA多态特殊性
2010-05-24 08:49 9221. 只有非private方法才可以被覆盖 2. 普通方法是多 ...
相关推荐
### Java虚拟机与Java程序的生命周期 #### 一、Java虚拟机(JVM)概述 Java虚拟机(JVM)是一种可以执行Java字节码的虚拟机。它为Java应用程序提供了一个独立于硬件平台的运行环境,使得Java程序可以在任何安装了JVM...
一个运行中的 Java 虚拟机的生命周期是从程序开始执行到程序结束。Java 虚拟机总是从 main() 方法开始执行,main() 方法是程序的起点。Java 虚拟机中有两种类型的线程:守护线程(daemon)和普通线程(non-daemon)...
本书共分20章,第1-4章解释了java虚拟机的体系结构,包括java栈、堆、方法区、执行引擎等;第5-20章深入描述了java技术的内部细节,包括垃圾收集、java安全模型、java的连接模型和动态扩展机制、class文件、运算及...
Java虚拟机的生命周期包括启动、执行和终止三个主要阶段: 1. **启动**:当一个包含`public static void main(String[] args)`方法的类被加载时,Java虚拟机就会启动。`main()`方法是程序的入口点,Java虚拟机通过...
在本文中,我们将深入探讨Java虚拟机的体系结构、垃圾回收机制、Java对象的生命周期和分代,以及相关的参数设置与调优。 Java虚拟机体系结构 Java虚拟机由三个主要组件组成:类加载器、运行时数据区和执行引擎。类...
- **Java虚拟机的生命周期**:JVM的生命周期从启动到关闭的过程,涉及到类的装载、初始化等多个阶段。 - **Java虚拟机的体系结构**:JVM的体系结构主要包括内存区域划分、执行引擎等方面。 - **数据类型**:JVM支持...
本篇文章将深入探讨JVM的生命周期、体系结构、类加载机制、内存区域以及垃圾收集。 首先,JVM的生命周期与Java程序紧密关联。每当运行一个Java程序时,就会创建一个JVM实例。这个实例在程序执行期间存在,直到程序...
Java虚拟机生命周期 Java虚拟机的生命周期可分为三个主要阶段:装载、连接和初始化。每次启动一个Java程序,都会创建一个Java虚拟机实例,该实例将管理Java程序的生命周期。Java虚拟机实例的生命周期结束时,该程序...
2. **Java虚拟机的生命周期** - JVM的启动始于`main()`方法,它是程序的入口点,由字符串数组参数传递给JVM。 - 程序的执行线程由`main()`方法初始化,初始线程是非守护线程。守护线程用于后台任务,如垃圾收集,...
3. **Java虚拟机的体系结构** JVM由多个子系统构成,包括类加载器子系统,它负责加载和命名类和接口;执行引擎执行加载的字节码。JVM的数据区包括程序计数器、Java堆栈、本地方法栈、堆以及方法区。其中,方法区...
1. **类加载机制**:Java类的生命周期包括加载、验证、准备、解析和初始化五个阶段。类加载器负责找到类的二进制数据并将其转换为Java虚拟机内部结构。 2. **字节码执行引擎**:JVM通过解释器执行字节码,或者通过...
3. **Java虚拟机的体系结构**: - **类加载器子系统**:负责加载类和接口,赋予唯一的名字。分为Bootstrap ClassLoader、Extension ClassLoader和App ClassLoader等。 - **执行引擎**:执行加载类中的字节码指令。...
第1章 Java体系结构介绍 第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12...
5.2 Java虚拟机的生命周期 5.3 Java虚拟机的体系结构 5.3.1 数据类型 5.3.2 字长的考量 5.3.3 类装载器子系统 5.3.4 方法区 5.3.5 堆 5.3.6 程序计数器 5.3.7 Java栈 5.3.8 栈帧 ...
类加载器体系结构由多个类加载器组成,包括启动类加载器(Bootstrap ClassLoader)、扩展类加载器(Extension ClassLoader)和应用类加载器(Application ClassLoader)。每个类加载器负责加载特定目录下的类库。 #...
第1章 Java体系结构介绍 第2章 平台无关 第3章 安全 第4章 网络移动性 第5章 Java虚拟机 第6章 Java class文件 第7章 类型的生命周期 第8章 连接模型 第9章 垃圾收集 第10章 栈和局部变量操作 第11章 类型转换 第12...
经典JVM PPT,可以直接讲课的 java虚拟机原理介绍 Java虚拟机生命周期 Java虚拟机体系结构 Java 的class文件
Java虚拟机的生命周期始于Java程序的启动,终于程序的正常或异常终止。具体来说: - **启动**:当启动一个Java程序时,会创建一个新的JVM实例。 - **运行**:JVM实例在运行过程中会处理各种线程,包括守护线程和非...
6. Java虚拟机的体系结构:JVM具有明确的体系结构,包括类加载器、运行时数据区、执行引擎等。在规范中会介绍这些组件的功能和它们之间的交互关系。 7. 方法区和堆的细节:方法区和堆是JVM中存储程序运行时数据的两...
JVM的平台体系结构通常分为四个层次,包括应用程序层、接口层、运行时数据区(如堆和栈)、本地方法接口(Native Method Interface, JNI)和本地方法库(Native Method Libraries)层,以及位于最底层的机器硬件平台...