java1.7和java8的jvm存在差异,本文先按照<深入理解java虚拟机>的讲解内容总结,并将java8的改变作为附录放在文末 一丶运行时数据区域 ​ 图:java虚拟机运行时数据区 1.程序计数器 概念与作用: 一块较小的内存空间,可以看作时当前线程执行字节码的行号指示器,字节码解释器通过控制改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支,循环,跳转,异常处理,线程恢复等基础功能都需要依赖程序计数器完成. 线程私有的 为什么要设计成线程私有的: jav…
第二章的思维导图(代码迟点补上):…
Java的体系结构对平台无关的支持 Java平台 Java的体系结构通过几种途径支持Java程序的平台无关性,其中主要是通过Java平台自己.Java平台扮演一个运行时Java程序与其下的硬件和操作系统之间的缓冲角色.Java程序被编译为可运行于Java虚拟机中的二进制程序,并且假定Java API的class文件在运行时都是可用的.接着虚拟机运行程序,那些API则给予程序访问底层计算机资源的能力.无论Java程序被部署到何处,它只需要与Java平台交互,而不需要担心底层的硬件和操作系统.因此,…
第二章  创建和销毁对象 第一条 使用静态工厂方法替代构造器,原因: 静态工厂方法可以有不同的名字,也就是说,构造器只能通过参数的不同来区分不同的目的,静态工厂在名字上就能表达不同的目的 静态工厂方法不用每次调用的时候都创建新的对象(其实是因为它是static的,所以只能用static的,所以是一早就创建了,不需要重复创建吧..),比如书中 Boolean.valueOf(boolean) public static final Boolean TRUE = new Boolean(true);…
第1章 Java体系结构介绍 Java技术核心:Java虚拟机 Java:安全(先天防bug的设计.内存).健壮.平台无关.网络无关(底层结构上,对象序列化和RMI为分布式系统中各个部分共享对象提供了基础) 1.3 体系机构 Java体系结构中的四个技术: Java程序设计语言 Java class文件格式 Java应用编程接口API Java虚拟机 Java虚拟机和Java API一起组成了Java平台 1.3.1 Java虚拟机 Java面向网络的核心是Java虚拟机:平台无关性.安全性和网…
1.字符串从概念上讲,Java字符串就是Unicode字符序列.Java没有内置的字符串类型,而是在标准Java类库中提供了一个预定义类,叫String. 每个用双引号括起来的字符串都是 String类的一个实例 子串(截取字符)String类的substring方法可以从一个较大的字符串提取出一个子串. public String substring(int beginIndex, int endIndex)第一个int为开始的索引,对应String数字中的开始位置,第二个是截止的索引位置,对…
声明:侯捷先生的STL源码剖析第二章个人感觉讲得蛮乱的,而且跟第三章有关,建议看完第三章再看第二章,网上有人上传了一篇读书笔记,觉得这个读书笔记的内容和编排还不错,我的这篇总结基本就延续了该读书笔记的框架,如果发现有雷同,请勿见怪,这篇文章只是我的个人记录,算不上原创,只是更多的想把概念描述清楚,所以如果您觉得有copy之嫌的话请绕道看您觉得的原链接.在第8部分给出了笔记的参考链接.   1.allocator 作用 STL的组件(容器)都需要配置空间以放置资料.这个就是allocator的作用…
前言:工作之后一直在搞android,现在需要更多和后台的人员交涉,技术栈不一样,难免鸡同鸭讲,所以稍稍学习下. 这个例子取自于<Spring 3.x 企业应用开发实战>一书中的第二章,IDE是Intellij,数据库为mySql.在Spring Web中,一般把系统划分为3个部分: 1.持久层----数据库的操作 2.业务层----主要的业务逻辑判断 3.展现层----展示给用户的操作界面 这是一种大而化之的分类方式,比如展现层可能是html,也可能是移动端的App.持久层可能操作的数据库也…
第二章 起步 本章就相当简单粗暴了,用一个个例子说明hazelcast怎么用. 1.map,set,list这些集合类都是开箱即用的,只要从Hazelcast的实例中获取一份就行. 2.增加了MultiMap(google的guava也有),允许一个key可以有多个value. 3.增加了Predicate做数据筛选,可以用默认的sqlpredicates也可自定义,甚至可以自定义分页查询. client单独出一个jar包了.书里的法子不行.只能自己写. 首先在pom里面加入依赖 <depend…
这章主要讲解了数组的工作原理和其适用场景. 定义: 一个存储元素的线性集合,元素可以通过索引来任意存取,索引通常是数字,用来计算元素之间存储位置的偏移量. javascript数组的特殊之处: javascript中数组是一种特殊的对象,用来表示偏移量的索引是该对象的属性,索引可能是整数,但是这些整数会被转化为字符串. 这是因为javascript中对象的属性必须死字符串类型. 1. 数组的基本操作  a) 创建数组 声明空的数组: // 1. 使用new关键字 var arr1 = new A…
声明: 文中内容收集整理自<C++ Primer 中文版 (第5版)>,版权归原书所有. 学习一门程序设计语言最好的方法就是练习编程. 1.8比特的char类型计算机表示的实际范围是-128-127. 2.赋值给无符号类型unsigned 时,如果超出它的显示范围,则结果是初始值对无符号类型表示数值总数取模后的余数. 如:unsigned char c = -1,则char占8比特,c的值是255. 赋值给带符号类型signed时,如果超出它的范围,结果是未定义的.此时可能继续工作.崩溃或者产…
JDK 配置:自行百度. 存在多个JDK 版本并且需要指定某版本时,注意更改注册表JavaSoft项以及相关子项,同时删除system32目录下相关的Java可执行文件xxx.exe. IDEA打开项目记得设置JDK以及需要执行的Java文件的工作目录.…
Java内存管理分为两个方面:内存分配和内存回收.这里的内存分配特指创建Java对象时JVM为该对象在堆内存中所分配的内存空间.内存回收指的是当该Java对象失去引用,变成垃圾时,JVM的垃圾回收机制自动清理该对象,并回收该对象所占用的内存.由于JVM内置了垃圾回收机制回收失去引用的Java对象所占用的内存,所以很多Java开发者认为Java不存在内存泄漏,资源泄漏的问题.实际上这是一种错觉,Java程序依然会有内存泄漏. 由于JVM的垃圾回收机制由一条后台线程完成,本身也是非常消耗性能的,因此…
我的技术博客经常被流氓网站恶意爬取转载.请移步原文:http://www.cnblogs.com/hamhog/p/3537576.html,享受整齐的排版.有效的链接.正确的代码缩进.更好的阅读体验. 第1条:用静态工厂代替构造函数 1. 形式 public static Boolean valueOf(boolean b) { return b ? Boolean.TRUE : Boolean.FALSE; } 2. 优点: 可以有名称 不一定要创建新对象,可以返回已有的对象 可以返回子类类…
第六条 消除过期引用 JAVA中依然会有 memory leak的,比如一个栈先增长再收缩,那么从栈中弹出的对象是不会被当做垃圾回收的,即时使用栈的程序不再引用这些对象.这是因为栈的内部维护着对这些对象的过期引用(永远也不会被解除的引用),需要显示的将这些对象清空(置为null),告诉垃圾回收器回收这些对象. 比如Stack类的实现里,pop()函数最后会有对element置null的操作: public synchronized E pop() { E obj; int len = size(…
第三条 用私有构造器或者枚举类型强化singleton属性 singleton指只能被实例化一次的类,即将构造器设置为私有,使用公有静态成员来实例化,且只实例化一次对象 第四条 通过私有构造器强化不可实例化的能力 虽然一个类只包含静态方法和静态域是很不面向对象的,但是将构造器置为私有,仍然被一些工具类所使用,比如java.lang.Math就只有一个 private的构造器,private的构造器表明类不想被实例化,他里面包含的都是static的方法 如果在private的构造器中再添加一个as…
第二条 遇到多个构造器参数时,可以考虑用构建器 当遇到有多个构造器参数时,常见的是用重叠构造器,即: public class TestClass{ public TestClass(int para0){ this(para0,0); } public TestClass(int para0,int para1){ this(para0,para1,0); } public TestClass(int para0,int para1,int para2){ this.para0 = para0…
第五条 避免创建不必要的对象 书中一开始举例: String s = new String("stringette"); // don't do this //应该使用下面,只会创建一次实例 String s = "stringette"; 同时书中回顾了第一条中的静态工厂,即Boolean.valueOf(String)的例子,即静态工厂方法也不会每次都创建实例 然后用一个Date对象的使用的例子,说明了,当一个方法要重复访问固定值的对象实例时,可以用static…
Char2 XML 解析器:读入一个文件,确认其具有正确的格式,然后将其分解成各种元素,使程序员能够访问这些元素. java库提供了两种XML解析器:DOM和SAX,即文档对象模型和流机制解析器. DOM不适合处理太长的XML,考虑到内存的消耗. 如果只对XML中的某些元素感兴趣,而不关心上下文,考虑用SAX. DOM解析器的接口已经被W3C标准化了,org.w3c.dom包中包含了这些接口类型的定义,比如Document和Element等.不同的组织都提供了实现这些接口的DOM解析器,如Apa…
本章学习目标: 了解与设定PATH 了解与指定CLASSPATH 了解与指定SOURCEPATH 使用package与import管理类别 初步认识JDK与IDE的对应关系 一.第一个Java程序 工具:使用Windows自带记事本或下载其他编辑器(推荐NotePad++和Sublime) //第一个HelloWorld!保存为HelloWorld.java public class HelloWorld{ public static void main(String[] args){ Syst…
对象vs对象变量 “对象” 描述的是一个类的具体实例,他被java虚拟机分配在 "堆" (Heap)中. “对象变量” 为一个对象的引用(对象变量的值=记载着具体对象的位置/地址),他被分配在 "栈" (Stack) 上. Date birthday = new Date(); birthday - 即为对象变量,他被分配在 Stack 上,初始化的Date对象被分配在 Heap 中,如图: 方法的隐式参数 在Java中,通常将 this 关键字称为方法的隐式参数.…
面向对象1.面向对象设计概述 1.1.面向对象是什么 面向对象是一种程序设计范型(简称OOP),是针对对象进行开发,简化开发过程的一种设计方式 1.2.类 类是构造对象的模板,相当于一个烘焙模板,而对象相当于烘焙出来的面包,而烘焙的过程被称为创建类的实例(instance) 封装 是将数据和行为组合在一个包中,并对对象的使用者隐藏了数据的实现方式. 对象中的数据被称为实例域(instance field), 操纵数据的过程被称为方法(method).实现封装的过程在于 绝对不能让类中的方法直接地…
一.锁的基本原理 多个线程同时对共享的同一数据存取 ,在这种竞争条件下如果不进行同步很可能会造成数据的讹误. 例如:有一个共享变量int sum=0, 一个线程正调用 sum+=10,另一个线程正好也在调用sum+=20,期望的结果应该是sum=30. 但是+=操作并不是原子的,虚拟机需要用多条指令才能来完成这个操作(load,add, store),每个指令执行完都有可能被剥夺执行权,同时让另一个线程继续运行.(可以使用javap -c -v CLASS命令将class文件反编译为可阅读的虚拟…
有时,我们需要在一个程序中同时并行的处理多个任务,如播放器一边要播放音乐同时还要不断更新画面显示,或者是一边执行耗时任务,UI还能一边继续响应各种事件.还有的时候,一个任务需要很长时间才能完成,如果分成多份一起执行,可以极大的缩短需要的时间.多线程可以很好的解决这类问题. 一个程序(进程)如果可以同时执行多个任务,每个并行的任务都是通过一个线程来完成,这就是一个多线程程序.进程拥有自己的一整套数据(变量),各个线程共享进程的数据,线程间通信比进程间通信更简单,线程开销比进程小. Java中为多线…
ch2 XML SAX解析器 SAXParserFactory factory = SAXParserFactory.newInstance(); SAXParser parser = factory.newSAXParser();    //建立SAX解析器对象 parser.parse(source,handler);  //source可以是文件,URL或者字符串输入流,handle是DefaultHandler的子类 DefaultHandler handler = new Defaul…
ch2 XML 有两种XML文档结构,DTD和Schema,用解释文档构成规则,这些规则指定了每个元素俺的合法子元素和属性. DTD DTD有多种提供方式,可以像下面这样加到XML中: <?xml version="1.0"?> <!DOCTYPE configuration [    //文档类型必须匹配根元素的名字 <!ELEMENT configuration ...> more rules ... ]> <configuration&g…
引言 之前通过网上的实例自己使用了Java的一些技术及轮子快速的的“烂“造了一些小应用,但是毕竟没有认真地了解和认知Java,遂打算花一个月左右的时间来细细品味一下... 从头开始,慢慢深入!! Java的定义 Java 并不只是一种语言,他是一个完整的平台,拥有庞大的库,其中包含许多可重用的代码和一个提供诸如安全性.跨操作系统的可移植性以及自动垃圾回收等服务的执行环境. Applet Applet 指的是在网页中运行的Java程序. 最早表示的是在支持Java的浏览器中运行的程序.现在一般指的…
1.对象存储位置 对象的引用存在栈中,对象存在堆中.new 出来的对象都在堆中存储.栈的存取速度较快. 所有局部变量都放在栈内存里,不管是基本类型变量还是引用类型变量,都存储在各自的方法栈中: 但是引用类型变量所引用的对象(包括数组,普通Java对象)则总是存储在堆内存中. 基本类型的包装器类 如 Integer 可以在堆中创建一个非基本对象,用来表示基本类型. 也可以使用 Integer i = 1, Java SE5的自动包装功能将自动的将基本类型转换为包装器类型 2.创建新的数据类型:类…
1.数据类型包含八种基本类型,其中四种整形(int/short/long/byte),两种浮点类型(float/double), 一种用于表示Unicode编码的字符类型char,一种表示真值的boolean类型整形大小排序long(接近正无穷)>int(2147483647)>short(32767)>byte (127)浮点类型大小排序 double>float 浮点计算建议使用BigDecima类 关于类型强转 整型值和布尔值之间不能进行相互转换 2.变量变量是指内存中的一个…
抽象过程 纯粹的面向对象程序设计方式: 万物皆为对象: 对象可以存储数据,还可以在其自身执行操作 程序是对象的集合: 通过发送消息告诉彼此要做的 每个对象都有自己的由其它对象构成的存储:可以在程序中构建复杂的体系,并将复杂性隐藏在对象之后 每个对象都是某个类的对应实例:类的特性在于可以发送什么样的消息给它 某一特定类型的对象可以接收同样的消息 访问控制:隐藏实现细节 类创建者:创建新数据类型的程序员 客户端程序员:使用各种类以实现快速应用开发 向客户端程序员隐藏实现细节 库设计者可以改变设计方式…