类加载器机制的层次结构每个.java文件都包含着程序的业务逻辑,这些.java文件经过Java编译器编译成.class文件,.class文件中包含着Java代码转换后的虚拟机指令,当需要使用某个类时,虚拟机加载它的.class文件,并创建对应的class对象,将.class文件加载到虚拟机内存,这个过程就成为类加载加载将字节码文件加载到内存,并将这些静态数据转换成方法区中的运行时数据结构,在堆中生
字节码应用场景AOP技术、Lombok去除重复代码插件、动态修改class文件等字节码技术优势Java字节码增强指的是在Java字节码生成之后,对其进行修改,增强其功能,这种方式相当于对应用程序的二进制文件进行修改,Java字节码增强主要是为了减少冗余代码,提高性能等实现字节码增强的主要步骤为:修改字节码,在内存中获取到原来的字节码,然后通过一些工具(如ASM,Javaasist)来修改它的byt
串行回收和并行回收串行回收:JDK1.5前的默认算法,执行垃圾回收时程序停止时间较长,缺点是只有一个线程并行回收:多个线程执行垃圾回收,适合吞吐量系统,回收时系统停止运行Serial收集器最古老的、最稳定的的收集器,可能产生较长的停顿,仅适用单线程收集,新生代、老年代均采用串行回收,新生代采用赋值算法,老年代采用标记->压缩算法,垃圾收集过程中会StopTheWorld(服务暂停)特点:CP
常见参数配置-XX:+PrintGC每次触发GC的时候打印相关日志-XX:+UseSerialGC串行回收-XX:+PrintGCDetails更详细的GC日志-Xms堆初始值-Xmx堆最大可用值-Xmn新生代堆最大可用值-XX:SurvivorRatio用来设置新生代中eden空间和from/to空间的比例.-XX:NewRatio配置新生代与老年代占比1:2-XX:SurvivorRatio用
什么是垃圾回收机制?不定时的清理不可达对象,不可达对象不会立马被回收,垃圾收集器在一个Java程序中是自动的,不能强制执行,即使我们已经清楚的确定这块内存已经没有用处了,应该被回收掉,也不能强制执行,我们能做的只是调用System.gc()来建议垃圾回收器,这块内存可以回收,但垃圾收集器回收不回收,什么时候回收,都是不可知的finalize()方法的作用在垃圾收集器回收对象前做必要的清理工作,这个
方法区:也叫永久区,线程共享,用于存储类结构信息的地方,包括常量池、静态变量、构造函数等类型信息,类型信息是由类加载器在类加载时从类文件中提取出来的,永久区同样存在垃圾回收机制,用为用户通过加载器加载的一些类同样会成为垃圾,JVM会回收一个未被类引用所占的空间,以使方法区空间达到最小堆:是存储Java对象的地方,是GC的主要区域,同样是线程共享的主要区域Java虚拟机栈:存储基本数据类型,局部变量
什么是Disruptor?Disruptor是一个高性能的异步处理框架,或者可以认为是最快的消息框架(轻量的JMS),也可以认为是一个观察者模式的实现,或者事件监听模式的实现性能远远高于传统的BlockingQueue容器Disruptor使用观察者模式,主动将消息发送给消费者,而不是等消费者从队列中取,在无锁的情况下,实现queue(环形,RingBuffer)的并发操作,性能远高于Blocki
CountDownLatch(计数器)CountDownLatch位于并发包下,利用它可以完成类似于计数器的功能,如果线程A需要等待其他n个线程执行完毕后才能执行,此时就可以利用CountDownLatch来实现这个功能,CountDownLatch是通过一个计数器来实现的,计数器的初始值为线程数量,每当一个线程完成了自己的任务后,计数器的值就会减1,当计数器的值为0时,表示所有线程已经执行完毕,
什么是多线程通讯?多线程通讯就是多个线程同时操作一个资源,但是操作的动作不同代码实现packagecom.kernel;cla***es{privateStringname;privateStringsex;privateBooleanflag;publicStringgetName(){returnname;}publicvoidsetName(Stringname){this.name=nam
什么是线程安全问题?当多个线程共享一个全局变量,对其做写操作时,可能会受到其他线程的干扰,从而引发线程安全问题内置锁(synchronized)内置锁也叫互斥锁,可以保证线程的原子性,当线程进入方法时,会自动获得一个锁,一旦锁被获得,其他线程必须等待获得锁的线程执行完代码释放锁,会降低程序的执行效率使用方式:同步方法publicsynchronizedvoidsale(){if(trainCoun
进程和线程概念进程:资源分配的基本单位。线程:独立调度的基本单位,一个进程中可以包含多个线程,它们之间共享进程资源,同一进程中线程切换不会引发进程切换,不同进程中的线程切换会引发进程切换。为什么要使用多线程?多线程的是指在同一时刻有多条执行路径,目的是为了提高程序的运行效率。多线程应用场景:多线程下载、数据库连接池、分批发送短信等。多线程的创建方式继承Thread(不建议使用,因为Java支持多继
1.集合从上图可以看出,集合框架包含两种类型的容器:一是Collection,用来存储元素,二是Map,用来键值对关系映射,Collection接口又分为List、Set、Queue三个子接口,下面又分为一个抽象类,最后是具体实现类,常用的有ArrayList、LinkedList、HashSet、LinkedHashSet、HashMap、LinkedHashMap接口Collection:Co
1.面向对象和面向过程的区别面向过程优点:性能比面向对象要高,因为类的实例化需要消耗大量的资源,通常用在嵌入式系统开发中缺点:代码量太大,难维护,难扩展面向对象优点易维护、易复用、易扩展,由于面向对象有封装、继承、多态性的特性,可以设计出低耦合的系统,使系统更加灵活、更加易于维护缺点性能低于面向对象程序2.Java语言的特点简单、易学跨平台面向对象分布式健壮性支持多线程支持网络编程支持编译和解释3
Copyright © 2005-2025 51CTO.COM 版权所有 京ICP证060544号