语法糖(Syntactic Sugar),也称糖衣语法,是由英国计算机学家Peter.J.Landin发明的一个术语,指在计算机语言中添加的某种语法,这种语法对语言的功能并没有影响,但是更方便程序员使用。Java中最常用的语法糖主要有泛型、变长参数、条件编译、自动拆装箱、内部类等。虚拟机并不支持这些语法,它们在编译阶段就被还原回了简单的基础语法结构,这个过程成为解语法糖。 泛型是JDK1.5之后引入的一项新特性,Java语言在还没有出现泛型...
下载地址:网盘下载 备用地址:网盘下载
前言 Java 虚拟机的内存模型分为两部分:一部分是线程共享的,包括 Java 堆和方法区;另一部分是线程私有的,包括虚拟机栈和本地方法栈,以及程序计数器这一小部分内存。今天我就 Java 虚拟机栈做一些比较浅的探究。 熟悉 Java 的同学应该都知道了,JVM 是基于栈的。但是这个“栈” 具体指的是什么?难道就是虚拟机栈?想要回答这个问题我们先要从虚拟机栈的结构谈起。 虚拟机栈 何为虚拟机栈虚拟机栈的栈元素是栈帧,当有一个方法...
类加载过程 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载七个阶段。 其中类加载的过程包括了加载、验证、准备、解析、初始化五个阶段。在这五个阶段中,加载、验证、准备和初始化这四个阶段发生的顺序是确定的,而解析阶段则不一定,它在某些情况下可以在初始化阶段之后开始,这是为了支持Java语言的运行时绑定(也成为动态绑定或晚期绑定)。另外注意这里...
1: 类加载子系统(负责从文件系统或者网络中加载class信息,加载的类信息存放于一块成为方法区的内存空间。除了类信息外,方法区中可能还存放运行时常量池信息,包括字符串字面量和数字常量(这部分常量信息是class文件常量池部分的内存映射)) 2:java栈(java方法的调用,保存着局部变量,方法参数,同时和java方法的调用、返回密切相关) 3:方法区(所有线程共享的内存区域,保存系统的类信息,比如类的字段、方法、常量池等...
摘抄 http://uule.iteye.com/blog/2114697一、JVM内存模型及垃圾收集算法 1.根据Java虚拟机规范,JVM将内存划分为: New(年轻代) Tenured(年老代) 永久代(Perm)其中New和Tenured属于堆内存,堆内存会从JVM启动参数(-Xmx:3G)指定的内存中分配,Perm不属于堆内存,有虚拟机直接分配,但可以通过-XX:PermSize -XX:MaxPermSize 等参数调整其大小。 年轻代(New):年轻代用来存放JVM刚分配的Java对象 年老代(Tenured):年轻代...
常见的内存溢出的原因及其解决思路 1.堆溢出: 由于大量的对象都直接分配在堆上,因此它最有可能发生溢出。因为大量对象占据了堆空间,而这些对象都持有强引用,导致无法回收,当对象大小之和大于堆空间时就会发生溢出。 为了解决堆溢出错误,一方面可以使用-Xmx参数指定一个更大的堆空间,另一方面,由于堆空间不可能无限增长,通过MAT或者Visual VM等工具,分析找到大量占用堆空间的对象,并在应用程序上...
前言 通过上篇文章的学习,我们一起了解JVM中垃圾收集的几种常用算法,接下来,我们来学习垃圾收集器有哪些?垃圾收集器使用了哪些算法? Serial收集器 Serial收集器是最古老的收集器,它的缺点是当Serial收集器想进行垃圾回收的时候,必须暂停用户的所有进程,即stop the world。到现在为止,它依然是虚拟机运行在client模式下的默认新生代收集器,与其他收集器相比,对于限定在单个CPU的运行环境来说,Serial收集器由于没有线程交...
互斥同步 互斥同步(Mutual Exclusion & Synchronization)是常见的一种并发正确性保证手段。同步是指子啊多个线程并发访问共享数据时,保证共享数据在同一时刻只能被一个(或者是一些,使用信号量的时候)线程使用。而互斥是实现同步的一种手段,临界区(Critial Section)、互斥量(Mutex)和信号量(Semaphore)都是主要的互斥实现方式。因此,在这四个字里面,互斥是因,同步是果;互斥是方法,同步是目的。 synchronized的实现...
JVM(Java虚拟机)是一个抽象的计算模型。就如同一台真实的机器,它有自己的指令集和执行引擎,可以在运行时操控内存区域。目的是为构建在其上运行的应用程序提供一个运行环境。JVM可以解读指令代码并与底层进行交互:包括操作系统平台和执行指令并管理资源的硬件体系结构。本文主要对JVM进行概述,并介绍Java程序是如何在上面执行的。 虚拟机 从本质上讲,虚拟机是个被构建来提供特定或通用目的服务环境的非实体计算机。这听起来像...
1.1 class文件格式 编译后被Java虚拟机所执行的代码使用了一种平台中立的二进制格式来表示,并且经常以文件的形式来存储,这种格式称为class文件格式。class文件格式中精确的定义了类与接口的表示形式。 class文件是被java虚拟机所执行的代码。 1.2 数据类型 原始数据类型:数值类型、boolean类型、returnAddress类型。 数值类型:整数类型、浮点类型。 整数类型:byte(8位有符号二进制补码整数,-128(-2^7)- 127(2^7-1))、s...
技术书阅读方法论 一.速读一遍(最好在1~2天内完成) 人的大脑记忆力有限,在一天内快速看完一本书会在大脑里留下深刻印象,对于之后复习以及总结都会有特别好的作用。 对于每一章的知识,先阅读标题,弄懂大概讲的是什么主题,再去快速看一遍,不懂也没有关系,但是一定要在不懂的地方做个记号,什么记号无所谓,但是要让自己后面再看的时候有个提醒的作用,看看第二次看有没有懂了些。 二.精读一遍(在2周内看完)(并且记得看下...
Java堆是和Java应用程序关系最为紧密的内存空间,几乎所有的对象都存放在堆中。并且堆是完全自动化管理的。 根据垃圾回收机制的不同,Java堆有可能有不同的结构。最为常见的一种就是将整个Java堆分为新生代和老年代。其中,新生代存放新生对象或者年龄不大的对象。 老年代存放老年对象。新生代可能分为eden区、s0区、s1区,s0和s1也被成为from和to区域,他们是两块大小相等,可以互换角色的内存空间。 在多数情况下...
Java发展至今,出现了很多Java虚拟机,从最初的Classic的Java虚拟机到Exact VM虚拟机,到现在最终被大规模部署和应用的是Hotspot虚拟机。 整数在Java虚拟机中的表示 在Java虚拟机中,整数有byte、short、int、long四种,分别表示8位、16位、32位、64位有符号整数。 整数在计算机中使用补码表示,在Java虚拟机中也不例外。 原码:就是符号位加上数字的二进制表示。以int为例,第一位表示的符号位,其余3...
我们在写java程序的时候会进行各种方法调用,虚拟机在执行这些调用的时候会用到不同的字节码指令,共有如下五种: 1. invokespecial:调用私有实例方法; 2. invokestatic:调用静态方法; 3. invokevirtual:调用实例方法; 4. invokeinterface:调用接口方法; 5. invokedynamic:调用动态方法;这里我们通过一个实例将这些方法调用的字节码指令逐个列出。实例共两个java文件,一个是接口另一个是类,先看接口源码,很简单只有一...