认识Java虚拟机的内部体系结构
Java虚拟机的内部体系结构也许很少有人去关心,因为对于Java程序员来说,一般只需要跟API打交道就可以了。这些体系结构只是Java虚拟机内部的结构而已。但是如果理解了其内部结构,对于我们开发项目,以及排除系统中的相关故障是由帮助的。
先看看总体结构图,如下:
各部分的主要功能分别是:
1. 类装载子系统:负责Java类型的装载连接以及初始化。Java虚拟机有两种类装载器,启动类装载器和用户自定义类装载器。启动类装载器是JAVA虚拟机实现的一部分,自定义装载器是JAVA程序的一部分。由不同类装载器装载的类将被放在不同的命名空间中。
2. 方法区:方法区主要存储2类信息,一是被装载的类型信息,从class文件流中提取。二是类型中的类(静态)变量。方法区中的信息是所有线程共享的,所以对方法区的数据访问必须设计成为线程安全的。
3. Java堆:存放java运行时创建的所有类实例或数组。一个java虚拟机实例中只存在一个堆空间,所有线程共享,因此设计程序时也要考虑到多线程访问堆数据的同步问题。
4. Java栈:每当启动一个新线程,JAVA虚拟机都会创建一个新的JAVA栈,用于保存线程的运行状态。JAVA栈中的数据都是私有的,线程之间不能相互访问各自的栈。当一个线程调用一个方法时,方法的局部变量保存在该线程的栈中。所以方法内创建的局部变量都不存在线程安全问题。
5. PC寄存器:有叫程序计数器。每个线程都有自己的程序计数器,在线程启动的时候自动创建。PC寄存器里总是保存下一条将被执行的指令的“地址”。
6. 本地方法栈:保存调用本地方法相关的数据。这里基本是一个全新的不受虚拟机限制的区域。
7. 执行引擎:执行引擎是java虚拟机的核心。其行为由一系列的指令集来定义。
相关文档:
题目都很简单,但有时候让你用笔完整的写出来却不那么容易了.
1.遍历文件夹(被这个题目考了两次)
import java.io.File;
public class ListFile {
public static void main(String[] args) {
// TODO Auto-generated method stub
String path = "C:/Inetpub";
File f = new File(path);
list(f);
}
publ ......
文章用实例代码展示了Java中多线程访问共享资源
时线程同步
的重要性。
分别通过在两个线程中同时访问(调用get_id*方法)经过同步处理(lock及Synchronized)的共享资源(tmp)及未经过同步处理的共享资源(tmp)来说明同步处理的的作用。
main中分两部分:
1)前半部分,non-synchronization部分用来测试没有做同步处理的代码 ......
《Java程序通过weka调用libsvm的方法》一文阐述了调用LibSVM的简单方法,这里主要补充四点:
1. LibSVM在weka3.5版以后都集成了包装,无须再使用WLSVM,所以上文中的WLSVM相关的内容可以去除,而类型WLSVM可以换成LibSVM,需要添加包
import weka.classifiers.functions.LibSVM;
无 ......
1.PaginationTable.java
package com.sinoest.train.common;
import java.util.List;
/**
* 分页表
* @author 李易烜-修改
* 2009-6-17
*/
public class PaginationTable {
private List<?> entryList;//> 数据
private int totalNumOfRows;// 总行数
private int rowsPerPage = 10;// ......