- 浏览: 116041 次
- 性别:
- 来自: 北京
博客专栏
-
httclient实践与源...
浏览量:0
文章分类
- 全部博客 (141)
- java设计模式 (6)
- oracle (2)
- spring (0)
- java多线程 (12)
- Effective Java 读书笔记 (5)
- mysql (11)
- 书签 (2)
- Web前端 (2)
- python (6)
- 技术博客 (6)
- 搬家 (2)
- android (1)
- java (18)
- 架构 (6)
- linux (14)
- memcached (3)
- 测试 (1)
- 网络 (1)
- 高性能WEB (2)
- http (1)
- java io (2)
- jdbc (1)
- php (5)
- css (2)
- jenkins (1)
- jfinal (1)
- maven (3)
- 算法 (3)
- 代码规范 (1)
- shell (3)
- 安全 (1)
- fastJson源码剖析 (0)
- jdk源码分析 (0)
- git (1)
- 分布式知识点 (0)
- 分布式 (1)
- tcp (1)
- cpu (2)
- 软技能 (1)
- 编译原理 (1)
- 操作系统 (1)
- java虚拟机 (1)
- 处理器 (1)
- tbschedule (1)
- 需要看的源码 (1)
- idea (1)
- zookeeper (1)
- httpclient (1)
最新评论
-
lliiqiang:
功能是关键,但是因为人的性能有限,所以性能也有可能是功能,
关于有效的性能调优的一些建议 -
huangyunbin:
呵呵,感觉和缓存很相似,已经存在的直接缓存里取,缓存没有的话加 ...
享元模式
JAVA学习之4 引用与JVM
1.java内存管理分为内存分配和内存回收,都不需要程序员负责。
2.垃圾回收的机制主要是看对象是否有引用指向该对象。
java对象的引用包括
强引用
软引用
弱引用
虚引用
3.强引用
是指创建一个对象并把这个对象赋给一个引用变量。
强引用有引用变量指向时永远不会被垃圾回收。即使内存不足的时候。
4.软引用
软引用通过SoftReference类来实现
软引用的对象当系统内存充足时和强引用没有太多区别,但内存不足时会回收软引用的对象。
很多对象,但是只有一个引用指向他们(可分别指定)
public static void main(String[] args){ //创建软引用数组 SoftReference<Person> [] p = new SoftReference[100]; //100000 //赋值 for(int i = 0; i< p.length ;i++){ p[i] = new SoftReference<Person>(new Person("name"+i ,i)); } //测试 System.out.println(p[1].get()); System.out.println(p[4].get()); //通知系统进行回收 System.gc(); System.runFinalization(); System.out.println("---------------"); System.out.println(p[1].get()); System.out.println(p[4].get()); }
当系统内存充足时,系统不会进行软引用的内存回收,
当系统不足时将会回收软引用的对象。
当用 java -Xmx1m -Xms1m SoftReferenceTest 命令时强制堆内存为1m时 软引用引用对象
将被回收。(可以创建10000个对象)
5.weakReference 弱引用通过weakReference类来实现 public static void main(String[] args) { String str = new String("JAVA讲义"); // String str = "JAVA讲义"; 这种创建是在常量池中 //创建一个如引用对象 指向 str对象 WeakReference<String> wr = new WeakReference<String> (str); str =null; //输出 System.out.println(wr.get());//JAVA讲义 //强制垃圾回收 System.gc(); System.out.println(wr.get());//null }
弱引用具有很强的不确定性。因为垃圾回收每次都会回收弱引用的对象。
6.虚引用
软引用和弱引用可以单独使用,虚引用不能单独使用,需引用的作用是就跟踪对象被垃圾回收的
状态,程序可以通过检测与虚引用关联的虚引用队列是否已经包含了指定的虚引用,从而了解
虚引用的对象是否即将被回收。
PhantomReference对象实现
虚引用通过PhantomRefence类实现,它本身对对象没有影响,类似与没有应用,对象甚至感觉不到
虚引用的存在,如果一个对象只有一个虚引用存在,那么他就类似没有应用存在。
public static void main(String[] args){ // 创建一个对象 String str = new String("JAVA讲义"); // 创建一个引用队列 ReferenceQueue<String> rq = new ReferenceQueue<String>(); //创建一个虚引用,指定引用对象.不能单独使用必须关联引用队列 PhantomReference pr = new PhantomReference(str,rq); //切断强引用 str =null; //试图取得虚引用对象 System.out.println(pr.get()); //垃圾回收 System.gc(); System.runFinalization(); //取 出引队列中的最先进入队列的引用与pr进行比较 System.out.println(rq.poll()==pr); } //null //true
当程序强制垃圾回收后,只有虚引用引用字符串对象将会被垃圾回收,当被引用的对象被回收后,
对应的引用将被添加到关联的引用队列中。
7.如果使用软引用,弱引用,虚引用的引用方式引用对象,垃圾回收就能够随意的释放这些对象,
若果希望尽可能减小程序在起声明周期中所占用的内存大小,可以灵活使用这些引用。
如果使用了这些引用就不能保留这些对象的强引用(强制引用应该置null),否则就浪费了这些类提供的任何好处。
发表评论
-
java Unsafe类
2018-03-20 20:55 389http://ifeve.com/sun-misc-unsaf ... -
java 之DelayQueue实际运用示例
2016-06-15 17:09 480http://www.cnblogs.com/sunzhenc ... -
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
2015-07-03 19:11 661window下在同一台机器上安装多个版本jdk,修改环境变量不 ... -
java实现base64
2015-04-29 15:30 500BASE64和其他相似的编码算法通常用于转换二进制数据为文本数 ... -
最全的静态网站生成器(开源项目)
2015-04-26 00:53 498最全的静态网站生成器(开源项目) http://www.ite ... -
关于有效的性能调优的一些建议
2015-04-19 12:09 690关于有效的性能调优的 ... -
java 代码时间和内存测试
2015-04-18 22:26 609// 测试用了多少内存 import java.util ... -
系统打印日志的10条建议(翻译)
2015-04-14 14:33 458http://uptoknow.iteye.com/blog/ ... -
Java编程最差实践
2015-04-14 14:32 372http://macrochen.iteye.com/blog ... -
几行代码写RPC
2015-04-13 22:55 436转自梁飞博客 package com.alibaba.stud ... -
58龙哥教你“如何做系统性能优化”(纯干货)
2015-04-12 21:58 574如何做系统性能优化 性能优化的目标是什么?不外乎两个: 时间 ... -
java 关于for和foreach,兼顾效率与安全
2014-12-05 14:46 17348关于for和foreach,兼顾效率与安全 对于数组的访问,是 ... -
java 关于for循环
2014-12-05 14:41 525关于使用for循环 有人喜欢使用for作类似while的循环: ... -
会话COOKIE? 持久COOKIE?
2014-11-07 00:15 549关于COOKIE和SESSION的关系,一直没搞清楚。网上一搜 ... -
内存cookie与持久cookie
2014-11-05 22:27 547cookie分两种 :会话cookie(session coo ... -
Java字符串底层理解
2014-09-11 15:11 7021. 栈(stack)与堆(heap)都是 ... -
java 字符串相加
2014-09-10 14:01 1479字符串相加。string + (原作者: 火龙果) 为了加 ...
相关推荐
1. JVM调优 1.1 JVM调优总结(一)-一些概念 1.2 JVM调优总结(二)-一些概念 1.3 JVM调优总结(三)-基本垃圾回收算法 1.4 JVM调优总结(四)-垃圾回收面临的问题 1.5 JVM调优总结(五)-分代垃圾...4.3 深入理解JVM
详细介绍了jvm生命周期和体系结构及垃圾回收机制
深入java虚拟机第二版 不是很清晰 但还能看 第1-4章介绍了java虚拟机的体系结构,包栈、堆...本书以利于理解的方式深入解释了java虚拟机的内部原理,深入理解这些内容,将对读者更快速的编写更高效的应用程序大有裨益!
本书十三个章节,分别讲解了android系统基础知识,android系统的结构和核心框架,Java虚拟机和Dalvik...虚拟机垃圾回收和线程管理,JNI基本原理,JIT编译的基本莞城和具体方法,以及虚拟机中异常管理机制方面的知识
从架构角度来看,Java虚拟机主要包括类加载器、运行时数据区、执行引擎、垃圾收集器等部分。类加载器负责将字节码文件加载到内存中,运行时数据区用于存储程序执行时所需的数据,执行引擎则负责执行字节码文件,而...
包括jvm 的内存模型 对象的创建过程 垃圾回收算法 垃圾回收器 内存分配和回收策略
我们将分析它是如何进行垃圾回收,内存管理,堆压缩,以及其他高级特性。我们还将研究如何配置JVM使得性能得以最优化。演讲者将列出对于IBM和SUN JVM在1.4.2以及1.5版本上对WebSphere有用的一组调优参数。如果您对...
java所使用的垃圾回收算法。 基本思想:通过一系列的名为“GC Root”的对象作为起点,从这些节点向下搜索,搜索所走过的路径称为引用链(Reference Chain),当一个对象到GC Root没有任何引用链相连时,则该
第31节深入理解对象的访问定位00:08:01分钟 | 第32节垃圾回收-概述00:06:20分钟 | 第33节垃圾回收-判断对象是否存活算法-引用计数法详解00:14:08分钟 | 第34节垃圾回收-判断对象是否存活算法-可达性分析法详解00:...
它能干什么,文章从作者得角度带大家深入Java虚拟机相关内容,希望对大家有帮助。这里我们使用举例来说明为什么要学习Java虚拟机,其实这个问题就和为什么要学习数据结构和算法是一个道理,工欲善其事,必先利其器。...
├─(9) 0809_【了解】垃圾回收算法.mp4 ├─(10) 0810_【了解】串行垃圾收集器.mp4 ├─(11) 0811_【了解】并行垃圾收集器.mp4 ├─(12) 0812_【了解】CMS垃圾收集器.mp4 ├─(13) 0813_【掌握】G1垃圾收集器.mp4 ...
第2章 Java内存区域与内存溢出异常 / 24 2.1 概述 / 24 2.2 运行时数据区域 / 25 2.2.1 程序计数器 / 25 2.2.2 Java虚拟机栈 / 26 2.2.3 本地方法栈 / 27 2.2.4 Java堆 / 27 2.2.5 方法区 / 28 2.2.6 运行...
JVM虚拟机分享,包括虚拟机发展、内存模型及垃圾回收机制介绍
这本书的内容是帮你全面了解java虚拟机,本书第1版两年内印刷近10次,98%以上的评论全部为5星级的好评,是整个Java图书领域公认的经典著作和超级畅销书,繁体版在台湾也十分受欢迎。第2版在第1版的基础上做了很大的...
该文档总结了JVM主要的七种垃圾回收器特点与区别,分别描述了他们作用于堆内存的哪些区域,采用单线程还是多线程工作方式,在运行过程中是否...是笔者对周志明老师的《深入理解java虚拟机》一书的学习概括,方便记忆。
2.4.7 垃圾回收 29 2.4.8 JNI中的异常处理 32 2.5 本章小结 32 第3章 深入理解init 33 3.1 概述 34 3.2 init分析 34 3.2.1 解析配置文件 38 3.2.2 解析service 42 3.2.3 init控制service 48 3.2.4 属性服务...
主要关于java虚拟机的运行时数据区域,参考了周志明的深入理解java虚拟机,还涉及到了native方法、垃圾回收机制等等。
2019最新深入理解JVM内存结构及运行原理(JVM调优)高级核心课程视频教程下载。JVM是Java知识体系中的重要部分,对JVM底层的了解是每一位Java程序员深入Java技术领域的重要因素。本课程试图通过简单易懂的方式,系统...
总共110讲,非常适合jvm初学者,希望对大家有所帮助,奋斗吧少年