《深入理解java虚拟机》一些笔记

大三下学期刚考完,把一个商城项目匆匆做完了,开始捧起这本书,但是感觉内容繁多,为了便于以后复习,这里总结一些笔记,大部分都是直接copy书上的,这本书还没看完也不知道自己能看到哪里,慢慢看吧

第一章  走进java

1.java优点:1)它摆脱了硬件平台的束缚,实现了“一次编写,到处运行”的理想 。 2)提供了一个相对安全的内存管理和访问机制,避免了绝大部分的内存泄露和指针越界问题。3)实现了热点代码和运行时的编译和优化 4)有一套完整的应用程序接口,还有无数来自商业机构和开源社区的第三方类库来帮助它实现各种各样的功能。。。

2.我们可以吧Java程序设计语言、java虚拟机、JavaAPI类库这三部分统称为JDK(java development kit) ,JDK是用于支持java程序开发的最小环境,另外把javaAPI类库中的 javase API子集和java虚拟机这两部分统称为jre(java runtime environment)jre是支持java程序运行的标准环境

3.java技术分为四个平台分别为:1) javaCard 支持一些java小程序在小设备上运行的平台。2) java ME(Micro Edition)支持java运行在移动终端平台 3)javaSE (standard Edition) 支持面向桌面的应用,提供了java核心API,这个版本以前成为J2SE 4)javaEE(Enterprise Edition)支持使用多层架构的企业应用(如ERP(企业资源计划)、CRM(客户关系管理))的java平台,除了提供Java SE API以外,还对其做了大量的扩充并提供了部署支持

4.java发展史:

  JDK1.1 技术代表:JAR文件格式、JDBC、JavaBeans 、RMI ,java语法得到了发展如内部类和反射

  JDK1.2 技术代表:EJB、Java Plug-in、Java IDL、Swing ,在语言API上java添加了strictfp关键字和Collections集合类

  JDK1.3 改进主要体现在一些类库上(如数学运算和新的Timer API) JNDI服务从1.3开始被作为一项平台及服务提供(原来仅仅是一个扩展)

  JDK1.4 这是java真正走向成熟的一个版本 技术代表:正则表达式、异常链、NIO、日志类、XML解析和XSLT转换器

  JDK1.5 语法易用性进行了改进:自动装箱、泛型、动态注解、枚举、可变长参数、遍历循环*(foreach),改进了java内存模型(JMM)提供了java.util.concurrent并发包,并且这是官方声明可以支持WINDOWS9x平台最后一个版本

  JDK1.6 提供动态语言支持、提供编译API和微型HTTP服务API,同时这个版本对java虚拟机内部做了很大改进,包括锁与同步、垃圾收集、类加载方便的算法都有改动

  JDK1.7 Lambda表达式 Jigsaw项目、动态语言支持、GarbageFirst收集器和Coin项目

  JDK1.8 书上是在1.8以前出版的,详细看http://blog.csdn.net/laliocat/article/details/50866609

5.Java技术的未来1)模块化 2)混合语言 3)多核并行 4)进一步丰富语法 5)64位虚拟机

第二章 Java内存区域与内存溢出异常

1. 程序计数器是一块较小的内存空间,在虚拟机概念模型里,字节码解释器工作就是通过改变这个计数器来取得需要执行的字节码指令,分支、循环、跳转、异常处理、线程恢复等

2.java虚拟机栈  线程私有  描述的是java方法执行的内存模型,每个方法在执行会创建一个栈帧 用于存储局部变量表、操作数栈、动态链接、方法出口等信息 ,局部变量表存放各种基本数据类型、对象引用

3. StackOverFlowError:线程请求的栈深度大于虚拟机所允许的深度   OutOfMemoryError 如果虚拟机栈动态扩展是无法申请足够的内存

4.本地方法栈为虚拟机使用的Native方法服务

5.Java堆  线程共享 GC管理主要区域  主要存放对象实例  。java堆可以处于物理不连续的,但是要逻辑连续

6.方法区: 线程共享 存储被虚拟机加载的类信息、常量、静态变量、即时编译后的代码

7.运行常量池:用于存放编译期间生成的各种字面量符号的引用

8.直接内存:并不是虚拟机运行是数据区的部分,也不是java虚拟机规范定义的内存区域。

9.对象的创建:new 关键字——检查指令参数能否在常量池定位到一个符号类——执行相应的类加载过程——虚拟机为新生对象分配内(两种方法:指针碰撞和空闲列表)——虚拟机对对象进行必要的设置——产生新对象

10.对象访问方式主要有句柄(refernce中储存稳定地址)和直接指针(访问速度快 )

    

时间: 2024-11-05 15:36:14

《深入理解java虚拟机》一些笔记的相关文章

深度理解java虚拟机读书笔记(二)HotSpot Java对象创建,内存布局以及访问方式

内存中对象的创建.对象的结构以及访问方式. 一.对象的创建 在语言层面上,对象的创建只不过是一个new关键字而已,那么在虚拟机中又是一个怎样的过程呢? (一)判断类是否加载.虚拟机遇到一条new指令的时候,首先会检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号代表的类是否被加载.解析并初始化.如果没有完成这个过程,则必须执行相应类的加载. (二)在堆上为对象分配空间.对象需要的空间大小在类加载完成后便能确定.之后便是在堆上为该对象分配固定大小的空间.分配的方式也有两种:

深入理解JAVA虚拟机--读书笔记

如上图,判断线段AB和线段CD相交. 分析:如果线段AB和线段CD相交,只能是图中的两种相交情况.可以用向量叉乘来判断.如果(向量AB叉乘向量AC)*(向量AB叉乘向量AD)<= 0 并且(向量CD叉乘向量CA)*(向量CD叉乘向量CB)<= 0,那么说明线段AB与线段CD相交. 设A(X1,Y1), B(X2, Y2), C(X3, Y3), D(X4, Y4),三角形ABC的面积为:2A =  = X1*Y2 + X3*Y1 + X2*Y3 - X3*Y2 - X1*Y3 - X2*Y1.

【Todo】深入理解Java虚拟机 读书笔记

有一个在线系列地址 <深入理解Java虚拟机:JVM高级特性与最佳实践(第2版)> http://book.2cto.com/201306/25426.html 已经下载了这本书(60多M..) /Users/baidu/Documents/Data/Interview/Java 全书共分为五大部分,围绕内存管理.执行子系统.程序编译与优化.高效并发等核心主题对JVM进行了全面而深入的分析  

《深入理解Java虚拟机》------笔记

最近开始看<深入Java虚拟机>这本书了,刚好看到这篇文章,所以分享给大家,其实就是一些书本中重要的要点分条例写出来了,让人看书对整体结构的把控更加的清晰! 在C里面我们想执行一段自己编写的机器指令的方法大概如下: typedef void(*FUNC)(int); char* str = "your code"; FUNC f = (FUNC)str; (*f)(0); 也就是说,我们完全可以做一个工具,从一个文件中读入指令,然后将这些指令运行起来.上面代码中"

《深入理解Java虚拟机》笔记04 -- 并发锁

Java虚拟机在操作系统层面会先尽一切可能在虚拟机层面上解决竞争关系,尽可能避免真实的竞争发生.同时,在竞争不激烈的场合,也会试图消除不必要的竞争.实现这些手段的方法包括:偏向锁.轻量级锁.自旋锁.锁消除.锁膨胀等 1. 偏向锁 偏向锁是JDK1.6提出的一种锁优化方式.其核心思想是:如果程序没有竞争,则取消之前已经取得锁的线程同步操作.也就是说,若某一锁被线程获取后,便进入偏向模式,当线程再次请求这个锁时,无需再进行相关的同步操作,从而节省了操作时间.如果在此之间有其他线程进行了锁请求,则锁退

深入理解java虚拟机学习 笔记 第二章 java 内存区域和内存溢出异常

2.2 运行时区域 java虚拟机划分成若干个不同的数据区域, 1.程序计数器,字节码解释器工作时就是通过改变计数器的值来取吓一跳需要执行的字节码命令 了解 String.intern()方法 作用: 如果字符串常量池中一个包含了一个等于此String对象的字符串,则返回代表池中的这个字符串的String对象,否则将此对象包含的字符串添加到常量池中,并返回此String对象的引用. 实战 将堆的最小值 -Xms参数与最大值-Xmx参数设置为一样即可避免堆自动扩展  通过参数 -XX:+HeapD

深入理解Java虚拟机- 学习笔记 - Java内存模型与线程

除了在硬件上增加告诉缓存之外,为了使得处理器内部的运算单元能尽量被充分利用,处理器可能会对输入代码进行乱序执行(Out-Of-Order Execution)优化,处理器会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果一致,但并不保证程序中各个语句计算的先后顺序与输入代码中的顺序一致,因此,如果存在一个计算任务依赖另外一个计算任务的中间结果,那么其顺序性并不能靠代码的先后顺序来保证.与处理器的乱序优化执行类似,Java虚拟机的即时编译器中也有类似的指令重排序(Instruction

深入理解Java虚拟机 - 学习笔记 1

Java内存区域 程序计数器 (Program Counter Register) 是一块较小的内存空间,可以看作是当前线程所执行的字节码的行号指示器.在虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,分支.循环.异常处理.线程恢复等基础功能都需要依赖这个计数器来完成. 在任何一个确定的时刻,一个处理器(对于多核处理器来说是一个内核)都只会执行一个线程中的指令.因此每个线程都需要有一个独立的程序计数器.此类内存为"线程私有"的内存. 如

深入理解Java虚拟机- 学习笔记 - 虚拟机类加载机制

虚拟机把描述类的数据从Class文件加载道内存,并对数据进行校验,转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制.在Java里,类型的加载.连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开销,但是会为Java应用程序提供高度的灵活性. 一.类加载的时机 类从被加载到虚拟机内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading).验证(Verification).准备(Preparation).解析(Re

《深入理解Java虚拟机》笔记02:Java内存区域与内存溢出异常

1.运行时数据区域 Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域.这些区域都有各自的用途,以及创建和销毁的时间: 有的区域随着虚拟机进程的启动而存在 有些区域则依赖用户线程的启动和结束而建立和销毁 根据<Java虚拟机规范(Java SE 7版)>的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域,如图所示. 1.1 程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看作是当前线程所执行的