本人遇到的问题是sendmail启动和发送邮件都特别慢,可能发一次邮件都需要卡几分钟,绝对的是不正常。在网上搜相关问题,基本可以确定应该是DNS解析主机名时遇到问题了。...我服务器的主机名自己改过,通过hostname这个命令可以查看当前的主机名,我的是:hangzhou。...然后打开hosts文件:vi /etc/hosts,看到现在的内容是: 127.0.0.1 localhost ::1 localhost localhost.localdomain...更改后的内容是: 127.0.0.1 localhost ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
image 3.重新启动Xcode
这个主要是java8之前遇到的问题,可以通过配置-XX:PermSize和-XX:MaxPermSize来设置。...在JVM启动之前通过在命令行设置参数-XX:MaxPermSize来设定永久代最大可分配的内存空间: -XX:PermSize:设置JVM非堆内存初始值,默认是物理内存的1/64;...} } } } 我们设置堆内存的大小为16M,当运行到第15次,当无法申请空间时会抛出OutOfMemoryError: 第三种 java8 java.lang.OutOfMemoryError...如果设置-XX:MaxMetaspaceSize,当,Metaspace被耗尽;与JDK1.7运行时非常相似,报错:ERROR: java.lang.OutOfMemoryError: Metadata...4)、根本原因:JVM虚拟机的基本原理?GC机制? JVM性能监控?...... 2、理解本质 将世界万物理解为原子,将整个互联网理解成0和1,这倒的确是非常本质了,不过并不能解答任何问题。
持久代删除了之后,很明显,JVM会忽略PermSize和MaxPermSize这两个参数,还有就是你再也看不到java.lang.OutOfMemoryError: PermGen error的异常了。...垃圾收集器参数 -XX:+UseParallelGC: 指定在NewGeneration使用ParallelCollector,并行收集,暂停APPThreads,同时启动多个垃圾回收Thread,不能和...-XX:MaxTenuringThreshold: 指定一个Object在经历了n次YoungGC后转移到OldGeneration区,在Linux64的Java6下默认值是15,此参数对于throughputcollector...Heap Out Of Memory 要使堆溢出非常简单,只要在程序中强引用许多对象例如字符串即可。...在Java8中,由于绝大多数的类元数据的空间都从本地内存中分配,所以你再也看不到java.lang.OutOfMemoryError: PermGen error的异常了。
1、jvm 内存模型 程序计数器 Program Counter Register: 记录的是正在执行的虚拟机字节码指令的地址, 此内存区域是唯一一个在JAVA虚拟机规范中没有规定任何OutOfMemoryError...、对象引用 线程请求的栈深度不够会报 StackOverflowError 异常 栈动态扩展的容量不够会报 OutOfMemoryError 异常 虚拟机栈是线程隔离的,即每个线程都有自己独立的虚拟机栈...jvm 管理,java8 以后元空间,直接使用物理内存。...3、jconsole 与 jvisualvm Jdk 的两个小工具 jconsole、jvisualvm(升级版的 jconsole);通过命令行启动,可监控本地和 远程应用。...运行:正在运行的 休眠:sleep 等待:wait 驻留:线程池里面的空闲线程 监视:阻塞的线程,正在等待锁 2、安装插件方便查看 gc Cmd 启动 jvisualvm
12.Java7和Java8在内存模型上有什么区别? 13.程序员最关注的两个内存区域? 14.直接内存是什么?...15.除了哪个区域外,虚拟机内存其他运行时区域都会发生OutOfMemoryError? 16.什么情况下会出现堆内存溢出? 17.如何实现一个堆内存溢出?...如果线程请求的栈深度大于虚拟机所允许的深度,则抛出StackOverflowError。 12.Java7和Java8在内存模型上有什么区别?...15.除了哪个区域外,虚拟机内存其他运行时区域都会发生OutOfMemoryError? 程序计数器。 16.什么情况下会出现堆内存溢出? 堆内存存储对象实例。我们只要不断地创建对象。...如果是Java8则没有Permanent Generation。 其中新生代(Young) 被分为 Eden和S0(from)和S1(to)。 22.Edem : from : to默认比例是?
java内存结构简单划分如下图所示,以下结构是java8之前版本,在java8里元空间取代了之前版本的方法区 可以看到java内存主要划分线程共享(堆、方法区),线程私有(程序计数器、虚拟机栈、...(boolean、byte、char、short、int、float、long、double)、对象引用(reference类型) 可能会出现StackOverFlowError和OutOfMemoryError...虚拟机启动时创建,唯一目的存放对象实例,几乎所有对象实例及数组都在这里分配,因为JIT编译器发展和逃逸分析技术的成熟导致并不是所有对象都在堆中 即使编译器:可以把Java字节码包括需要被解释的指令程序转换成可以直接发送给处理器的指令的程序...Full GC是非常重要的 JDK1.8方法区被彻底移除(JDK1.7就已经开始),取代的是元空间(直接使用的本地内存),原因是很难确定永久代的大小,依赖很多因素,比如JVM加载的class的总数、常量池的大小等...,不确定永久代大小很容易导致其OutOfMemoryError异常 运行时常量池 运行时常量池是方法区的一部分,class文件除了类的版本、字段、接口、方法等描述信息外,还有常量池(存放编译生成的各种字面量和符号引用
JVM启动参数使用中常见的错误: java.lang.OutOfMemoryError相信很多开发人员都用到过,这个主要就是JVM参数没有配好引起的,但是这种错误又分两种:java.lang.OutOfMemoryError...OutOfMemoryError:PermGenspace,其中前者是有关堆内存的内存溢出,可以同过配置-Xms和-Xmx参数来设置,而后者是有关永久域的内存溢出,可以通过配置-XX:MaxPermSize...这是因为Server模式启动的JVM采用的是重量级的虚拟机,对程序采用了更多的优化;而Client模式启动的JVM采用的是轻量级的虚拟机。所以Server启动慢,但稳定后速度比Client远远要快。...-XX:MaxPermSize=size: 这是 JDK1.7 之前使用的。Java8 默认允许的 Meta 空间无限大,此参数无效。...,可以通过无侵入方式来做很多事情,比如注入AOP 代码,执行统计等等,权限非常大。
1.虚拟机栈(VM stack) 每个线程有一个私有的栈,随着线程的创建而创建。 能抛出StackOverflowError和OutOfMemoryError异常。...和虚拟机栈VM stack一样,允许被实现成固定或者是可动态扩展的大小 和虚拟机栈VM stack一样,本地方法栈Native Method Stack也能抛出StackOverflowError和OutOfMemoryError...Java8的时候为什么要用元空间(Metaspace)替换掉永久代(PermGen): 永久代大小有限制,如果加载的类太多,很可能导致永久代内存溢出,即java.lang.OutOfMemoryError...也就是说在Java8的时候方法区由原来的永久代变成了元空间(类信息)和堆实现(常量池、静态变量)两个部分。...-XX:MaxTenuringThreshold=15,具体参看JVM系列之内存分配和回收策略中对象的衰老过程。
-Xmn:设置年轻代的大小 -XX:MetaspaceSize:设置元空间大小 元空间的本质和永久代类似,都是对JVM规范中方法区的实现。.../103021907 -XX:SurvivorRatio:设置新生代中eden和S0/S1空间的比例。...SurvivorRatio的值就是设置eden去的比例占多少,S0和S1相同 -XX:NewRatio:配置年轻带与老年带在堆结构的占比。...-XX:MaxTenuringThreshold:设置垃圾的最大年龄 java8之后这个值最大只能设置为15,最低是0 落地实现: 拖地实现的案例: 四大引用 强引用Reference(默认支持模式...:线程栈空间被耗尽,没有足够资源分配给新创建的栈帧 OutofMemoryError:Java heap space 堆内存中的空间不足以存放新创建的对象 OutOfMemoryError: GC
对于jvm规范中的方法区,java8以前,HotSpot对方法区的实现是在永久代。...堆内存的分布如下: G1圾收集器的堆空间分配策略如下: 后来出现的ZGC内存分配更加动态和灵活。本文以Java8为例,不讨论G1和ZGC 顺便回顾一下常用的垃圾收集算法: a....什么时候需要JVM调优 从表象来看,当应用的响应慢或者已经不能提供服务了,或应用吞吐量小,占用内存空间过大,我们就需要对应用进行调优了。这些表象一般伴随着频繁的垃圾回收,或者OOM。...JVM调优的指标一般有3个 应用占用的内存 主要是分配给jvm的堆内存,由启动jvm时-Xms和-Xmx参数指定,分别是jvm启动时分配的内存和运行时可以分配的最大内存。...Java中常见的OOM如下: java.lang.OutOfMemoryError: Java heap space 这个异常的原因无非2个,内存泄漏和内存溢出。
在Java服务启动时,可以增加下面的参数: -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=heapdump.hprof 在发生OOM时,程序会自动把当时的内存使用情况...通常异步主要有两种:多线程 和 mq。 5.1 线程池 5.2 mq 4.批量处理 5.远程调用 串行调用远程接口性能是非常不好的,调用远程接口总的耗时为所有的远程接口耗时之和。...5.1 并行调用 在java8之前可以通过实现Callable接口,获取线程返回结果。java8以后通过CompleteFuture类实现该功能。 + 线程池方案。...一致性hash算法 分库:是为了解决数据库连接资源不足问题,和磁盘IO的性能瓶颈问题。 分表:是为了解决单表数据量太大,sql语句查询数据时,即使走了索引也非常耗时问题。...辅助功能 11.1 开启慢查询日志 开启慢查询日志需要重点关注三个参数: slow_query_log 慢查询开关 slow_query_log_file 慢查询日志存放的路径 long_query_time
内 线程共享区域随虚拟机的启动/关闭而创建/销毁 运行时常量池(Runtime Constant Pool)是方法区的一部分。...OutOfMemoryError: 若Java虚拟机栈的内存大小允许动态扩展,且当线程请求栈时内存用完了,无法再动态扩展了,此时抛出OutOfMemoryError异常。 6....默认情况下年龄到达 15 的对象会被 移到老生代中。 13. JAVA8 将永久代替换为元数据区 Java8 中, 永久代已经被移除,被一个称为“元数据区”(元空间)的区域所取代。...如果在“GC roots”和一个对象之间没有可达路径,则称该对象是不可达的 不可达对象不等价于可回收对象, 不可达对象变为可回收对象至少要经过两次标记 过程。 15. JAVA中的四种引用类型?...可以非常精确控制停顿时间,在不牺牲吞吐量前提下,实现低停顿垃圾回收。
(Sun Hotspot虚拟机将这两块内存区域合并) 异常同上 Java堆 Java Heap Java堆是被所有线程共享的内存区域,在虚拟机启动的时候创建,此内存区域的唯一目的就是存放对象实例(对象的引用在栈...可通过-Xmx和-Xms控制 如果堆内存不足,会抛出OutOfMemoryError异常 方法区 Method Area(Non-Heap) 方法区也是线程共享的内存区域。...对象的访问定位建立对象是为了使用对象,Java程序需要通过栈上的reference数据来操作堆上的具体对象。目前主流的访问方式有使用句柄和直接指针两种。 如果使用句柄(稳定)。...中已被删除) -XX:MaxPermSize=10M (Java8中已被删除) 模拟Java堆内存OutOfMemoryError /** * 模拟Java堆内存OutOfMemoryError...在Java8中已被删除
占用一块非常小的空间,它的作用可以看作是当前线程所执行的字节码的行号指示器。...如果线程请求的栈深度大于虚拟机所允许的深度,则抛出StackOverflowError。 12.Java7和Java8在内存模型上有什么区别?...15.除了哪个区域外,虚拟机内存其他运行时区域都会发生OutOfMemoryError? 程序计数器。 16.什么情况下会出现堆内存溢出? 堆内存存储对象实例。我们只要不断地创建对象。...如果是Java8则没有Permanent Generation。 其中新生代(Young) 被分为 Eden和S0(from)和S1(to)。 22.Edem : from : to默认比例是?...jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机的各项参数。 使用jps 命令的 -v 参数可以查看虚拟机启动时显示指定的参数列表。
比如:「ConcurrentHashMap」 还是以分段加锁的模式来保证线程安全?在如:ArrayList 在删除元素的时候就比 LinkedList 慢?...试想记录每条线程执行过程中被中断的位置,需要占用的内存是非常少的;另外随着线程的销毁,对应的程序计数器占用的内存也就跟着被回收了;所以 Java 虚拟机规范规定此区域为唯一一块不会出现任何运行时异常的内存区域...和 OutOfMemoryError 两种异常。...下面通过指定 -Xmx15m -Xms10m,堆内存异常时的情况如下图: 可见,当堆内存不足以容纳新产生的对象时,会抛出 OutOfMemoryError 异常,并且指定说明了是 Java heap space...在 Java8 之前还有永久代的概念时,方法区就是在永久代实现的,而在 Java8 之后,已经不在有永久代的概念,而是使用了元数据空间进行了替代。
下面,以Java8为例,对JVM结构做一番总结。 1 JVM结构详解 首先,看下最新的JVM结构图: ?...此内存区域是唯一一个在JVM规范中没有规定任何OutOfMemoryError情况的区域。 ?...1.5 本地方法栈(Native Method Stacks) 本地方法栈(Native Method Stacks)与虚拟机栈作用相似,也会抛出StackOverflowError和OutOfMemoryError...然后,在Java8中,Hotspot取消了永久代。永久代真的成了永久的记忆。永久代的参数-XX:PermSize和-XX:MaxPermSize也随之失效。...同时也不用担心运行性能问题了,在覆盖到的测试中, 程序启动和运行速度降低不超过1%,但是这点性能损失换来了更大的安全保障。
堆的核心概述 一个Jvm实例只存在一个堆空间,堆也是Java内存管理的核心区域 Java堆区在Jvm启动的时候就被创建,其空间大小也就确定了,是Jvm管理的最大一块内存空间 堆内存的大小是可以调节的...新生区+养老区+永久区 Java8 及之后堆内存逻辑上分为三部分:新省去+养老区+元空间 约定:新生区=新生带=年轻代 养老区=老年区=老年代 永久区=永久代 设置推内存大小和OOM java...堆区用于存储Java对象实例,那么堆的大小在JVM启动时就已经设定好了,可以通过"-Xmx"和"-Xms"来进行设置 "-Xmx"用于表示堆区的起始内存,等价于"-XX:InitialHeapSize...最大内存大小:物理电脑内存大小 / 4 年轻代与老年代 存储在JVM中的Java对象可以划分为两类: 一类是生命周期短的瞬时对象,这类对象的创建和消亡都非常迅速 另一类对象的生命周期却非常长,在某些极端情况下可以和...朝生夕死”的 可以使用选项"-Xmn"设置新生代最大内存大小 这个参数一般使用默认值就可以了 对象分配过程 为对象分配内存是一件非常严谨和复杂的任务,JVM的设计者们不仅需要考虑内存如何分配、在哪里分配等问题
占用一块非常小的空间,它的作用可以看作是当前线程所执行的字节码的行号指示 器。...如果线程请求的栈深度大于虚拟机所允许的深度,则抛出StackOverflowError。 12.Java7和Java8在内存模型上有什么区别?...15.除了哪个区域外,虚拟机内存其他运行时区域都会发生OutOfMemoryError? 程序计数器。 16.什么情况下会出现堆内存溢出? 堆内存存储对象实例。我们只要不断地创建对象。...如果是Java8则没有Permanent Generation。 其中新生代(Young) 被分为 Eden和S0(from)和S1(to)。 22.Edem : from : to默认比例是?...jinfo(Configuration Info for Java)的作用是实时地查看和调整虚拟机的各项参数。 使用jps 命令的 -v 参数可以查看虚拟机启动时显示指定的参数列表。
此内存区域是唯一一个在Java虚拟机规范中没有规定任何OutOfMemoryError情况的区域。 二、java虚拟机栈(VM Stack) java虚拟机栈是线程私有,生命周期与线程相同。...本地方法栈为线程私有,功能和虚拟机栈非常类似。线程在调用本地方法时,来存储本地方法的局部变量表,本地方法的操作数栈等等信息。...本地方法:是非java语言实现的方法,例如,java调用C语言,来操作某些硬件信息。 四、堆(Heap): 堆是被所有线程共享的区域,实在虚拟机启动时创建的。...老年代:对象存活时间比较长(经过多次新生代的垃圾收集,默认是15次)的对象则进入老年的。 当堆中分配的对象实例过多,且大部分对象都在使用,就会报内存溢出异常(OutOfMemoneyError)。...当方法区满时,无法在分配空间,就会抛出内存溢出的异常(OutOfMemoneyError)。 java8中已经没有方法区了,取而代之的是元空间(Metaspace)。
领取专属 10元无门槛券
手把手带您无忧上云