一、体系结构组成当编写并运行一个Java程序时,就同时体验了这四种技术。用Java语言编写源代码,编译成Java
Class文件,然后再在Java虚拟机上运行class文件。当编写程序时,通过调用类中的方法来访问系统资源。当程序运行的时候,它通过调用class文件中的方法来满足程序的Java
API调用。Java程序设计语言Java Class文件格式Java应用编程接口Java虚拟机二、Java虚拟机Java虚拟机的主要任务是装载class文件并执行其中的字节码。JVM...
Java栈和局部变量操作Java虚拟机是基于栈的机器,几乎所有Java虚拟机的指令都与操作数栈相关。栈操作包括把常量压入操作数栈、执行通用的栈操作、在操作数栈和局部变量之间往返传输值。1常量入栈操作:操作码在执行常量入栈操作之前,使用三种方式指明常量的值:常量值隐含包含在操作码内部、常量值在字节码中如同操作数一样跟随在操作码之后,或者从常量池中取出常量。1.1常量值隐含包含在操作码内部:将一个字长的常量压入栈操作...
Java堆内存被划分为新生代和年老代两部分,新生代主要使用复制和标记-清除垃圾回收算法,年老代主要使用标记-整理垃圾回收算法,因此java虚拟中针对新生代和年老代分别提供了多种不同的垃圾收集器,JDK1.6中Sun HotSpot虚拟机的垃圾收集器如下:图中如果两个垃圾收集器直接有连线,则表明这两个垃圾收集器可以搭配使用。(1).Serial垃圾收集器:Serial是最基本、历史最悠久的垃圾收集器,使用复制算法,曾经是JDK1.3.1之前新生代唯一...
Java内存区域程序计数器 (Program Counter Register)是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器。在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支、循环、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。 在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一个线程中的指令。因此每个线程都需要有一...
随着多核CPU的高速发展,为了充分利用硬件的计算资源,操作系统的并发多任务功能正变得越来越重要,但是CPU在进行计算时,还需要从内存读取输出,并将计算结果存放到内存中,然而由于CPU的运算速度比内存高几个数量级,CPU内的寄存器数量和容量有限,为了不让CPU长时间处于等待内存的空闲状态,在CPU和内存之间引入了速度接近CPU的高速缓存Cache作为CPU和内存之间的缓冲。计算机硬件并发的原理如下:Java虚拟机对并发的支持类似于计...
1.ifconfig命令=ip a命令,查看IP地址 网卡默认名称eth0. Bcast 广播地址2.xshell or secureCRT远程连接 ssh root@地址 xmanager 远程桌面连接 filezilla(类ftp工具) 文件传输 Notepad++ 远程编辑文本文件3.clear清屏4.虚拟机联网注意事项 a.连接方式-默认NAT b.虚拟机连不上:确定VMNET8网卡IP地址,最后一位为.1,前三位由VMWORKSTATION编辑-网络编辑器确定 ...
一 内存管理运行时数据区域
程序计数器线程私有内存;
如果线程正在执行的是一个Java方法,这个计数器记录的是正在执行的虚拟机字节码指令的地址;
如果正在执行的是本地(Native)方法,这个计数器值则应为空(Undefined);
唯一没有规定任何OutOfMemoryError情况的区域Java虚拟机栈线程私有;
虚拟机栈描述的是Java方法执行的线程内存模型:每个方法被执行的时候,Java虚拟机都会同步创建一个栈帧用于存储局部变量表、操...
我们知道任何一种关系型数据库管理系统都支持SQL(Structured Query Language),相对于文件管理系统,用户不用关心数据在数据库内部如何存取,也不需要知道底层的存储结构,熟悉SQL,就能熟练使用数据库。SQL的引入,使得数据库系统需要将SQL转换为内部的数据结构,然后与底层的存储结构打通,达到用户存取数据的目的。所谓的SQL对应的数据结构,我们通常称之为执行计划,每个SQL执行前,都需要生成执行计划,然后执行。SQL如何变化...
运行时数据区详解<1>程序计数器与虚拟机栈
一.程序计数器(PC寄存器)PC Register介绍作用:
举例说明两个常见问题1:使用PC寄存器存储字节码指令地址有什么用呢2: PC寄存器为什么会被设定为线程私有cpu时间片二.虚拟机栈虚拟机栈概述虚拟机栈出现的背景内存中的栈与堆虚拟机栈基本内容栈的特点(优点)
栈中可能会发生的异常设置栈内存的大小示例:栈的存储单位栈中存储什么:栈运行原理方法的两种结束方式
栈帧的内部结构
局部变量表jcla...
类与类加载器
双亲委派模型从 Java 虚拟机角度讲,只存在两种类加载器:一种是启动类加载器(C++ 实现,是虚拟机的一部分);另一种是其他所有类的加载器(Java 实现,独立于虚拟机外部且全继承自 java.lang.ClassLoader)启动类加载器 加载 lib 下或被 -Xbootclasspath 路径下的类扩展类加载器 加载 lib/ext 或者被 java.ext.dirs 系统变量所指定的路径下的类应用程序类加载器 ClassLoader负责,加载用户路径上所指定的类库。
除...
java文件经过编译变成class文件,通过类加载器加载到JVM里面运行
JVM里面有一个重要组成部分就是运行时数据区
运行时数据区包括线程共享部分(堆、方法区),和线程私有部分(程序计数器、本地方法栈、虚拟机栈)
堆:存放对象实例 有eden区、from区、to区、老年代区(内存分配比例 8:1:1:?)对象分配原则: 刚创建的对象通常都在eden区,但是一些大对象比如说字符串、数组,就会直接放到老年代区,不会再进行动态提升 在对...
类加载 | |new指令 | 检查加载(失败返回类加载) | | | 分配内存(指针碰撞、空闲碎片列表、) | | | 内存空间初始化(值的初始化 例如:boolean=false) | | | 设置(对象头,类型等) | | | 初始化 | | | 逃逸分析——满足逃逸分析,分配到栈 | |不满足 | 分配堆空间内存(大对象直接分配到老年代)
判断对象存活: 可达性分析(python使用的是引用记数法)可达性分析:只要你与GC roots有链式关联,则表示对象是存活状态
新生代(eden、from、to)复制回收算法由于大部分对象都会被回收,因此eden、from、to的空间比例为8:1:1当eden区进行垃圾回收的时候,存活下来的对象复制进入from区或者to区,其余对象则全部清空from与to区,存活下来的对象复制进入另一个区,该区之间清空,数据在哪个区,由eden区进来的对象就在哪个区因此...
第一章 走近Java
Java技术体系
JDK(Java Development Kit):Java程序设计语言、Java虚拟机、Java API类库。
JRE(Java Runtime Environment):Java API类库的Java SE API子集和Java虚拟机。
JDK是用于支持Java程序开发的最小环境。
JRE是支持Java程序运行的标准环境。
Java ME(Micro Edition):支持Java程序运行在移动终端(手机、PDA)上的平台,对Java API有所精简,并加入了针对移动终端的支持,这个版本以前称为J2ME。
Jav...
java 虚拟机判断一个对象是否存活判断一个对象是否存活依赖就是该对象是否被引用,下面主要介绍两种方法。引用计数算法给对象添加一个引用计数器,当对象被引用的时候计数器加1,当引用失效的时候计数器减1,当计数器为0的时候说明该对象没有被引用。优点实现起来比较简单缺点无法解决循环依赖的问题,A a = b; B b = a;可达性分析算法为了解决上述的遗留问题,即解决循环依赖的问题,提出了可达性分析算法,即Rc root 对象作为起始...