
Java
Tiffany小仙女
这个作者很懒,什么都没留下…
展开
-
Java中线程的基本概念
多线程机制可以同时运行多个程序块,从而提高程序运行的效率,有以下两种手段:a.继承Threadpublic class ThreadDemo { public static void main(String[] args) { MyThread m1 = new MyThread("线程1");//实例化对象 MyThread m2 = new MyThre...原创 2018-03-27 15:50:34 · 172 阅读 · 0 评论 -
字节码指令简介
Java虚拟机的指令由一个字节长度的,代表着某种特定操作含义的数字以及跟随其后的零至多个代表此操作所需参数而构成字节码操作按用途大致分为9类:一 加载和存储指令用于将数据在栈帧中的局部变量表和操作数栈之间来回传输,包括以下内容:将一个局部变量加载到操作栈 将一个数值从操作数栈存储到局部变量表 将一个常量加载到操作数栈 扩充局部变量表的访问索引的指令<>结尾的代表了...原创 2018-08-03 20:17:20 · 354 阅读 · 0 评论 -
第二章-Java内存区域与内存溢出异常
这一章要学会的: 虚拟机中的内存时如何划分的(程序计数器 Java虚拟机栈 本地方法栈 Java堆 方法区) Java堆中如果不断创建新的实例则会产生OutOfMemoryError异常 虚拟机栈和本地方法栈溢出是由于为对象不断分配栈空间,导致栈空间不够用 方法区和运行时常量池溢出是由于不断调用本地方法导致出现OutOfMemoryError异常 2.1 概...原创 2018-07-22 21:46:03 · 129 阅读 · 0 评论 -
第四章-虚拟机性能监控与故障处理工具
第二节 jdk的命令行工具Sun JDK监控和故障处理工具:jps:显示指定系统内所有的HotSpot虚拟机进程 jstat:用于收集HotSpot虚拟机各方面的运行数据 jinfo:显示虚拟机配置信息 jmap:生成虚拟机的内存转储快照 jhat:用于分析heapdump文件,它会建立一个HTTP/HTML服务器,让用户可以在浏览器上查看分析结果 jstack:用于显示虚拟机的...转载 2018-07-30 19:14:52 · 183 阅读 · 0 评论 -
7.2 类加载的时机
这一章要了解:虚拟机如何加载这些Class文件?Class文件中的信息加入到虚拟机后会发生什么?类从被加载到虚拟机内存开始,到卸载出内存为止,它的整个生命周期包括:加载,验证,准备,解析,初始化,使用和卸载七个阶段,其中验证,准备,解析统称为连接加载,验证,准备,初始化和卸载这五个阶段的顺序是确定的这些阶段通常都是互相交叉地混合式进行的,通常会在一个阶段执行的过程中调用,激活另一个阶段...原创 2018-08-04 17:22:59 · 104 阅读 · 0 评论 -
实例变量与类变量的区别
https://www.cnblogs.com/scf141592/p/5726347.html实例变量也叫做对象变量,类变量也叫做静态变量它们区别在于:实例变量为所属对象所私有,而类变量为所有对象所共有如果一个对象将类变量的值进行改变,那么其他对象将不能改变他的值;而实例变量则是为对象所私有,一个对象改变不影响其他对象例子public class ClassPerso...转载 2018-07-31 19:11:20 · 13061 阅读 · 7 评论 -
7.3 类加载过程
类加载的全过程有五个阶段:加载,验证,准备,解析和初始化一 加载1 注意区分“加载”和“类加载”,加载是类加载过程的一个阶段2 在加载阶段,虚拟机需要完成以下三件事:通过一个类的全限定名来获取定义此类的二进制字节流+ 将这个字节流所代表的静态存储结构转化为方法区的运行时数据结构 在内存中生成一个代表这个类java.lang.Class对象,作为方法区这个类的各种数据的访问...原创 2018-08-05 15:38:34 · 155 阅读 · 0 评论 -
对于静态方法与非静态方法使用关键字synchronized
对于非静态同步方法:如果使用synchronized关键字的话,锁对象是thispublic class Test1 { public static void main(String[] args) { final Printer p = new Printer(); new Thread() { public void run() { while(true) { ...原创 2018-08-05 21:41:26 · 1381 阅读 · 0 评论 -
第八章 虚拟机字节码执行引擎
第一节 概述执行引擎是Java虚拟机最核心的组成部分之一,对于“物理机”,其执行引擎是直接建立在处理器,硬件,指令集和操作系统层面上的;而对于“虚拟机”,其执行引擎是由自己实现的,因此可以自行制定指令集和执行引擎的结构体系,并且能够执行那些不被硬件直接支持的指令集格式。 执行引擎在执行Java代码的时候可能会有解释执行(通过解释器执行)和编译执行(通过即时编译器产生本地代码执行)两种选择,...原创 2018-08-09 21:19:28 · 146 阅读 · 0 评论 -
实现火车站售票的例子
一共设置4个窗口,卖100张票public class Ticket_Test { public static void main(String[] args) { new Ticket().start(); new Ticket().start(); new Ticket().start(); new Ticket().start(); }}class Tick...原创 2018-08-05 22:19:00 · 512 阅读 · 0 评论 -
第六章-类文件结构
类文件结构包括魔数与Class文件的版本 常量池 访问标志 类索引,父类索引与接口索引集合 字段表集合 方法表集合 属性表集合第二节 无关性的基石Java虚拟机不和包括Java在内的任何语言绑定,它只与“Class文件”这种特定的二进制文件格式所关联,Class文件中包含了Java虚拟机指令集和符号表以及若干其他辅助信息。基于安全方面考虑,Java虚拟机规范要求在Clas...原创 2018-08-03 15:07:29 · 164 阅读 · 0 评论 -
try/catch,throws,throw的区别及联系
最近发现自己学东西并不是很严谨,如果让我仔细说出try/catch和throw,throws的区别,我发现我并不能准确的说出来,于是,在这里总结一下对于throw是语句抛出的异常,throws是方法抛出的异常throw要么和try...catch...finally语句配套使用,要么与throws配套使用,throws可以单独使用,然后由处理异常的方法获得再来说它们得联系:1 tr...原创 2018-08-08 15:04:07 · 1725 阅读 · 0 评论 -
7.4 类加载器
什么是类加载器?虚拟机设计团队把类加载阶段中的“通过一个类的全限定名来获取此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需的类,用于实现该动作的代码块称为“类加载器”一 类与类加载器1 虽然类加载器只用于实现类的加载动作,但它在Java程序中起到的作用却远远不限于类加载阶段 对于任意一个类,都需要由加载它的类加载器和这个类本身一同确...原创 2018-08-08 16:01:37 · 87 阅读 · 0 评论 -
嵌套类
如果不需要内部类对象与外部类对象之间有联系,那么就可以将内部类声明为static,称为嵌套类嵌套类意味着:要创建嵌套类的对下那个,并不需要其外围类的对象 不能从嵌套类的对象中访问非静态的外围类对象在一个普通的内部类中,通过一个特殊的this引用可以链接到其外围类对象,嵌套类就没有这个特殊的this引用。因此可以将嵌套类理解为 static方法接口内部的类嵌套类可以作为接口的一部...原创 2018-11-27 20:37:40 · 180 阅读 · 0 评论 -
Java中的内部类总结
参考内部类是定义在另一个类中的类,使用它的原因有:内部类方法可以访问该类定义所在的作用域中的数据,包括私有数据 内部类可以对同一个包中的其他类隐藏起来 当想要定义一个回调函数而不像编写大量代码时,使用匿名内部类比较便捷只有内部类可以是私有类,而常规类只可以具有包可见性或公有可见性内部类是个编译时的概念,一旦编译成功后,它就与外围类属于两个完全不同的类(当然他们之间还是有联系的...原创 2018-07-30 11:03:33 · 232 阅读 · 0 评论 -
3.4 HotSpot的算法实现
对于虚拟机实现对象存活判定算法和垃圾收集算法,必须对算法的执行效率有严格的考量,才能保证虚拟机高效运行一 枚举根节点1 可作为GC Roots的节点主要在全局性的引用(常量或者静态属性)与执行上下文(栈帧中本地变量表)中。2 可达性分析对执行时间很敏感,例如,在GC 停顿上,这项分析工作必须在一个能确保一致性的快照中进行,(一致性是指在整个分析期间,整个执行系统看起来就像被冻结在某个时...原创 2018-07-26 20:31:08 · 244 阅读 · 0 评论 -
Java线程的状态
任何线程一般都有5种状态:1.创建状态:Thread thread = new Thread();2.就绪状态:创建对象后调用start()方法,线程就进入了就绪状态3.运行状态:run()方法被调用4.堵塞状态:如被人为挂起或需要执行耗时的输入输出操作时,会进入阻塞状态,如sleep(),suspend(),wait()方法都会使线程进入阻塞状态5.死亡状态:线程调用stop()方法或者是run...原创 2018-03-27 16:33:51 · 136 阅读 · 0 评论 -
Java操作的相关方法
1.取得和设置线程的名称(如果没有为线程设置名称,则系统会自动为线程分配名称Thread-Xx)例如:class MyThread5 implements Runnable{ public void run(){ for(int i = 0;i<3;i++){ System.out.println(Thread.currentThread()....原创 2018-03-27 20:56:07 · 167 阅读 · 0 评论 -
第三章-垃圾收集器与内存分配策略
这一章要学什么? 了解垃圾收集的算法,几款jdk1.7中提供的垃圾收集器特点以及运作原理 通过代码学习Java虚拟机中自动内存分配及回收的主要规则 第一节 概述GC需要完成的三件事 哪些内存需要回收? 程序计数器,虚拟机栈,本地方法栈三个区域随线程而生,随线程而灭;栈中的栈帧随着方法的进入和退出有条不紊的执行着进栈和出栈的操作,每一个栈帧中分配多少内存基...原创 2018-07-23 10:55:19 · 132 阅读 · 0 评论 -
Java中的比较器
面试题:试比较Comparable和Comparator的区别? 如果对象数组需要排序,那么就必须设置排序规则,就要使用这两种比较器 对于Comparable接口来说,它往往是进行比较类需要实现的接口,它仅包含一个有compareTo()方法,只有一个参数,返回值为int,返回值大于0表示对象大于参数对象;小于0表示对象小于参数对象;等于0表示两者相等 对于Compara...原创 2018-07-23 10:59:28 · 4288 阅读 · 0 评论 -
Java核心技术-静态域与静态方法
4.4静态域与静态方法4.4.1静态域1静态域与实例域的区别:静态域独立于实例存在,它属于类,不属于对象;而实例域属于对象。(创建100个类对象,有100个实例域,但是只有一个静态域)4.4.2 静态常量1常用的静态常量:MATH.PI,System.out,2静态常量可以设置为public类型的, 普通域则不可以,因为静态常量已经被设为final的了。3ps:本地方法可以...原创 2018-07-23 11:13:55 · 268 阅读 · 0 评论 -
Java核心技术-集合
9.1 java集合框架一 将集合的接口与实现分离例如:队列接口的可能实现形式:public interface Queue<E>{void add(E element);E remove();int size();}队列的两种实现形式:一种使用循环数组,一种是使用链表*如果需要一个循环数组队列,就可以使用ArrayDeque类,如果需要一...原创 2018-07-23 14:40:38 · 307 阅读 · 0 评论 -
Java核心技术-并发
这一章要了解的: 什么是线程(创建线程的两种方式,推荐使用Runnable接口的方式) 中断线程(注意interrupted和isInterrupted的区别) 线程的状态(6种状态) 线程属性(4个) 同步***(锁对象 条件对象 synchronized关键字 同步阻塞) 阻塞队列(重点理解队列) 线程安全的集合 Ca...原创 2018-07-23 15:05:42 · 338 阅读 · 0 评论 -
Java核心技术-集合-映射
一 基本映射操作1 映射用来存放键/值对2 映射提供了两种通用的实现:HashMap和TreeMap,两个类都实现了Map接口 散列映射对键进行散列;树映射用键的整体顺序对元素进行排序,并将其组织成搜索树 散列或比较函数只能作用于键,与键关联的值不能进行散列或比较3应该如何选择散列或者树?与集合一样,散列的速度稍快一些,如果不需要按照排列顺序访问键,就最好选择散列。...原创 2018-07-23 15:47:08 · 239 阅读 · 0 评论 -
Java核心技术-泛型
泛型对于集合类尤为有用1 为什么要使用泛型程序设计泛型程序设计意味着编写的代码可以被很多不同类型的对象所重用。1.1 类型参数的好处在Java中增加泛型类之前,泛型程序设计是用继承实现的。ArrayList类只维护一个Object引用的数组:public class ArrayList{ private Object[] elementData; ......原创 2018-07-26 09:39:42 · 181 阅读 · 0 评论 -
垃圾回收器(上)
目前,还没有一种最好的收集器,只是我们可以对具体的应用可以找到最合适的收集器,在新生代中使用复制算法,在老年代中使用标记-整理算法一 Serial收集器(单线程)1 该收集器是最基本的,发展历史最悠久的收集器,存在于新生代中。2 该收集器有一个弊端,就是在进行垃圾收集的时候,必须暂停其他所有的工作线程,直到它收集结束,这就导致用户体验很差3 到现在为止Serial依然是虚拟机运行在...原创 2018-07-28 14:55:36 · 161 阅读 · 0 评论 -
深入理解Java虚拟机之G1收集器
G1是一款面向服务端应用的垃圾收集器,HotSpot团队赋予它的使命是未来可以替换掉CMS收集器,G1收集器的特点:并行与并发:G1可以充分利用多CPU,多核环境下的硬件优势,使用多个CPU来缩短Stop-The-World停顿的时间,部分其他收集器原本需要停顿Java线程执行的GC动作,G1收集器仍然可以通过并发的方式让Java程序继续执行 分代收集:虽然G1可以不需要其他收集器配合就能独...原创 2018-07-29 11:21:04 · 1017 阅读 · 0 评论 -
内存分配与回收策略
并不是所有的对象都在堆上分配,还有两个地方可以存放对象:栈和TLAB一 对象优先在Eden分配Minor GC和Full GC有什么不同?Minor GC(新生代GC):指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快Full GC(老年代GC):指发生在老年代的GC,出现了Major GC,经常会伴随至少一...原创 2018-07-29 19:49:39 · 140 阅读 · 0 评论 -
HashMap与HashTable的区别
首先说一下两者的共同点:它们底层都是Hash算法,都是双列集合(实现了Map接口)区别是:HashMap是线程不安全的,但是效率高(jdk1.2版本),而HashTable是线程安全的,但是效率低(jdk1.0版本) HashMap可以存储null键和null值,而HashTable不可以看一个例题:HashMap无contains方法 ...原创 2018-07-29 21:59:42 · 382 阅读 · 0 评论 -
记一次jdk更换版本以后eclipseMars打不开的经历
今天把jdk1.7的64位改为32 位后发现eclipseMars打不开了百度好久发现这个方法最好用更改eclipse.ini配置文件如图,注意一定要把vm的配置放到launch****的前面,这样就可以打开啦...转载 2019-06-29 15:45:53 · 973 阅读 · 0 评论