1:对象的4种引用:强、软、弱、虚

强引用:如果一个对象具有强引用,那垃圾回收器绝不会回收它。当内存空间不足,Java虚拟机宁愿抛出OutOfMemoryError错误,使程序异常终止,也不会靠随意回收具有强引用的对象来解决内存不足的问题。如: Myclass my=new MyClass();此时的my对象拥有强引用,不会回收。

软引用:如果一个对象只具有软引用,则内存空间足够,垃圾回收器就不会回收它;如果内存空间不足了,就会回收这些对象的内存。只要垃圾回收器没有回收它之前,该对象就可以被程序使用。比如说:SoftReference aSoftRef=new SoftReference(aRef);由强引用aRef得到一个软应用,则如果我们令 aRef=null;此时这个对象就只有软应用了。在此后一段时间,如果JVM内存不够用了,就会回收这个对象。但在回收之前,我们仍可以通过这个软引用的get()方法去获取到对象。

弱引用:如果一个对象只具有弱引用,则当GC扫描到该对象时就会回收它,不必等到内存不够时才回收。同样,在回收之前我们也可以通过get()方法获取对象,如果回收之后再调用get()方法就会返回null。

虚引用:如果一个对象仅持有虚引用,那么它就和没有任何引用一样,在任何时候都可能被垃圾回收器回收虚引用主要用来跟踪对象被垃圾回收器回收的活动。虚引用与软引用和弱引用的一个区别在于:虚引用必须和引用队列 (ReferenceQueue)联合使用。当垃圾回收器准备回收一个对象时,如果发现它还有虚引用,就会在回收对象的内存之前,把这个虚引用加入到与之 关联的引用队列中,我们通过关联队列就可以知道有哪些对象被垃圾回收器回收了

2:重要关键字

synchronized:可以把任何一个非null 对象 作为"锁",当synchronized作用在方法上时,锁住的便是对象实例(this);当作用在静态方法时锁住的便是对象对应的Class实例,因为 Class数据存在于永久带,因此静态方法锁相当于该类的一个全局锁;当synchronized作用于某一代码域时,锁住的便是对应的代码块。

syncrhoized实现时使用了自旋锁,当一个线程进入竞争队列前,先自旋(等一等看锁会不会释放,一旦释放立刻获得锁对象),自旋期间线程可以做一些无意义的操作来实现暂时占用CPU而不是阻塞。线程自旋超过一定时间还没获得锁,就进入竞争队列被筛选。

transient:Java中一个类在定义时如果实现了Serilizable接口,那么这个类的对象就可以被序列化。(序列化:把对象内容转化为byte数组。反序列化:从byte数组提取信息重构出对象),但是我们考虑到类中的某些重要属性(如:密码)不想被序列化,那么我们可以用transient关键字修饰它。

volatile:volatile只能修饰变量,意思是:该变量对于所有线程可见。所有作用在该变量上的操作引起变量的值的变化都会第一时间通知到所有使用它的线程。

本质:每个线程在使用volatile变量时,如果对变量的值作出了改变,则CPU强制线程立刻把新的值写入主存中。而其他线程在使用到这个变量时,不是从缓存中读取过期值而是直接从主存中读取最新值。

与syncrhoized比较:比synchronized的使用和执行成本会更低,因为它不会引起线程上下文的切换和调度,也不会引发线程阻塞;volatile仅能实现变量的修改可见性,但不具备原子特性,而synchronized(和lock)则可以保证变量的修改可见性和原子性。(原子性:操作不可被分割执行)

3:权限修饰词的修饰作用

private:只在同一类中可见

default:同一类、同一包中可见

protected:在同一类、其子类、同一包中可见

public:对外都可见

Java基础知识三点的更多相关文章

  1. java 基础知识三 java变量

    java  基础知识 三 变量 1.作用域 {} 包围起来的代码 称之为代码块,在块中声明的变量只能在块中使用 2.常量 就是固定不变的量,一旦被定义,它的值就不能再被改变. 3.变量 变量必须在程序 ...

  2. 逻辑运算符,if、swtch语句(java基础知识三)

    1.逻辑运算符的基本用法 * A:逻辑运算符有哪些 &(逻辑与) |(逻辑或) !(逻辑非) ^(逻辑异或) &&(短路与) ||(短路或) * 注意事项: * a:逻辑运算符 ...

  3. java基础知识三 流

    Java 流(Stream).文件(File)和IOJava.io 包几乎包含了所有操作输入.输出需要的类.所有这些流类代表了输入源和输出目标. Java.io 包中的流支持很多种格式,比如:基本类型 ...

  4. Java基础知识(壹)

    写在前面的话 这篇博客,是很早之前自己的学习Java基础知识的,所记录的内容,仅仅是当时学习的一个总结随笔.现在分享出来,希望能帮助大家,如有不足的,希望大家支出. 后续会继续分享基础知识手记.希望能 ...

  5. java基础知识小总结【转】

    java基础知识小总结 在一个独立的原始程序里,只能有一个 public 类,却可以有许多 non-public 类.此外,若是在一个 Java 程序中没有一个类是 public,那么该 Java 程 ...

  6. 学习android学习必备的java基础知识--四大内部类

    学习android必备的java基础知识--四大内部类 今天学习android课程,因为我的主专业是JAVA,但是兴趣班却有这其他专业的同学,学习android 需要具备一些java的基础知识,因此就 ...

  7. JAVA基础知识之网络编程——-网络基础(Java的http get和post请求,多线程下载)

    本文主要介绍java.net下为网络编程提供的一些基础包,InetAddress代表一个IP协议对象,可以用来获取IP地址,Host name之类的信息.URL和URLConnect可以用来访问web ...

  8. java基础知识回顾之---java String final类普通方法

    辞职了,最近一段时间在找工作,把在大二的时候学习java基础知识回顾下,拿出来跟大家分享,如果有问题,欢迎大家的指正. /*     * 按照面向对象的思想对字符串进行功能分类.     *      ...

  9. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

随机推荐

  1. 怪奇物语第二季/全集Stranger Things迅雷下载

    Netflix的叫好叫座剧<怪奇物语 Stranger Things>第二季更新上线日期为美国时间10月27日,第二季讲述在1984年(相隔上季一年),印第安纳州的Hawkins镇市民仍然 ...

  2. ExpandoObject对象的JSON序列化

    如果: dynamic expando = new ExpandoObject(); d.SomeProp=SomeValueOrClass; 然后,我们在控制器中: return new JsonR ...

  3. 14 道 JavaScript 题?

    http://perfectionkills.com/javascript-quiz/ https://www.zhihu.com/question/34079683 著作权归作者所有.商业转载请联系 ...

  4. Apache的三种工作模式

    Web服务器Apache目前一共有三种稳定的MPM(Multi-Processing Module,多进程处理模块)模式. 它们分别是prefork,worker和event,它们同时也代表这Apac ...

  5. C++二维数组 取地址 复制给 二维指针

    本来应该是个简单的问题,但是我就不明白了,为什么会段错误了... #include<stdio.h> #define UINT32 unsigned int UINT32 NType1_X ...

  6. QT国际化(中英转换)

    转载:https://blog.csdn.net/u012528526/article/details/54707233 QT国际化(中英转换) 我们都知道在安卓中,想做国际化很简单,只需要建立对应的 ...

  7. JS实现千分位

    方法一:正则实现 function format (num) { ,}(?=(\d{})+$)/g; return (num + '').replace(reg, '$&,'); } 解释: ...

  8. svn“Previous operation has not finished; run 'cleanup' if it was interrupted“报错的解决方法

    今天碰到了个郁闷的问题,svn执行clean up命令时报错“Previous operation has not finished; run 'cleanup' if it was interrup ...

  9. Spring(九):Spring配置Bean(二)自动装配的模式、Bean之间的关系

    XML配置里的Bean自动装配 Spring IOC容器可以自动装配Bean,需要做的仅仅是在<bean>的autowire属性里指定自动装配的模式,模式包含:byType,byName, ...

  10. Linux反编译

    转自:http://bbs.pediy.com/showthread.php?threadid=11315 一个简单的linux crackme的逆向前言    最不喜欢的就是写破解教程,酒后一时冲动 ...