jvm
不羁朔风
但行好事,不问前程
展开
-
JVM加载class文件的原理
源文件:编写Java源文件(我们也称之为源代码文件),它的扩展名为.java; 编译:然后通过编译器把源文件编译成字节码文件,字节码文件扩展名为.class; 运行:最后使用解释器来运行字节码文件。 类加载的主要步骤:当程序要使用某个类时,如果该类还未被加载到内存中,则系统会通过加载,连接,初始化三步来实现对这个类进行初始化。加载通过类加载器将class文件读入内存,并为之创建...原创 2018-11-03 09:57:46 · 275 阅读 · 0 评论 -
垃圾回收算法
标记-清除算法(Mark-Sweep)1、标记出所有需要回收的对象2、在标记完成后统一回收所有被标记的对象缺点:一个是效率问题,标记和清除两个过程的效率都不高;另一个是空间问题,标记清除之后会产生大量不连续的内存碎片,空间碎片太多可能会导致以后在程序运行过程中需要分配较大对象时,无法找到足够的连续内存而不得不提前触发另一次垃圾收集动作。复制算法(Copying)1、...原创 2018-11-04 14:14:41 · 1077 阅读 · 0 评论 -
如何判断一个对象是否是垃圾对象
引用计数算法:给对象添加一个引用计数器,每当有一个地方引用它时,计数器值加1;当引用失效时,计数器值就减1;计数器为0,说明对象没有被使用但是主流的java虚拟机里面没有选用引用计数法来管理内存,其中最重要的原因是它很难解决对象之间互相循环引用的问题(objA和objB都有字段instance,赋值令objA.instance=ObjB和objB.instance=objA,除此之外,两者...原创 2018-11-04 14:12:18 · 2132 阅读 · 0 评论 -
JVM内存模型1.7和1.8的区别
方法区是 JVM 的规范,而永久代是这种规范的一种实现1.8版本用元数据区取代了1.7版本及以前的永久代。元数据区和永久代本质上都是方法区的实现。不过元空间与永久代之间最大的区别在于:元空间并不在虚拟机中,而是使用本地内存(也就是说jvm可以使用外边的内存)。因此,默认情况下,元空间的大小仅受本地内存限制,但可以通过以下参数来指定元空间的大小...原创 2018-11-04 14:11:39 · 4666 阅读 · 0 评论 -
Java的内存模型(JVM的内存划分)
线程共享区:堆和方法区线程独占区:栈,本地方法区和程序计数器堆:存放的是new出来的东西(对象实例),被final修饰的局部变量.java堆是垃圾收集器管理的主要区域,因此很多时候被称为”GC堆”,java堆还可以细分为新生代和老年代,默认的,新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2,新生代 ( Young ) 被细分为 Eden 和 两个 Survivo...原创 2018-11-04 14:11:00 · 160 阅读 · 0 评论 -
内存泄漏和内存溢出
内存泄漏内存泄漏是指不再被程序使用的对象或者变量还在内存中占存储空间 内存泄漏主要有两种情况:一是在堆中申请的空间没有被释放;二是对象已经不再使用,但仍然在内存中保留着,垃圾回收器则无法保证不再使用的对象会被释放.因此java语言中的内存泄漏主要指第二种情况(因为GC会解决第一种情况)例如:Vector v=new Vector(10);for(int i=0;i&l...原创 2018-11-04 14:10:10 · 717 阅读 · 0 评论 -
什么是GC
GC就是垃圾回收,它的主要作用就是回收程序中不再使用的内存.是否可以主动通知jvm进行垃圾回收?不能实时调用垃圾回收器对某个对象或者所有对象进行垃圾回收.但是可以通过System.gc()方法来通知垃圾回收器运行,当然,jvm也并不保证垃圾回收器马上就会运行.由于System.gc()方法的执行会停止所有的响应,去检查内存是否有可回收的对象,对程序的正常运行和性能造成了威胁,所以该方法不能...原创 2018-11-04 14:08:53 · 8179 阅读 · 0 评论 -
自定义类加载器
为什么要自定义类加载器? 加密:.class文件可以轻易的被反编译,如果你需要把自己的代码进行加密以防止反编译,可以先将编译后的代码用某种加密算法加密,类加密后就不能再用Java的ClassLoader去加载类了,这时就需要自定义ClassLoader在加载类的时候先解密类,然后再加载 从非标准的来源加载代码:如果你的.class文件是放在数据库、甚至是在云端,就可以自定义类加载器,从指...原创 2018-11-04 14:07:58 · 2186 阅读 · 0 评论 -
双亲委派模型
双亲委派模型的优点①安全性:避免用户自己编写的类动态地替换Java的核心类.如:String,Object类②避免了类的重复加载转载 2018-11-04 14:03:19 · 149 阅读 · 0 评论 -
Minor GC和Full GC
1、大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够空间进行分配时,虚拟机将发起一次MinorGC。2、执行GC后,将存活的对象分配到Survivor空间3、无法放到Survivor空间的对象,分配到老年代4、分配到Survivor的对象,经过多次Minor GC后,进入老年代 新生代GC(Minor GC):指发生在新生代的垃圾收集动作,因为Java对象大多都...原创 2018-11-04 14:15:10 · 1847 阅读 · 1 评论