Java
文章平均质量分 89
zy学习专用
这个作者很懒,什么都没留下…
展开
-
Java内存区域与HotSpot虚拟机对象
一 Java内存区域与HotSpot虚拟机对象1 Java技术体系、JDK、JRE?Java技术体系包括:· Java程序设计语言;· 各种硬件平台上的Java虚拟机;· Class文件格式;· Java API类库;· 来自商业机构或开源社区的第三方Java类库。JDK,即Java开发工具包,包括Java程序设计语言、Java虚拟机、Java API类库,是用于支持Java程序开...原创 2018-12-19 14:31:16 · 108 阅读 · 0 评论 -
对String的总结
1 Java中常量池的区分(1)全局字符串池(string pool)—全局字符串池里的内容是在类加载完成,经过验证、准备阶段之后在堆中生成字符串对象实例,然后将该字符串对象实例的引用值存到string pool中。—字符串常量池中存的是引用值而不是具体的实例对象,具体的实例对象是在堆中开辟的一块空间中存放的。—在HotSpot VM里实现string pool功能的是一个StringTa...原创 2019-01-22 17:29:40 · 190 阅读 · 0 评论 -
Java并发之线程安全性
1 线程安全性—定义:当多个线程访问某个类时,不管运行时环境采用何种调度方式或者这些线程将如何交替执行,并且在主调代码中不需要任何额外的同步或协同,这个类都能表现出正确的行为,那么就称这个类是线程安全的。—无状态的对象一定是线程完全的。—注:对象的状态是指存储在状态变量(例如实例和静态域)中的数据,对象的状态还可能包括其他依赖对象的域。例如,某个HashMap的状态不仅存储在HashMap对...原创 2019-01-16 11:43:04 · 91 阅读 · 0 评论 -
Java并发之简介
1 促使进程或线程出现的因素(1)资源利用率。如果程序在等待某个外部操作(如I/O操作)执行完成的同时可以运行另一个程序,那么可以提高资源的利用率。(2)公平性。不同的用户和程序对于计算机上的资源有着同等的使用权。(3)便利性。通常来说,在计算多个任务时,应该编写多个程序,每个程序执行一个任务并在必要时相互通信,这比只编写一个程序来计算所有任务更容易实现。2 线程的优势(1)如果使用得当...原创 2019-01-16 11:41:36 · 111 阅读 · 0 评论 -
Java并发之任务执行
1 单个线程中串行地执行任务—缺点:服务器的响应慢、吞吐量低、资源利用率低。(I/O阻塞、网络拥塞等问题造成)—适合于任务数量很少且执行时间很长,或者当服务器只为单个用户提供服务而该用户每次只发出一个请求的情况。2 为每个请求创建一个新的线程来提供服务— 优点:· 带来更快的响应性:将任务处理过程从主线程中分离出来,使得程序在完成前面的请求之前可以接受新的请求,从而提高响应性。· 更高...原创 2019-01-21 16:28:06 · 449 阅读 · 0 评论 -
Java并发之基础构建模块
1 同步容器类—同步容器类包括如Vector、Hashtable以及一些由Collections.synchronizedXxx等工厂方法创建的同步的封装器类。—同步容器类实现线程安全的方式是:将它们的状态封装起来,并对每个公有方法都进行同步,使得每次只有一个线程能访问容器的状态。(1)同步容器类的问题—同步容器类的问题:同步容器类都是线程安全的,但在某些情况下可能需要额外的客户端加锁来保...原创 2019-01-21 16:25:34 · 104 阅读 · 0 评论 -
Java中的浅拷贝和深拷贝以及clone()方法
推荐这两个链接:https://blog.csdn.net/u014727260/article/details/55003402https://www.cnblogs.com/plokmju/p/7357205.html转载 2019-01-13 10:42:51 · 87 阅读 · 0 评论 -
Java并发之对象的组合
1 设计线程安全的类—在设计线程安全类的过程中,需要包含以下三个基本要素:· 找出构成对象状态的所有变量。· 找出约束状态变量的不变性条件。· 建立对象状态的并发访问管理策略。—对象的状态:如果对象中所有的域都是基本类型的变量,那么这些域将构成对象的全部状态;如果在对象的域中引用了其他对象,那么该对象的状态将包含被引用对象的域。—同步策略定义了如何在不违背对象不变条件和后验条件的情况下...原创 2019-01-17 15:58:15 · 663 阅读 · 0 评论 -
Java并发之对象的共享
1 可见性—synchronized既能用于实现原子性或者确定“临界区”,还能用于实现内存可见性。—加锁的含义不仅仅局限于互斥行为,还包括内存可见性。为了确保所有线程都能看到共享变量的最新值,所有执行读操作或者写操作的线程都必须在同一个锁上同步。2 发布和逸出—发布一个对象的意思是指,使对象能够在当前作用域之外的代码中使用。—逸出:某个不应该被发布的对象被发布。—发布的形式包括:(1...原创 2019-01-17 15:55:25 · 429 阅读 · 0 评论 -
晚期(运行期)优化
1 即时编译器(JIT编译器)—当虚拟机发现某个方法或代码块的运行特别频繁时,就会把这些代码认定为“热点代码”,包括被多次调用的方法和被多次执行的循环体。—为了提高热点代码的执行效率,在运行时,虚拟机就会把这些代码编译成与本地平台相关的机器码,并进行各种层次的优化,完成这个任务的编译器称为即时编译器(JIT编译器)。—即时编译器不是虚拟机必需的部分,虚拟机规范对其没有做任何规定,与具体的虚拟...原创 2018-12-25 16:22:04 · 81 阅读 · 0 评论 -
早期(编译期)优化
1 “编译期”的含义· 可能是指一个前端编译器把*.java文件转变成*.class文件的过程,前端编译器如:Sun的Javac、Eclipse JDT中的增量式编译器(ECJ);· 也可能是指虚拟机的后端运行期编译器(JIT编译器)把字节码转变成机器码的过程,JIT编译器如:HotSpot VM的C1、C2编译器;· 还可能是指使用静态提前编译器(AOT编译器)直接把*.java文件编译成...原创 2018-12-24 20:23:13 · 97 阅读 · 0 评论 -
虚拟机字节码执行引擎
1 运行时栈帧结构—栈帧是用于支持虚拟机进行方法调用和方法执行的数据结构,是虚拟机运行时数据区中的虚拟机栈的栈元素。—栈帧中存储了方法的局部变量表、操作数栈、动态连接、方法返回地址和一些附加信息。—每一个方法从调用开始至执行完成的过程,都对应着一个栈帧在虚拟机里面从入栈到出栈的过程。—在编译程序代码的时候,栈帧中需要多大的局部变量表、多深的操作数栈都已经完全确定了,并且写入到方法表的Cod...原创 2018-12-24 20:07:44 · 96 阅读 · 0 评论 -
虚拟机类加载机制
1 类加载机制—概念:虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型。—Java语言中,类型的加载、连接和初始化过程都是在程序运行期间完成的。—类的生命周期包括:加载、验证、准备、解析、初始化、使用、卸载,其中验证、准备、解析统称为连接。—加载、验证、准备、初始化和卸载这5个阶段的开始顺序是确定的,但是通常会在...原创 2018-12-22 11:33:27 · 137 阅读 · 2 评论 -
线程完全与锁优化
1 Java语言中的线程完全—线程安全:当多个线程访问一个对象时,如果不用考虑这些线程在运行时环境下的调度和交替执行,也不需要进行额外的同步,或者在调用方进行任何其他的协调操作,调用这个对象的行为都可以获得正确的结果,那这个对象是线程安全的。—按照线程安全的“安全程度”,可以将Java语言中的共享数据分为以下5类:不可变、绝对线程安全、相对线程安全、线程兼容和线程对立。(1)不可变—不可变...原创 2018-12-27 10:46:24 · 113 阅读 · 0 评论 -
Java内存模型与线程
1 Java内存模型—主要目标:定义程序中各个变量的访问规则,即在虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。—此处的变量和Java中的变量有所区别,它包括类字段、实例字段和构成数组对象的元素,但不包括局部变量和方法参数。—Java内存模型规定:· 所有的变量都存储在主内存中;· 每条线程还有自己的工作内存,线程的工作内存中保存了被该线程使用到的变量的主内存副拷贝,线程对变...原创 2018-12-26 17:30:58 · 79 阅读 · 0 评论 -
类文件结构
1 Java虚拟机的两种中立特性· 平台无关性· 语言无关性实现平台无关性和语言无关性的基础是虚拟机和字节码存储格式(Class文件)。2 Class类文件的结构—Class文件是一组以8位字节为基础单位的二进制流,当遇到需要占用8位字节以上空间的数据项时,则会按照高位在前的方式分割成若干个8位字节进行存储。—“高位在前”:即最高位字节在地址最低位、最低位字节在地址最高位。—Clas...原创 2018-12-20 16:52:27 · 89 阅读 · 0 评论 -
垃圾收集器与内存分配策略
1 JVM中哪些内存需要回收? JVM垃圾回收主要关注的是Java堆和方法区这两个区域;而程序计数器、虚拟机栈、本地方法栈这3个区域随线程而生,随线程而灭,随着方法结束或者线程结束内存自然跟随着回收了,因此不需要过多考虑内存分配和回收的问题。 2 判断对象是否存活的算法 (1)引用计数算法 基本思路:给对象添加一个引用计数器,每当有一个地方引用...原创 2018-12-19 22:38:54 · 83 阅读 · 0 评论 -
Java并发之取消和关闭
1 任务取消—协作方式:当需要停止时,它们首先会清除当前正在执行的工作。—如果外部代码能在某个操作正常完成之前将其置入“完成”状态,那么这个操作就可以称为可取消的。—取消某个操作的原因包括:· 用户请求取消。· 有时间限制的操作。· 应用程序事件。· 错误。· 关闭。—一个可取消的任务必须拥有取消策略,该策略详细地定义了取消操作的:· How:即其他代码如何请求取消该任务;·...原创 2019-01-22 17:31:39 · 265 阅读 · 0 评论