- 浏览: 123735 次
- 性别:
- 来自: 北京
博客专栏
-
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 452http://ifeve.com/sun-misc-unsaf ... -
java 之DelayQueue实际运用示例
2016-06-15 17:09 542http://www.cnblogs.com/sunzhenc ... -
window下在同一台机器上安装多个版本jdk,修改环境变量不生效问题处理办法
2015-07-03 19:11 703window下在同一台机器上安装多个版本jdk,修改环境变量不 ... -
java实现base64
2015-04-29 15:30 545BASE64和其他相似的编码算法通常用于转换二进制数据为文本数 ... -
最全的静态网站生成器(开源项目)
2015-04-26 00:53 539最全的静态网站生成器(开源项目) http://www.ite ... -
关于有效的性能调优的一些建议
2015-04-19 12:09 770关于有效的性能调优的 ... -
java 代码时间和内存测试
2015-04-18 22:26 643// 测试用了多少内存 import java.util ... -
系统打印日志的10条建议(翻译)
2015-04-14 14:33 507http://uptoknow.iteye.com/blog/ ... -
Java编程最差实践
2015-04-14 14:32 414http://macrochen.iteye.com/blog ... -
几行代码写RPC
2015-04-13 22:55 473转自梁飞博客 package com.alibaba.stud ... -
58龙哥教你“如何做系统性能优化”(纯干货)
2015-04-12 21:58 616如何做系统性能优化 性能优化的目标是什么?不外乎两个: 时间 ... -
java 关于for和foreach,兼顾效率与安全
2014-12-05 14:46 17466关于for和foreach,兼顾效率与安全 对于数组的访问,是 ... -
java 关于for循环
2014-12-05 14:41 582关于使用for循环 有人喜欢使用for作类似while的循环: ... -
会话COOKIE? 持久COOKIE?
2014-11-07 00:15 582关于COOKIE和SESSION的关系,一直没搞清楚。网上一搜 ... -
内存cookie与持久cookie
2014-11-05 22:27 589cookie分两种 :会话cookie(session coo ... -
Java字符串底层理解
2014-09-11 15:11 7601. 栈(stack)与堆(heap)都是 ... -
java 字符串相加
2014-09-10 14:01 1537字符串相加。string + (原作者: 火龙果) 为了加 ...
相关推荐
Java虚拟机(JVM)的垃圾回收(Garbage Collection,简称GC)机制是Java编程中的一个重要组成部分,它自动管理程序的内存,确保无用的对象能够被有效地释放,从而避免内存泄漏。本文将深入探讨Java垃圾回收的基本...
《深入Java虚拟机》这本书是Java开发者深入了解JVM(Java Virtual Machine)的必备经典之作。它详尽地探讨了Java虚拟机的工作原理、内存管理、类加载机制、字节码执行以及性能优化等多个核心主题,旨在帮助开发者...
这本书是Java开发者必备的经典读物,它详细地解析了Java虚拟机(JVM)的工作原理,帮助读者深入理解Java程序的运行机制。尽管描述中提到内容为图片形式,但我们可以从其主题和标签中提炼出许多关于JVM的重要知识点。...
深入理解JVM对于优化代码性能、排查问题以及提升编程能力至关重要。本篇文章将详细探讨JVM的工作原理、内存管理、类加载机制以及垃圾收集等方面的知识。 首先,我们来看《深入JAVA虚拟机》这本书,它涵盖了JVM的...
Java虚拟机(JVM)是Java程序运行的核心组件,它为Java代码提供了平台无关的运行环境。本篇文章将深入探讨JVM的生命周期、体系结构、类加载机制、内存区域以及垃圾收集。 首先,JVM的生命周期与Java程序紧密关联。...
《深入理解嵌入式Java虚拟机》是一本专注于KVM(Kernel-based Virtual Machine)的权威教材,对于想要深入了解Java在嵌入式环境中的运行机制和技术的读者来说,这本书无疑是宝贵的资源。KVM是Linux内核中的一个模块...
这个过程包含了垃圾回收的布局优化、方法内联等,从而提高了运行时的性能。 - **运行时优化**: ART还支持运行时的优化,例如,随着时间的推移,它可以学习并优化应用的热点代码,提高执行速度。 - **内存管理**: ...
虽然《深入JAVA虚拟机》的第二版可能在物理形态上有些许不足,但其内容依然对理解JVM的运作机制有着重要的指导意义。学习这些知识点,有助于Java开发者提升代码的运行效率,解决内存问题,以及进行性能优化。
它详细阐述了Java虚拟机(JVM)的工作原理,包括内存管理、类加载机制、字节码执行以及垃圾回收等核心概念。深入理解这些知识点对于提升程序性能、解决运行时问题以及设计高效的应用程序至关重要。 1. **JVM架构** ...
《深入理解Java虚拟机(第二版)》是Java开发者必读的经典著作,它全面而深入地探讨了Java虚拟机(JVM)的工作原理和技术细节。这本书涵盖了从内存管理、类加载机制、字节码执行到垃圾收集算法等多个关键领域,为...
Java虚拟机还负责垃圾回收(Garbage Collection),即自动管理内存,释放不再使用的对象占用的内存,减轻程序员的负担。垃圾回收机制是Java语言与生俱来的特性之一,与C/C++等语言相比,Java的内存管理更简单、更...
深入理解JVM的工作原理,包括内存管理、垃圾回收、类装载机制、异常处理和多线程模型,对于优化Java应用的性能和解决运行时问题至关重要。JVM的配置参数调整、内存泄漏检测、性能分析工具的使用等都是Java开发者需要...
《深入Java虚拟机(原书第二版清晰版)》这本书是为那些已经学习了Java编程语言,希望通过深入理解Java虚拟机(JVM)来进一步提升自己技术能力的Java程序员所准备的。本书详细介绍了JVM的内部工作机制,包括但不限于...
在本文中,我们将深入探讨Java虚拟机的体系结构、垃圾回收机制、Java对象的生命周期和分代,以及相关的参数设置与调优。 Java虚拟机体系结构 Java虚拟机由三个主要组件组成:类加载器、运行时数据区和执行引擎。类...
《深入理解Java虚拟机》是一本深度探讨Java虚拟机(JVM)的著作,涵盖了JVM性能调优、内存模型以及虚拟机原理等多个关键领域。本文将基于这些主题,详细阐述其中的重要知识点。 首先,我们要了解Java虚拟机(JVM)...
它定义了JVM的概念模型,即一个抽象的计算机,规定了其运行时环境的基本结构和行为,包括类格式、数据类型、指令集、异常处理、垃圾回收等方面的标准。这一规范的重要性在于,它确保了跨平台的Java代码能够一致地...