- 博客(24)
- 资源 (1)
- 问答 (1)
- 收藏
- 关注
原创 初识Java虚拟机(11)内存模型
Java内存模型的主要目标是定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的实现细节。它包括了实例字段、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,也不会存在竞争问题。 Java内存模型规定了所有的变量都存储在主内存中。每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝,
2017-01-28 10:54:53 767
原创 初识Java虚拟机(10)动态分派的实现
上一节已经介绍了分派过程,是虚拟机概念模型的基本介绍。对于虚拟机实际是如何做到的,在这节进行解释。 由于动态分派是非常频繁的操作,而且动态分派的方法版本选择过程需要运行时在类的方法元数据中搜索合适的目标方法,因此在虚拟机的实际实现中,最常用的“稳定优化”手段就是在类方法区中建立一个虚方法表。虚方法表中存放着各个方法的实际入口地址,如果某个方法在子类中没有重写,那么子类的虚方法表里面的地址
2017-01-27 10:47:40 354
原创 初识Java虚拟机(9)方法调用
方法调用并不等于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本。Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用,而不是方法在实际运行内存布局中的入口地址。 解析 在类加载的解析阶段,会将Class文件的一部分符号引用转化为直接引用,前提是:方法的程序真正运行之前就有一个可确定的调用版本,并且在运行期间不可变。
2017-01-26 19:21:30 248
原创 初识Java虚拟机(8)运行时栈帧结构
栈帧是虚拟机运行时数据区中的虚拟机栈的栈元素,储存了局部变量表、操作数栈、动态链接和方法返回地址等栈元素。每一个方法从开始至执行完成的过程,都对应着一个栈帧在虚拟机栈里面从入栈到出栈的过程。执行引擎的所有字节码指令都只针对当前栈帧进行操作。 局部变量表 (1)局部变量表(Local Variable Table)是一组变量储存空间,用于存放方法参数和方法内部定义的局部变量。
2017-01-25 15:33:13 453
原创 初识Java虚拟机(7)类加载器
虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取描述此类的二进制字节流”这个动作放到虚拟机外部去实现,以便让程序自己决定如何去获取所需要的类。实现这个动作的代码模块称为“类加载器”。 类加载器虽然只用于实现类的加载动作,但它在Java程序中起到的作用远远不限于类加载阶段。对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性,每个类加载器都有一
2017-01-25 11:00:23 284
原创 初识Java虚拟机(6)类文件加载
虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的,为Java程序提供了高度的灵活性。 类从加载到内存中开始,到卸载出内存为止,它的整个生命周期包括:加载(Loading)、验证(Verification)、准备(Pr
2017-01-24 20:43:44 243
原创 初识Java虚拟机(5)类文件结构
各种不同平台的Java虚拟机和所有平台都同意使用字节码(Bytecode)作为程序储存格式,它是构成平台无关性的基石,符合Java刚刚诞生之时提出的“一次编写,到处运行”(Write Once,Run Anywhere)。Java虚拟机的语言无关性的基础仍然是虚拟机和字节码的储存格式。Java虚拟机不与任何语言绑定,它只与“Class文件”这种特定的二进制文件格式相关联,虚拟机并不关心Class文
2017-01-24 10:32:11 245
原创 初识Java虚拟机(4)垃圾回收算法
标记-清除算法 首先标记处所有需要回收的对象,标记完成后统一回收所有被标记的对象。该方法的主要不足有两个,一是效率问题,标记和清除两个过程的效率都不高;另一个是空间问题,标记清除后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后的程序运行过程中需要大内存对象时,无法找到足够的连续内存而不得不提前出发另一次垃圾回收动作。 复制算法 为了解决效率问题,复制算法将内存
2017-01-22 15:44:01 173
原创 初识Java虚拟机(3)对象生死
Java虚拟机的垃圾回收器在对堆进行回收前,需要确定对象是否还“活着”。下面两种方法可以帮助GC判断对象生死: 1.引用计数法(Reference Counting) 给对象添加一个引用计数器,每当一个地方引用它时,计数器值就加1;引用失效时,计数器值减1:任何计数器为0的对象就是不可能再被使用的。 该方法使用简单,判定效率高,但是难以解决对象间相互循环引用的问题
2017-01-22 14:52:23 231
原创 初识Java虚拟机(2)初探内存
Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域都有各自的用途,以及创建和销毁时间。根据《Java虚拟机规范》,Java虚拟机所管理的内存将会包括以下几个运行时数据区域。 1.程序计数器 程序计数器(Program Counter Register)是一块较小的内存空间,它可以看做是当前线程所执行的字节码的行号指示器。在虚拟机的概念
2017-01-22 13:16:21 208
原创 初识Java虚拟机(1)对象的访问定位
Java程序需要通过栈上的reference数据来操作堆上的具体对象。由于reference类型在java虚拟机规范中只规定了一个指向对象的引用,并没有定义这个引用应该通过何种方式去定位、访问堆中对象的具体位置,所以对象访问方式也是取决于虚拟机实现而定的。目前主流的访问方式有使用句柄和直接指针两种。 句柄访问:堆中会分为句柄池和对象池,reference中储存的是对象的句柄地址,而句柄中
2017-01-22 11:26:37 191
原创 JavaScript学习笔记(6)定时器
如果我们想要程序延迟一段时间再执行JavaScript代码,可以使用window对象的 setTimeout() 和 setInterval() 方法。 setTimeout(action,delay): 在指定delay毫秒数后,执行action方法。 setInterval(action,delay): 每间隔delay毫秒,就执行一次action方法。
2017-01-18 15:34:04 179
原创 JavaScript学习笔记(5)数组
数组构造 JavaScript中数组的创建有两种方法: 1、 var myarray = new Array(); 2、 var myarray = [];数组初始化 1、在创建时可以初始化数组: var myarray = ["1","2","3"]; 2、在创建后添加: myarray[0] = "1"; 可以使用 myarray
2017-01-18 14:45:50 322
原创 JavaScript学习笔记(4)数字和字符串
JavaScript属于“宽松类型”的编程语言,同一变量在不同的场合可以解释为不同的类型。 数值 isNaN(): 当脚本试图把一些非数值数据当做数值处理,却无法得到数值时,其返回值就是NaN。可以使用函数 isNaN(var)来检测非数值。 parseFloat(str)、parseInt(str): 将字符串强制转为数值,错误是返回NaN。 isfini
2017-01-18 14:29:01 174
原创 JavaScript学习笔记(3)DOM对象和内置对象
与用户交互1、alert(): 使用alert()向用户弹出一个模态(modal)对话框,显示一些消息和一个确定按钮。模态意味着脚本暂时停止运行,页面与用户的交互也被暂停,知道用户关闭对话框为止。alert()方法将字符串作为参数 alert("this is a message");2、confirm(): 也弹出模态对话框,向用户显示一些消息。不同的是,comfirm()
2017-01-18 13:52:21 293
原创 JavaScript学习笔记(2)使用函数
jsp使用函数的关键字是function,基本语法如下:function sayhello(){ alert("hello");}花括号里面是构成函数的JavaScript语句,我们可以根据需要添加任意代码来实现函数的功能。1、可以在一个元素里创建多个函数。2、函数的调用 在页面加载时,包含在函数定义区域内的代码不会被执行,只有在调用时才会执行。例如:
2017-01-18 12:50:23 155
原创 java script学习笔记(1)捕获鼠标事件
因为学习JavaEE,在学servlet时不可避免要用到jsp。为了更好的测试交互,觉定简单熟悉一下java script。捕获鼠标鼠标事件 onClick 事件处理器:onClick事件处理器几乎可以用于页面上的任何HTML元素。实现方式之一是给HTML元素添加属性: onclick=" javascript语句 " 例如: onMouseOver 事件处理器:当
2017-01-18 12:03:03 966
原创 Hibernate中的主要概念
初次接触Hibernate,下面简单介绍Hibernate中的几个基本概念:1.SessionFactory:这是Hibernate的关键对象,是单个数据库映射关系经过编译后的内存镜像,也是线程安全的。它是生成Session的工厂。2.Session:应用程序与持久层之间交互操作的一个单线程对象。也是Hibernate的关键对象,所有的持久化对象必须在Session的管理下才可以进行持久化
2017-01-16 21:15:07 773
原创 腾讯云服务器中的80端口占用问题
今天第一次使用了腾讯云服务器部署tomcat,在将tomcat默认的8080端口改为80端口时,遇到了端口被占用的情况。解决过程如下: 1.打开cmd,输入 netstat -ano|findstr "80" ,发现端口被PID=4的进程占用。 2.打开任务管理器,查看PID=4是一个system进程,其对应的进程描述是NT kernel & system。
2017-01-12 17:13:31 7675 1
原创 JSON的解析
JSON的语法:1.数据在键值对中2.数据间使用逗号分离3.花括号保存对象JSON的值:1.数字 “int”:1,2.字符串(使用双引号 "str":"zzp",3逻辑值 (true或者false)3.数组(方括号 "tags": [ { "id": "13", "
2017-01-11 21:53:53 399
原创 JDBC中的事务隔离级别
一个事务是由一个或多个操作所组成的一个不可分割的工作单位。所有的标准JDBC驱动程序都要提供处理事务的机制。JDBC的事务处理包含3个方面,即自动提交模式,事务隔离级别,储存点。与一个数据库连接相关联的事务称为单独事务;与多个连接相关联的事务称为分布式事务。 在数据库并发操作过程中可能会出现以下3种不确定情况,影响数据的一致性,导致得到错误的数据。 脏读取(Dirty Read
2017-01-10 15:16:59 380
原创 AspectJ中的JoinPoint方法概要
AspectJ中的切入点匹配的执行点称作连接的(Join Point),在通知方法中可以声明一个JoinPoint类型的参数。通过JoinPoint可以访问连接点的细节。下面简要介绍JponPoint的方法:1.java.lang.Object[] getArgs():获取连接点方法运行时的入参列表; 2.Signature getSignature() :获取连接点的方法签名对象;
2017-01-08 14:35:18 21609
原创 Spring的AOP配置问题
今天学习Spring的AOP部分,遇到的注意点如下:1.XML配置: 配置要加入以下部分:xmlns:aop="http://www.springframework.org/schema/aop"http://www.springframework.org/schema/aop/spring-aop-2.0.xsdhttp://www.springframew
2017-01-08 12:23:19 216
原创 Spring中Bean的初始化顺序
1.构造程序或者工厂方法创建Bean实例2.为Bean属性设置值和Bean引用3.调用感知接口中定义的设置方法4.将Bean实例传递给每个Bean后处理器中的postProcessBeforeInitialization()方法5.调用初始化回调方法6.将Bean实例传递给每个Bean后处理器中的postProcessAfterInitialization()方法7.Bea
2017-01-07 16:08:01 1074
iptables MASQUERADE动作的问题
2019-11-22
TA创建的收藏夹 TA关注的收藏夹
TA关注的人