JVM机制与内存问题
文章平均质量分 70
xingzjx
script/script
展开
-
java之内存优化的建议
1、使用final 在jdk里面的String类型是final的,所以String里面的方法也是final的,方法申明成final后java编译器会寻找机会内联所有的final方法(至于怎样内联由编译器决定),这样可以大大提高程序的运行性能。 补充:HotSpot虚拟机就使用了方法内联来优化虚拟机的运行效率,另外一种策略是热点优化。2、将过期引用置为null 当确定一个对原创 2015-04-18 14:04:19 · 617 阅读 · 0 评论 -
java之内存泄露
一、过期引用导致的内存泄露注意:当对象不使用后将对象设置为null,这个时候虚拟机不一定释放该内存,至于什么时候释放由垃圾回收算法确定。当对象不在使用时,而不回收有可能出现内存泄露的问题。在Effective Java里面有一条建议,消除过期的对象引用。实例:JDK中栈的内存优化问题1、消除过期对象引用的原因(出现内存泄露的原因):随着栈的增加,然后再收缩,从栈中出来的对象将不会被原创 2015-04-18 14:27:05 · 616 阅读 · 0 评论 -
java之软引用
一、java中的四种引用简介1、强引用:创建对象的引用,GC抛出OOM也不回收内存2、软引用:在OOM之前回收内存3、弱引用:在GC发现之后释放内存4、虚引用(幽灵引用):使用后就释放二、软引用的使用1、用途:软引用是主要用于内存敏感的高速缓存,在jvm报告内存不足之前会清除所有的软引用,这样以来gc就有可能收集软可及的对象,可能解决内存吃紧问题,避免内溢出。2、引用的原创 2015-04-18 14:32:22 · 677 阅读 · 0 评论 -
虚拟机之内存管理
一、内存管理的两种方式 运行的程序要与内存进行交互。内存是操作系统中的重要资源,内存管理就是对内存进行分配和释放。内存的管理有两种方式:1、显示管理 对于C和C++这类编程语言是显示内存管理的典型代表。如C++,当程序通过new关键字创建新的对象之后,就会分配相应的内存资源,当程序不需要这些资源时,需要在代码上将其显示释放,一般通过delete方法来实现。这种方式管理内存容易出现内原创 2015-04-18 14:17:37 · 982 阅读 · 0 评论 -
java虚拟机之HotSpot
一、HotSpot简介 HotSpot是sun公司从版本java1.3开始使用的默认虚拟机,Oracle公司的java1.7使用的也是HotSpot虚拟机。不同厂商之间的java虚拟机是不同的,但是它们都遵守java虚拟机规范。二、JIT简介 JIT的全名是Just-in-time,即时编译的意思。java程序编译成class文件,加载到内存后成为字节码。jvm在执行字节码时,采用原创 2015-04-18 14:29:55 · 1352 阅读 · 0 评论 -
虚拟机简介
一、跨平台特性 java语言具有“一处编译,处处运行”的特性,这种特性正是因为java虚拟机的原因。二、虚拟机的作用1、为应用程序屏蔽操作系统的区别。 java虚拟机屏蔽了操作系统的底层实现,如在操作系统上创建一个线程,可以通过抽象的java.lang.Thread类来完成。而Thread类在不同的平台上的实现不同,其实现由虚拟机来实现。2、为程序提供运行时的支持能力。原创 2015-04-18 14:15:11 · 726 阅读 · 0 评论 -
jvm之垃圾回收器
一、垃圾回收器简介1、概念:垃圾回收器是用来自动管理虚拟机中内存的,包括自动分配和自动回收的功能,免去了由程序员来释放内存的麻烦。2、原因:因为由程序员自己释放内存很可能会出现各种问题,如内存泄露或者悬挂引用,从而导致程序终止。二、常见垃圾回收算法1、引用计数器法(1)实现思路:当新的引用指向新的对象时;对象的计数器加1,当引用失效时,对象的计数器减1;当引用计数器的值变为0时原创 2015-04-18 14:22:58 · 975 阅读 · 0 评论 -
java之内存分配
一、内存模型简介 首先,我们的代码的内存分配都是在jvm上进行的,jvm是应用程序和操作系统的桥梁,正是jvm机制解决了跨平台的问题。所以,java程序的内存分配都是在jvm上进行的。下面说一下常见的内存:寄存器、栈内存、堆内存、常量池。 寄存器:jvm内部虚拟寄存器,存储速度很快,程序不可控制。 栈内存:用来保存局部变量的值,主要是基本类型的值和局部对象的引用指针。 堆内原创 2015-04-06 00:36:13 · 378 阅读 · 0 评论