`
文章列表
        在Java源文件编译为Class文件时,并不包含传统编译中的“连接”步骤。即一切方法调用在Class文件中都只是符号引用,而不是真正的指向方法在实际运行内存布局中的入口地址(相当于类加载过程中“解析”步骤中的 ...
定义 实现了“通过一个类的全限定名来获取描述此类的二进制字节流”动作的代码模块被称为“类加载器”。   对于任意一个类,都需要由加载它的类加载器和这个类本身一同确立其在Java虚拟机中的唯一性。换句话说,如 ...
Java5.0中增加了ConcurrentHashMap用来替代同步且基于散列的Map,以及CopyOnWriteArrayList,用于在主要操作为遍历的情况下代替同步的List。在新的ConcurrentMap接口中增加了一些常用的复合操作支持,例如“如果没有则添加”,替换以及有条件删除等。 使用并发容器来代替同步容器,可以极大的提高系统伸缩性并降低风险。   Java5.0中增加了两种新的容器类型:Queue和BlockingQueue。Queue用来临时保存一组待处理的元素。
    加载 在加载阶段,虚拟机需要完成以下三件事: 1、通过类的全限定名来获取定义此类的二进制字节流。但规范并没有指明二进制字节流要从一个Class文件中获取,所以,在Java的发展历史中出现了很多字节流的提供方式 ...
类从被加载到虚拟机内存中开始,直到卸载出内存为止,它的整个生命周期包括了:加载、验证、准备、解析、初始化、使用和卸载这7个阶段。其中,验证、准备和解析这三个部分统称为连接(linking)   其中,加载、验证 ...
几种常见的内存分配策略   对象优先在Eden分配  大多数情况下,对象优先在Eden区分配,当Eden区没有足够的内存空间时,虚拟机发起一次Minor GC(指发生在新生代的垃圾收集动作,回收速度较快),如果在这次Minor GC执行的时候,发现Eden空间存活的对象大小超过了Survivor空间能够承受的大小,就只好通过分配担保机制将对象提前转移到老年代。    -XX:SurvivorRatio=8 指定新生代中Eden空间与Survivor空间大小的比例,这里是8比1。   大对象直接进入老年代 所谓的大对象,就是指需要大片连续内存空间的对象。比如很长的字符串及数组。 ...
几种基本的垃圾收集算法   标记-清除算法          顾名思义,此方法涉及到两个步骤:标记和清除。首先标记出所有需要回收的对象,在标记完成后统一完成回收。标记的过程在《Java垃圾收集之对象引用》中已经介绍过。此方法是最基础的垃圾收集算法,后续的收集算法均基于此方法改进而得来。         它的缺点主要有两个,一个是效率问题,标记和清理的过程执行效率都不高;第二是清理过后容易产生很多不连续的内存空间,即内存碎片。太多的内存碎片,会导致在分配占用大量内存空间的对象时候没有足够的连续内存而不得不提前触发另一次垃圾收集动作。   复制算法         为了解决上述算法 ...
发布          对象的发布是指:使对象能够在当前作用域之外的代码中使用。例如在一个非私有的方法中将私有属性的对象引用直接返回。   逸出         是指当某个不该被发布的对象被发布出去。例如,如果在对象完成构造之前就将其发布出去,就会破坏线程安全性。   警惕this引用逸出。当从对象的构造函数中发布对象的时候,只是发布了一个未构造完成的对象。在构造过程中使用this引用逸出的一个常见的现象是:在构造函数中启动一个线程,无论是显式创建(将它传递给构造函数)还是隐式创建(由于Thread或者Runable是该对象的一个内部类),this引用都会被新创建的线程共享。对应 ...
引用计算方法         Java中没有采用引用计数方法管理内存,最主要的原因是此方法很难解决对象间的循环引用问题。           Java中采用的引用管理方法为:根搜索算法。基本思路是通过一系列的名为“GC Roots”的对象 ...
在出现内存溢出异常时Dump内存堆转储快照以便事后进行分析: -XX:+HeapDumpOnOutOfMemoryError   设置堆大小:将堆的最小值 -Xms参数与最大值 -Xmx参数设置为一样即可避免堆自动扩展。   设置虚拟机栈大小: -Xss最小值   设置方法区容量:-XX:PermSize  -XX:MaxPermSize 最大方法区大小
根据《Java虚拟机规范(第二版)》的规定,Java虚拟机所管理的内存将会包括以下几个运行时数据区域    程序计数器 作用可以看做是当先线程所执行的字节码的信号指示器。         每一条JVM线程都有自己的程序计数器(“线程私有”内存);         在任意时刻,一条JVM线程只会执行一个方法的代码。该方法称为该线程的当前方法(Current Method);         如果该方法是java方法,那程序计数器保存JVM正在执行的字节码指令的地址;         如果该方法是native,那程序计数器的值是undefined;         此内存区域是 ...
当读操作和写操作发生在不同的线程中,对共享变量的读和写操作会产生意料之外的结果。为了确保多个线程之间对内存写入操作的可见性,必须使用同步机制。   加锁的含义不仅仅局限于互斥行为,还包括内存可见性。为 ...
好久没有写过技术博客了,这两年一直在使用evernote,写给自己看和写给别人看是不同的。写给自己看的,一般会记录一些关键的点,累积起来可以当工具书用,不会写太多分析和讲解,但写给大家看的,就会让自己放在一个什么都不会的位置上,把分析和思路都会写清楚。想来想去,这样时间长了,学过的东西不用就会生疏,回头再重新读书又是时间成本,而且回头看过自己写的日志,能清楚的看到我自己的发展轨迹。   所以决定,从今天起,把学到的知识,整理一下。
主界面:   编辑界面、新增界面   图表界面   横向图表(自适应横竖屏,尺寸自适应)
  2 登陆后   3调出搜索配置范围层   4配置范围    5修改配置   6 改动后的浮层   7 查询结果   8 选中结果   9 操作结果
Global site tag (gtag.js) - Google Analytics