堆(栈管运行,堆管存储,堆是垃圾收集器管理的主要区域)java
方法区(存放类的元数据信息,常量和静态变量)算法
直接内存(非运行数据区的一部分)缓存
Java内存模型(Java Memory Model,JMM)是java虚拟机规范定义的,工做内存和主内存。Java内存模型中规定全部变量都存储在主内存,主内存是共享内存区域,全部线程均可以访问,服务器
但线程对变量的操做(读取赋值等)必须在工做内存中进行,首先要将变量从主内存拷贝的本身的工做内存空间,而后对变量进行操做,操做完成后再将变量写回主内存,不能直接操做主内存中的变量,工做内存中存储着主内存中的变量副本拷贝markdown
volatie函数
总线嗅探机制优化
每一个处理器经过嗅探在总线上传播的数据来检查本身的缓存值是否是过时了spa
类加载检查 -> 分配内存(执行碰撞/空闲列表) -> 初始化零值 -> 设置对象头 -> 执行 init 方法线程
类加载过程:加载->链接->初始化。链接过程又可分为三步:验证->准备->解析。code
BootstrapClassLoader(启动类加载器)
ExtensionClassLoader(扩展类加载器)
AppClassLoader(应用程序类加载器)
自定义加载器
每个类都有一个对应它的类加载器。系统中的 ClassLoder 在协同工做的时候会默认使用 双亲委派模型 。即在类加载的时候,系统会首先判断当前类是否被加载过。已经被加载的类会直接返回,不然才会尝试加载。加载的时候,首先会把该请求委派该父类加载器的 loadClass()
处理,所以全部的请求最终都应该传送到顶层的启动类加载器 BootstrapClassLoader
中。当父类加载器没法处理时,才由本身来处理。当父类加载器为null时,会使用启动类加载器 BootstrapClassLoader
做为父类加载器。
java.lang.Object
类的话,那么程序运行的时候,系统就会出现多个不一样的 Object
类。GC 调优原则;
多数的 Java 应用不须要在服务器上进行 GC 优化; 多数致使 GC 问题的 Java 应用,都不是由于咱们参数设置错误,而是代码问题; 在应用上线以前,先考虑将机器的 JVM 参数设置到最优(最适合); 减小建立对象的数量; 减小使用全局变量和大对象; GC 优化是到最后不得已才采用的手段; 在实际使用中,分析 GC 状况优化代码比优化 GC 参数要多得多。
GC 调优目的;
将转移到老年代的对象数量下降到最小; 减小 GC 的执行时间。
GC 调优策略;
标记清除,复制,标记整理和分代收集算法
强引用、软引用、弱引用、虚引用