java-虚拟机
一杯就醉1929
这个作者很懒,什么都没留下…
展开
-
java 垃圾回收机制
java 垃圾回收机制垃圾回收机制的目的是用于清除已经不在使用java对象。找到不再使用的java对象,清除它,使得此空间可以重新存储对象。垃圾回收机制的实现算法1:引用计数器 堆中的每个对象都有一个引用计数,(注:这个引用计数存放在堆中),当一个对象创建并且分配给一个引用变量时,这个计数加一。 new Object();时还不会加1,当 Object obj = new Object(原创 2016-03-30 23:13:01 · 422 阅读 · 0 评论 -
JDK1.7之下的inern用法
JDK1.7之下的inern用法:String s = new String("1aaa"); s.intern(); String s2 = "1aaa"; System.out.println(s2 == s.intern()); true原创 2017-08-27 20:44:56 · 699 阅读 · 0 评论 -
垃圾收集器(二)
1、串行回收器串行回收器使用单线程进行垃圾回收的回收器。每次回收时,串行回收器只有一个工作线程,对于并行能力较弱的计算机来说,串行回收器的专注性和独占性往往有更好的性能表现。串行回收器可以在新生代和老年代使用。根据作用于不同的堆空间,分为新生代串行回收器和老年代串行回收器。 新生代串行收集器使用复制算法。原创 2017-08-27 18:25:00 · 412 阅读 · 0 评论 -
分代垃圾收集器
将堆划分成不同的代(Generation) 分为老年代(Old Generation 或者Tenured Generation)和新生代(Young Generation)。新生代又分为Eden空间(称之为 伊甸园 ,喻意为对象“出生”的地方)和Survivor空间,一般会有两个完全相同的Survivor空间,称之为from Survivor和to Survivor。原创 2017-08-21 23:31:08 · 747 阅读 · 0 评论 -
java 内存分配策略
1 对象优先在新生代Eden区中进行分配,当Eden区没有足够空间进行分配时,虚拟机进行一次Minor GC2 大对象直接进入老年代 所谓大对象就是需要大量连续内存空间的java对象,最典型的大对象就是很长的字符串以及数组。3 长期存活的对象进入老年代 虚拟机为每个对象定义了对象年龄的计数器,如果对象在Eden区出生,并经过第一次Minor GC后仍然存活,并且能够被Survivor原创 2017-06-11 22:27:43 · 410 阅读 · 0 评论 -
java虚拟机对锁优化所做的努力
1、 锁偏向锁偏向是一种针对加锁操作的优化手段。如果一个线程获得了锁,那么锁就进入偏向模式。当这个线程再次请求锁时,无须再做任何同步操作。这样就节省了大量有关锁申请的操作,从而提高了程序性能。因此,对于几乎没有锁竞争的场合,偏向锁有比较红啊的优化效果,因为连续多次极有可能是同一个线程请求相同的锁。而对于锁竞争比较激烈的场合,其效果不佳。因为在竞争激烈的场合,最有可能的情况是每次都是不同的线程来请求相原创 2017-07-05 20:45:28 · 402 阅读 · 0 评论 -
java 类加载器
虚拟机设计团队把类加载阶段中的“通过一个类的权限定名来获取描述此类的二进制字节流”这个动作放到Java虚拟机外部去实现,以便让应用程序自己决定如何去获取所需要的类。实现这个动作的代码模块成为“类加载器”。原创 2017-06-13 22:16:41 · 237 阅读 · 0 评论 -
java 虚拟机 类加载
java 虚拟机 类加载 类从被加载到虚拟机内存开始,到卸载出内存为止,整个生命周期包括:加载、验证、准备、解析、初始化、使用和卸载。验证 、准备、解析 统称为连接。解析发生的阶段并不固定,它可能发生初始化之后。虚拟机规范确定了有且只有5种情况,必须进行初始化。1 遇到字节码指令new getstatic putstatic invokestatic时必须对进行初始化。这四种字节码指令产生的场原创 2017-06-11 23:19:53 · 251 阅读 · 0 评论 -
对象已死吗
1 引用计数法: 2 可达性分析算法 ; 垃圾收集算法 强引用 软引用 弱引用 虚引用原创 2017-06-11 19:36:50 · 371 阅读 · 1 评论 -
在java虚拟机中对象的创建过程
虚拟机遇到一条new指令时,首先将去检查这个指令的参数是否能在常量池中定位到一个类的符号引用,并且检查这个符号引用代表的类是否已经被加载、解析和初始化过。如果没有,那么必须先执行相应的类加载过程。在类加载检查通过后,接下来虚拟机将为新生对象分配内存。对象所需内存的大小在类加载完成后便可完全确定,为对象分配空间的任务等同于把一块确定大小的内存从Java堆中划分出来。原创 2017-06-11 18:19:40 · 441 阅读 · 0 评论 -
java虚拟机 运行时数据区域
程序计数器 虚拟机栈 本地方法栈 方法区 堆原创 2017-06-07 23:32:20 · 793 阅读 · 0 评论 -
Java虚拟机:类的初始化
一、 类的初始化是在类加载的最后阶段进行的.对一个进行主动引用时,才会进行此类的初始化原创 2016-06-21 19:32:24 · 886 阅读 · 0 评论 -
Java内存 happens-before原则
在博客<< Java内存的三个特性>> 中已经解释过了可见性。CPU的速度是远高于内存的,如果CPU总是需要和内存进行交互,那么CPU会在长时间内处于空闲状态,这样就会造成资源的浪费。这就出现了高速缓存:寄存器、多级cache . CPU对某一变量进行修改了之后,会将其存放到这些高速缓存中,在某个合适的时刻,这个变量的值会刷新进主内存,这在单线程环境下是没有问题的。在多线程环境下,何时将一个线程修原创 2016-06-15 23:31:54 · 591 阅读 · 0 评论 -
java 内存模型:重排序
为了提高程序的执行性能,编译器和处理器常常会对指令做重排序。 有以下三种类型: 1、编译器优化的重排序 2、指令级并行的重排序 3、内存重排序原创 2016-05-14 16:33:26 · 936 阅读 · 0 评论 -
Java内存模型 之三个特性:
Java内存模型有三个特性:原子性、可见性、有序性。这个三个特性主要体现在多线程环境下对变量的操作。这些变量包括:实例字段、静态字段、构成数组对象的元素。原创 2016-06-13 22:46:12 · 2120 阅读 · 0 评论 -
处理器重排序与内存屏障
处理器重排序: 现代处理器使用写缓冲区来临时保存向内存写数据。 内存屏障指令 为了保证内存可见性,java编译器在生成编译器指令时,会假如内存屏障指令来禁止特定的处理器重排序原创 2016-05-16 22:46:11 · 1506 阅读 · 0 评论 -
垃圾收集算法和垃圾收集器
垃圾收集算法在jvm中常用的垃圾收集算法有三种:标记清除、 复制算法 、标记压缩 标记清除算法:原创 2017-08-23 23:57:33 · 370 阅读 · 0 评论