精华内容
下载资源
问答
  • JVM参数优化

    2019-07-18 20:19:07
    背景 JVM server模式默认使用GC回收器是Parallel Scavenge,这是一个吞吐量优先的回收器,FULL GC时间过长,影响响应。另外默认的JVM参数在针对特定场景可以有优化的...这是JDK8最新款商用垃圾收集器,新生代和老年...

    背景

    JVM server模式默认使用GC回收器是Parallel Scavenge,这是一个吞吐量优先的回收器,FULL GC时间过长,影响响应。另外默认的JVM参数在针对特定场景可以有优化的空间。

     

    参数调优

    Xss

    栈大小,默认一个线程的栈为1M。减少栈容量(比如512K)来换取更多的线程,可以有效解决内存溢出。

    UseG1GC

    这是JDK8最新款商用垃圾收集器,新生代和老年代都能使用,垃圾收集器原理和分类请参考:https://segmentfault.com/a/1190000004233812

     

    MaxGCPauseMillis

    最大GC停顿时间,这是个软目标,JVM将尽可能(但不保证)停顿小于这个时间,由于场景是要求低时延,所以这个值调的比较小(100ms)

     

    AlwaysPreTouch

    这个参数比加,JAVA进程启动的时候,虽然我们可以为JVM指定合适的内存大小,但是这些内存操作系统并没有真正的分配给JVM,而是等JVM访问这些内存的时候,才真正分配,这样会造成以下问题。 
    1、GC的时候,新生代的对象要晋升到老年代的时候,需要内存,这个时候操作系统才真正分配内存,这样就会加大young gc的停顿时间; 
    2、可能存在内存碎片的问题。


    MaxTenuringThreshold

    默认情况下,当新生代执行了15次young gc后,如果还有对象存活在Survivor区中,那么就可以直接将这些对象晋升到老年代,但是由于新生代使用copy算法,如果Survivor区存活的对象太久的话,Survivor区存活的对象就越多,这个就会影响copy算法的性能,使得young gc停顿的时间加长,建议设置成6。
     

     

     

    参考链接:

    https://blog.csdn.net/linsongbin1/article/details/55049477

    http://calvin1978.blogcn.com/articles/jvmoption-7.html

     

     

    展开全文
  • 代码证明堆内存空间就是新生代、老年代、元空间三个区域:通过修改堆参数,模拟出OOM问题JVM垃圾收集器(Java Garbage Collection)。本教程均在JDK1.8+HotSpot为例来讲解的.先来看看Java7的:再来看看Jva8的从上图中...

    代码证明堆内存空间就是新生代、老年代、元空间三个区域:通过修改堆参数,模拟出OOM问题

    JVM垃圾收集器(Java Garbage Collection)。本教程均在JDK1.8+HotSpot为例来讲解的.

    先来看看Java7的:

    b30c8dd996c4d435b06ad3ef5bfff7d5.png

    再来看看Jva8的

    33321502052906a32c8b0c65c22350c8.png

    从上图中我们可以看出,java8之后换成了元空间。那么怎么证明,堆区是有新生代、永久代、元空间三部分组成的呢?OOM这个错误我们都熟悉,那么怎么手动制造出一个OOM呢?如果16G的物理内存,JVM堆内存能够分到多少G的内存空间呢?我们带着这些疑问来一起学习吧

    在Java8中,永久带已经被移除了,被一个称为元空间的区域所取代。元空间的本质和永久带类似。

    元空间与永久带之间最大的区别在于:

    永久带使用的是JVM的堆内存空间,但是java8以后的元空间并不是虚拟机中的空间,而是使用了本机的物理内存空间的。

    因此,默认情况下,元空间大小仅受到本地内存大小的限制。类的元数据放入native memory,字符串常量池和静态类变量存放在java堆区中。这样可以加载多少类的元数据,就不再由MaxPermSize控制了,而是由系统的实际可用空间来控制。

    Java默认堆区空间大小是物理内存的六十四分之一(1/64).默认最大堆空间是物理内存的1/4

    想要对JVM调优的话,就先要知道自己的家底。默认情况下,当前服务的JVM最大和最小内存是多少呢?怎么查看呢?

    我们可以使用Runtime这个类来查看。具体代码如下:

    cc7c9c0b8ae4e9473c51dcbb7985d8c5.png

    运行结果:

    9322f0f8f61842593672785ec4bbef9d.png

    来看看凯哥本子上物理内存大小:

    9a0c7fb8db8a77b71561fe3c98a5e922.png

    可以看到是24GB。

    从打印的结果,我们看知道,凯哥本子上的JVM最大内存是5.4个G。也就是大约等于物理内存的1/4

    JVM最小内存就是:368。大约是物理内存的1/64.

    是不是证明了JVM默认堆内存最大值占用物理内存的1/4,最小值占用物理内存的1/64。没有忽悠,没有骗人吧。

    a4b41e1a9ea5f2902aebbe788b928b4c.png

    看到了吗?totoalMemory方法和maxMemory方法都是native的。在前面,我们讲解JVM体系图的时候,讲解了native关键字修饰的方法,这里就不赘述了。

    在idea中通过VM options参数来操作

    269695df300fa4f8b8e6130f78e9fcee.png

    找到需要修改的类,然后在VM options,添加参数。如下图:

    d7bca9d555a3ac171618e0772485a0e8.png

    输入如下参数:-Xms1024m -Xmx1024m -XX:+PrintGCDetails

    325327931c909ab4101a6723ed4046a3.png

    堆内存调优参数说明:

    命令

    描述

    -Xms

    设置初始分配大小,默认物理内存的1/64

    -Xmx

    最大分配内存,默认为物理内存的1/4

    -XX:+PrintGCDetails

    输出详细的GC处理日志

    修改好了之后,重新运行程序,我们看看控制台打印的信息:

    7cb8b8831aa762d2724ff2465de9e487.png

    修改后,我们发现堆内存的最大和最小的值是相等的。需要说明一点,在生产环境中,我们最好也把最大和最小值设置一样。这样可以减少空间差距切换从而影响了程序的稳定健壮性。

    在上图2部分区域,就是打印出了jvm的详细信息。我们可以明显地看到如下几个数据:

    PSYoungGen、ParOldGen、Metaspace这三个区域,正好就是我们之前文章说的,新生代、老年代、元空间这三个区域。这是逻辑上区分的。

    在物理上区分是2个,分别是新生代和老年代,怎么证明呢?

    141e6c7388aaa4136a8a6ac2631c3d19.png

    还记得我们参数设置的是1024m吧。把新生代和老年代的total相加,是不是就是打印出最大和最小堆内存的值?

    再来看看新生代和老年代空间占用比例:305664/699392是不是于等于1/2。

    怎么证明新生代是由伊甸园区、from区、to区三部分组成呢?三部分占用比例怎么证明是8/1/1呢?请看下图:

    4bf1b879b9dbd42aa2a018b331fa5113.png

    是不是有三个区域。占用空间分别是:26214/43520/43520.是不是就是8/1/1?

    现在再回过头,来看看堆内存,是不是更清晰了。

    0b24b145186f454c4516319171bdc55d.png

    思路:

    写个while(true)死循环,通过设置JVM的参数,设置小一点。比如8M,然后执行就会出现OOM。或者new一个字节数组,大于配置的参数就可以。比如设置的堆内存大小是8M,那么byte[] bytes =new byte[10*1024*1024]; //10M的对象。一定会OOM

    c6f2d6164a6e9b8ea8344562d353761c.png

    -Xms8m -Xmx8m -XX:+PrintGCDetails

    997bc6818d4fd91deb8f2e0f25b0cddd.png

    运行后,查看控制台打印信息.

    8bdccbe4c3f743869f6bd559be0d928b.png

    是不是看到了熟悉的

    [Full GC (Allocation Failure) Exception in thread "main" java.lang.OutOfMemoryError: Java heap space。

    下一篇文章预告:GC收集日志信息分析。欢迎大家和凯哥(凯哥java:kaigejava)一起继续学习。

    展开全文
  • 简介JVM参数有很多很多,根据我的统计JDK8JVM参数总共有1853个,正式的参数也有680个。这么多参数带给我们的是对JVM的细粒度的控制,但是并不是所有的参数都需要我们自己去调节的,我们需要关注的是一些最常用...

    简介

    JVM的参数有很多很多,根据我的统计JDK8中JVM的参数总共有1853个,正式的参数也有680个。

    这么多参数带给我们的是对JVM的细粒度的控制,但是并不是所有的参数都需要我们自己去调节的,我们需要关注的是一些最常用的,对性能影响比较大的GC参数即可。

    为了更好的让大家理解JDK8中 GC的调优的秘籍,这里特意准备了八张图。在本文的最后,还附带了一个总结的PDF all in one文档,大家把PDF下载回去,遇到问题就看两眼,不美吗?

    分代垃圾回收器的内存结构

    为了更好的提升GC的效率,现代的JVM都是采用的分代垃圾回收的策略(ZGC不是)。

    79d151a276941d668ed9cbe84c415d8f.png

    java运行时内存可以分为JVM内存和非JVM内存。

    JVM内存又可以分为堆内存和非堆内存。

    堆内存大家都很熟悉了,YoungGen中的Eden,Survivor和OldGen。

    非堆内存中存储的有thread Stack,Code Cache, NIO Direct Buffers,Metaspace等。

    注意这里的Metaspace元空间是方法区在JDK8的实现,它是在本地内存中分配的。

    JDK8中可用的GC

    JDK8中到底有哪些可以使用的GC呢?

    这里我们以HotSpot JVM为例,总共可以使用4大GC方式:

    cc1fc8fecc3cbc067fa854a86a31ad38.png

    其中对于ParallelGC和CMS GC又可以对年轻代和老年代分别设置GC方式。

    大家看到上图可能有一个疑问,Parallel scavenge和Parallel有什么区别呢?

    其实这两个GC的算法是类似的,Parallel Scavenge收集器也经常称为“吞吐量优先”收集器,Parallel Scavenge收集器提供了两个参数用于精确控制吞吐量; -XX:MaxGCPauseMillis:控制最大垃圾收集停顿时间; -XX:GCTimeRatio:设置吞吐量大小。

    同时Parallel Scavenge收集器能够配合自适应调节策略,把内存管理的调优任务交给虚拟机去完成。

    JDK8中默认开启的是ParallelGC。

    打印GC信息

    如果想研究和理解GC的内部信息,GC信息打印是少不了的:

    34b881df1f8adb2e14cd0f879968ab4a.png

    上图提供了一些非常有用的GC日志的控制参数。

    内存调整参数

    JVM分为Heap区和非Heap区,各个区又有更细的划分,下面就是调整各个区域大小的参数:

    0f8845bd4edb9b76c98fedfd39eae162.png

    Thread配置

    TLAB大家还记得吗?TLAB的全称是Thread-Local Allocation Buffers。TLAB是在Eden区间分配的一个一个的连续空间。然后将这些连续的空间分配个各个线程使用。

    因为每一个线程都有自己的独立空间,所以这里不涉及到同步的概念。

    2df2df5a66dd9f36c8e1e0905943b7d1.png

    上图就是TLAB的参数。

    通用GC参数

    虽然JDK8的GC这么多,但是他们有一些通用的GC参数:

    cc2507d9fb82a4c30def425c427ba574.png

    这里讲解一下Young space tenuring,怎么翻译我不是很清楚,这个主要就是指Young space中的对象经过多少次GC之后会被提升到Old space中。

    CMS GC

    CMS全称是Concurrent mark sweep。是一个非常非常复杂的GC。

    复杂到什么程度呢?光光是CMS调优的参数都有一百多个!

    下图是常用的CMS的参数。

    6cdaf64c1a1808fc235cff5387ff2b99.png

    CMS这里就不多讲了,因为在JDK9之后,CMS就已经被废弃了。

    主要原因是CMS太过复杂,如果要向下兼容需要巨大的工作量,然后就直接被废弃了。

    在JDK9之后,默认的GC是G1。

    G1参数

    G1收集器是分代的和region化的,也就是整个堆内存被分为一系列大小相等的region。在启动时,JVM设置region的大小,根据堆大小的不同,region的大小可以在1MB到32MB之间变动,region的数量最多不超过2048个。Eden区、Survivor区、老年代是这些region的逻辑集合,它们并不是连续的。

    G1中的垃圾收集过程:年轻代收集和混合收集交替进行,背后有全局的并发标记周期在进行。当老年代分区占用的空间达到或超过初始阈值,就会触发并发标记周期。

    下图是G1的调优参数:

    216e9c949f65821a0f73aa3bade07485.png

    总结

    上面总共8副图,我把他们做成了一个PDF,预览界面大概是这样子的:

    a688ae1d99ef1d3a5a913e9cfc8d4fc5.png

    大家可以通过下面的链接直接下载PDF版本:

    如果遇到问题可以直接拿过来参考。这种东西英文名字应该叫JDK8 GC cheatsheet,翻译成中文应该就是JDK8 GC调优秘籍!

    本文作者:flydean程序那些事

    本文来源:flydean的博客

    欢迎关注我的公众号:程序那些事,更多精彩等着您!

    展开全文
  • 简介JVM参数有很多很多,根据我的统计JDK8JVM参数总共有1853个,正式的参数也有680个。这么多参数带给我们的是对JVM的细粒度的控制,但是并不是所有的参数都需要我们自己去调节的,我们需要关注的是一些最常用...

    简介

    JVM的参数有很多很多,根据我的统计JDK8中JVM的参数总共有1853个,正式的参数也有680个。

    这么多参数带给我们的是对JVM的细粒度的控制,但是并不是所有的参数都需要我们自己去调节的,我们需要关注的是一些最常用的,对性能影响比较大的GC参数即可。

    为了更好的让大家理解JDK8中 GC的调优的秘籍,这里特意准备了八张图。在本文的最后,还附带了一个总结的PDF all in one文档,大家把PDF下载回去,遇到问题就看两眼,不美吗?

    分代垃圾回收器的内存结构

    为了更好的提升GC的效率,现代的JVM都是采用的分代垃圾回收的策略(ZGC不是)。

    79d151a276941d668ed9cbe84c415d8f.png

    java运行时内存可以分为JVM内存和非JVM内存。

    JVM内存又可以分为堆内存和非堆内存。

    堆内存大家都很熟悉了,YoungGen中的Eden,Survivor和OldGen。

    非堆内存中存储的有thread Stack,Code Cache, NIO Direct Buffers,Metaspace等。

    注意这里的Metaspace元空间是方法区在JDK8的实现,它是在本地内存中分配的。

    JDK8中可用的GC

    JDK8中到底有哪些可以使用的GC呢?

    这里我们以HotSpot JVM为例,总共可以使用4大GC方式:

    cc1fc8fecc3cbc067fa854a86a31ad38.png

    其中对于ParallelGC和CMS GC又可以对年轻代和老年代分别设置GC方式。

    大家看到上图可能有一个疑问,Parallel scavenge和Parallel有什么区别呢?

    其实这两个GC的算法是类似的,Parallel Scavenge收集器也经常称为“吞吐量优先”收集器,Parallel Scavenge收集器提供了两个参数用于精确控制吞吐量; -XX:MaxGCPauseMillis:控制最大垃圾收集停顿时间; -XX:GCTimeRatio:设置吞吐量大小。

    同时Parallel Scavenge收集器能够配合自适应调节策略,把内存管理的调优任务交给虚拟机去完成。

    JDK8中默认开启的是ParallelGC。

    打印GC信息

    如果想研究和理解GC的内部信息,GC信息打印是少不了的:

    34b881df1f8adb2e14cd0f879968ab4a.png

    上图提供了一些非常有用的GC日志的控制参数。

    内存调整参数

    JVM分为Heap区和非Heap区,各个区又有更细的划分,下面就是调整各个区域大小的参数:

    0f8845bd4edb9b76c98fedfd39eae162.png

    Thread配置

    TLAB大家还记得吗?TLAB的全称是Thread-Local Allocation Buffers。TLAB是在Eden区间分配的一个一个的连续空间。然后将这些连续的空间分配个各个线程使用。

    因为每一个线程都有自己的独立空间,所以这里不涉及到同步的概念。

    2df2df5a66dd9f36c8e1e0905943b7d1.png

    上图就是TLAB的参数。

    通用GC参数

    虽然JDK8的GC这么多,但是他们有一些通用的GC参数:

    cc2507d9fb82a4c30def425c427ba574.png

    这里讲解一下Young space tenuring,怎么翻译我不是很清楚,这个主要就是指Young space中的对象经过多少次GC之后会被提升到Old space中。

    CMS GC

    CMS全称是Concurrent mark sweep。是一个非常非常复杂的GC。

    复杂到什么程度呢?光光是CMS调优的参数都有一百多个!

    下图是常用的CMS的参数。

    6cdaf64c1a1808fc235cff5387ff2b99.png

    CMS这里就不多讲了,因为在JDK9之后,CMS就已经被废弃了。

    主要原因是CMS太过复杂,如果要向下兼容需要巨大的工作量,然后就直接被废弃了。

    在JDK9之后,默认的GC是G1。

    G1参数

    G1收集器是分代的和region化的,也就是整个堆内存被分为一系列大小相等的region。在启动时,JVM设置region的大小,根据堆大小的不同,region的大小可以在1MB到32MB之间变动,region的数量最多不超过2048个。Eden区、Survivor区、老年代是这些region的逻辑集合,它们并不是连续的。

    G1中的垃圾收集过程:年轻代收集和混合收集交替进行,背后有全局的并发标记周期在进行。当老年代分区占用的空间达到或超过初始阈值,就会触发并发标记周期。

    下图是G1的调优参数:

    216e9c949f65821a0f73aa3bade07485.png

    总结

    上面总共8副图,我把他们做成了一个PDF,预览界面大概是这样子的:

    a688ae1d99ef1d3a5a913e9cfc8d4fc5.png

    大家可以通过下面的链接直接下载PDF版本:

    如果遇到问题可以直接拿过来参考。这种东西英文名字应该叫JDK8 GC cheatsheet,翻译成中文应该就是JDK8 GC调优秘籍!

    本文作者:flydean程序那些事

    本文来源:flydean的博客

    欢迎关注我的公众号:程序那些事,更多精彩等着您!

    展开全文
  • 1. JVM内存划分 这两天看到下面这篇文章的图不错。 一图读懂JVM架构解析 1.1 JDK7及以前的版本 其中最上一层是Nursery内存,一个对象被创建以后首先被放到Nursery中的Eden内 存中,如果存活期超两个...
  • JDK7 整体内存结构 和 堆内存结构JDK8 内存结构变动JDK7 堆内存和非堆内存参数实际优化 JDK7 整体内存结构 以下结构针对 JDK7,整体结构图如下: 如图,JVM内存区域分为 PC寄存器,JVM方法栈,本地...
  • 目录1 JVM内存调优1.1 Tomcat占用的内存1.2 内存配置相关参数1.3 内存调优实践1.4 验证配置效果2 GC策略调优实践...对于JVM的优化主要有两个方面: JVM内存调优 和 垃圾收集策略调优, 本片博文是在Oracle JDK 8之上...
  • JVM内存结构简介(jdk1.8)JVM层的GC调优是生产环境上必不可少的一个环节,因为我们需要确定这个进程可以占用多少内存,以及设定一些参数的阀值。以此来优化项目的性能和提高可用性,而且这也是在面试中经常会被问到的...
  • 目录线上现象排查步骤相关实验...设置jvm参数 -server -Xms128m -Xmx128m 通过jconsole可以看到compressedClassSpace开辟了1G的内存空间,实际未使用那么多 优化方案一 设置元空间大小 -server -Xms128m -Xmx1
  • 后续再继续优化基本环境:vmware虚拟机1.操作系统:CentOS Linux release 7.4....软件包:4.1apache-tomcat-8.0.49.tar.gz4.2jdk-8u161-linux-x64.tar.gz第一章:安装jdk环境1.1 下载:http://www.oracle.com/technetwor...
  • 最近开始在公司一台服务器上部署正式应用,使用Tomcat+Win2003+jdk1.4 服务器内存有8G,领导让这服务器只跑一个应用,虽然这个应用估计用的人不多,但...这可以加启动参数来告诉jvm分配多少内存 -Xmx(最大内存...
  • JDK8新特性以及操作

    2018-10-31 11:16:07
    1、hash hashMap,hashSet内部结构变化。 之前是链表的结构,变成了链表加红黑树的结构 map的结构全部进行了优化 2、内存结构 栈,堆,方法区,永久区 永久区就是堆的一部分,方法区是永久区...jvm进行调优时参数变...
  • tomcat和jvm

    2019-08-28 20:54:12
    二、jvm参数优化 1.内存划分 ​ 1)堆 2)元数据区 3)程序计数器 4)java虚拟机栈 5)本地方法栈 2.参数调优 3. GC算法 4.jvm优化工具 注:基于tomcat9 jdk8 一、配置文件优化 参考官方配置参数信息 ...
  • 实践目标 1 使用JAVA代码实现模拟内存溢出 2 分析JDK内存溢出的原因 3 总结存在bug的JAVA编码实践 4 总结JVM优化的方法 模拟内存溢出: 为了方便模拟内存特意把 JVM内存参数指定为更小我的本本内存是 8G的修 改...
  • Java虚拟机

    2018-09-24 23:08:57
    jdk8内存参数解析与修改(新的参数) JAVA7、JAVA8的堆内存有啥变化 Java8内存模型—永久代(PermGen)和元空间(Metaspace) jdk8 HotSpot内存模型 JVM 工作原理和流程 JVM详解-从入门到深入了解  ...
  • 112 5.2.5 服务器JVM进程崩溃 / 113 5.3 实战:Eclipse运行速度调优 / 114 5.3.1 调优前的程序运行状态 / 114 5.3.2 升级JDK 1.6的性能变化及兼容问题 / 117 5.3.3 编译时间和类加载时间的优化 / 122 5.3.4 ...
  • 【待完成】最重要的 JVM 参数指南(翻译完善了一半) 【加餐】大白话带你认识 JVM 新特性 Java 8 :Java 8 新特性总结、Java8常用新特性总结 、Java 8 学习资源推荐、Java8 forEach 指南 Java9~Java14 : 一文...
  • JDK8 java 8 Streams简介 java中functional interface的分类和使用 Lambda表达式最佳实践 在java 8 stream表达式中实现if/else逻辑 怎么在java 8的map中使用stream java 8 Stream中操作类型和peek的使用...
  • 1. Jvm内存空间结构是什么样的? 1 程序计数器 1 Java栈 1 本地方法栈 2 堆 2 方法区 3 2. Jvm堆内存的划分结构和优化 3 2.1. 原理 6 2.1.1. 年轻代 6 2.1.2. 年老代 6 2.1.3. 持久代 7 2.2. 参数说明 8 2.3. 疑问...
  • 08.获取JVM内存转储的常用方法【已完成】 09.获取Java线程转储的常用方法【已完成】 10.高级数据结构: 跳表(Skip List)【已校对】 11.JVM最重要的性能调优参数【已完成】 12.1 MAVEN基础系列(一) 构建...
  • 4.4.9 JVM内存模型的相关知识了解多少,比如重排序,内存屏障,happen-before,主内存,工作内存等。 4.5.0 简单说说你了解的类加载器,可以打破双亲委派么,怎么打破。 4.5.1 讲讲JAVA的反射机制。 4.5.2 你们...
  • Language: Java 8jdk版本建议1.8.201以上) Python2.7(支持Python3需要修改替换datax/bin下面的三个python文件,替换文件在doc/datax-web/datax-python3下) Environment: MacOS, Windows,Linux Database: Mysql5.7...
  • java面试题

    2018-01-01 15:35:15
    49. JDK,JRE,JVM的区别? 22 50. Java中常见类,方法,接口 23 51. 多线程 23 51.1. 线程的基本概念 23 51.2. Java中的线程有四种状态 23 51.3. 多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 24 ...
  • JVM内存模型剖析 JVM垃圾回收详解 类加载机制 性能调优和问题排查 数据结构和算法 24张图,九大数据结构安排得明明白白! 诸葛亮vs司马懿,排序算法大战谁能笑到最后? 十大经典排序算法大梳理 (动图+代码) 数据...
  • Android 性能优化 ~ 内存优化 Android 性能优化 ~ 包体积优化实战 #NDK开发# C++ 程序设计 Android NDK ~ 基础入门指南 Android NDK ~ Java 和 Native 交互 #跨平台开发# Flutter: (一)Flutter学习之Dart...
  • 【待完成】最重要的 JVM 参数指南(翻译完善了一半) 【加餐】大白话带你认识 JVM 新特性 Java 8 :Java 8 新特性总结、Java8常用新特性总结 、Java 8 学习资源推荐、Java8 forEach 指南 Java9~Java14 : 一文...
  • 【待完成】最重要的 JVM 参数指南(翻译完善了一半) 【加餐】大白话带你认识 JVM 新特性 Java 8 :Java 8 新特性总结、Java8常用新特性总结 、Java 8 学习资源推荐、Java8 forEach 指南 Java9~Java14 : 一文...
  • 的高度优化的Java运行时环境,包括寻呼机、移动电话、可视电话、数字机顶盒和汽车导 航系统。” JE是致丿于消费产品和嵌入式设备的开发人员的最佳选择。尽管早期人们对它看好而 且Java开发人员团体中的热衷人土也不少...
  • java面试宝典

    2013-02-28 16:04:01
    JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类? 17 69、文件读写的基本类 17 70、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 17 71、启动一个线程是用run()还是start()? ...

空空如也

空空如也

1 2
收藏数 40
精华内容 16
关键字:

jdk8jvm内存参数优化