代码改变世界

随笔分类 -  Java se 基础知识

判断对象存活的方法

2017-05-20 16:44 by fengna, 232 阅读, 收藏, 编辑
摘要: 1. 引用计数法:给对象添加一个引用计数器,每当一个地方引用它,计数器值加1;当引用失效时,计数器值就减1 2. 可达性分析法:当一个对象到GC Roots没有任何引用链相连时,该对象被判断为可回收的对象,主流方法 可作为GC Roots对象的: (1)虚拟机栈中引用的对象(栈帧中的本地变量表); 阅读全文

java内存分配策略

2017-05-20 16:34 by fengna, 295 阅读, 收藏, 编辑
摘要: 对象的内存分配,从大方向将就是在堆上分配,对象主要分配在新生代的Eden区上,如果启动了本地线程分配缓存,将按线程优先在TLAB上分配。 1. 对象优先在Eden区分配:大多数情况下,对象在新生代Eden区中分配。 2. 大对象直接进入老年代:这里的大对象是指需要大量连续内存空间的java对象,例如 阅读全文

JAVA反射机制教程-获取类对象

2017-05-17 20:25 by fengna, 7405 阅读, 收藏, 编辑
摘要: 1. 什么是类对象 类对象,就是用于描述这种类,都有什么属性,什么方法的 2. 获取类对象 获取类对象有3种方式(1). Class.forName(2). Hero.class(3). new Hero().getClass()在一个JVM中,一种类,只会有一个类对象存在。所以以上三种方式取出来的 阅读全文

JAVA 泛型通配符 ? EXTENDS SUPER 的用法

2017-05-17 20:14 by fengna, 1922 阅读, 收藏, 编辑
摘要: 1. <? extends Hero> ArrayList heroList<? extends Hero> 表示这是一个Hero泛型或者其子类泛型heroList 的泛型可能是HeroheroList 的泛型可能是APHeroheroList 的泛型可能是ADHero所以 可以确凿的是,从hero 阅读全文

lock与sychronized关键字

2017-05-17 19:56 by fengna, 238 阅读, 收藏, 编辑
摘要: 1. lock与sychronized关键字的区别 (1) Lock是一个接口,而synchronized是Java中的关键字,synchronized是内置的语言实现,Lock是代码层面的实现。(2)Lock可以选择性的获取锁,如果一段时间获取不到,可以放弃。synchronized不行,会一根筋 阅读全文

volatile关键字

2017-05-08 19:59 by fengna, 139 阅读, 收藏, 编辑
摘要: volatile关键字: 1. 作用:是使变量在多线程间是可见(即可见性),而sychronized关键字实现可见性与原子性(同步性);强制从公共堆栈中取得变量的值,而不是从线程私有数据栈中取得变量的值。 2. 关键字sychronized与关键字volatile比较: (1)关键字volatile 阅读全文

sychronized关键字(多线程)

2017-05-08 18:53 by fengna, 233 阅读, 收藏, 编辑
摘要: sychronized关键字: 1. 作用:利用该关键字来创建内置锁,实现线程同步; 2. 分类:(1)sychronized同步方法;(2)sychronized同步代码块; 3. sychronized同步方法: (1)对其他sychronized同步方法或sychronized(this)同步 阅读全文

原子变量

2017-05-06 13:54 by fengna, 321 阅读, 收藏, 编辑
摘要: 1. 锁的劣势:(包括syncronized实现的内置锁、ReentrantLock) (1)开销大:线程的挂起与恢复存在很大开销,并且存在着较长时间的中断。 2. volatile变量: (1)优势:更轻量级的同步机制,在使用这些变量时不会发生上下文切换或线程调度,提供了内存可见性保证 (2)劣势 阅读全文

显示锁(ReentranLock)

2017-05-06 13:32 by fengna, 624 阅读, 收藏, 编辑
摘要: 1. Lock接口:定义了一组抽象的加锁操作,提供了一种无条件的、可轮询的、定时的以及可中断的锁获取操作,所有的加锁和解锁的方法都是显示的。 2. ReentrantLock锁:实现了Lock接口,并提供了与synchronized相同的互斥性和内存可见性,也提供了可重入的加锁语义。finally后 阅读全文

对象的共享

2017-05-06 12:15 by fengna, 277 阅读, 收藏, 编辑
摘要: 1.volidate关键字:volidate关键字可以保证多线程程序使用共享且可变的long和double等类型的变量是安全的,非volidate类型则会不安全。 Java语言提供一种稍弱的同步机制,即volidate变量,用来确保将变量的更新操作通知到其他线程。在访问volidate变量时不会执行 阅读全文