JVM-内存溢出(OOM)

一、StackOverFlowError

Java栈线程大小默认为512k~1024k之间。通常出现在递归调用或较多的嵌套调用时出现栈内存溢出的错误,不是异常。

public class StackOverFlowErrorDemo {

    public static void main(String[] args){
        tackOverflowError();
    }

    private static void tackOverflowError() {
        tackOverflowError();
    }
}
Exception in thread "main" java.lang.StackOverflowError
	at test.jvm.OOM.StackOverFlowErrorDemo.tackOverflowError(StackOverFlowErrorDemo.java:15)
	at test.jvm.OOM.StackOverFlowErrorDemo.tackOverflowError(StackOverFlowErrorDemo.java:15)
	at test.jvm.OOM.StackOverFlowErrorDemo.tackOverflowError(StackOverFlowErrorDemo.java:15)
	at test.jvm.OOM.StackOverFlowErrorDemo.tackOverflowError(StackOverFlowErrorDemo.java:15)
	at test.jvm.OOM.StackOverFlowErrorDemo.tackOverflowError(StackOverFlowErrorDemo.java:15)
	at test.jvm.OOM.StackOverFlowErrorDemo.tackOverflowError(StackOverFlowErrorDemo.java:15)

二、OutOfMemoryError: Java heap space

Java堆内存溢出,最常见的内存溢出错误,new的对象较多,撑爆了堆,导致内存溢出错误。

public class JavaHeapSpaceDemo {
    public static void main(String[] args){
        byte b[] = new byte[5555 * 1024 *1024];
    }
}
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
	at test.jvm.OOM.JavaHeapSpaceDemo.main(JavaHeapSpaceDemo.java:5)

三、OutOfMemoryError:GC overhead limit exceeded

GC回收时间过长时会抛出OOM,如超过98%的时间来回收GC,回收不到2%的堆内存,连续多次GC都只回收了不到2%的的极端情况下才会抛出。

public class GcOverheadLimitExceededDemo {

    // -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:MaxDirectMemorySize=5m
    public static void main(String[] args){
        int i = 0;
        List list = new ArrayList();
        try{
            while (true)
            {
                list.add(String.valueOf(++i).intern());
            }
        } catch (Exception e){
            e.printStackTrace();
        }finally {
            System.out.println("****** i="+i);
        }
    }
}
[GC (Allocation Failure) [PSYoungGen: 2048K->488K(2560K)] 2048K->788K(9728K), 0.0031879 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (Allocation Failure) [PSYoungGen: 2519K->483K(2560K)] 2819K->2527K(9728K), 0.0061817 secs] [Times: user=0.00 sys=0.00, real=0.01 secs] 
[GC (Allocation Failure) [PSYoungGen: 2531K->504K(2560K)] 4575K->4290K(9728K), 0.0080726 secs] [Times: user=0.03 sys=0.02, real=0.01 secs] 
[GC (Allocation Failure) [PSYoungGen: 2552K->504K(2560K)] 6338K->6346K(9728K), 0.0042745 secs] [Times: user=0.11 sys=0.01, real=0.00 secs] 
[Full GC (Ergonomics) [PSYoungGen: 504K->0K(2560K)] [ParOldGen: 5842K->5953K(7168K)] 6346K->5953K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.1137573 secs] [Times: user=0.28 sys=0.02, real=0.11 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2048K->508K(2560K)] [ParOldGen: 5953K->7053K(7168K)] 8001K->7561K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0853508 secs] [Times: user=0.13 sys=0.01, real=0.09 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2048K->2026K(2560K)] [ParOldGen: 7053K->7052K(7168K)] 9101K->9079K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0731060 secs] [Times: user=0.23 sys=0.00, real=0.07 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2048K->2047K(2560K)] [ParOldGen: 7052K->7052K(7168K)] 9100K->9100K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0747147 secs] [Times: user=0.08 sys=0.00, real=0.08 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7052K->7052K(7168K)] 9100K->9100K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0445741 secs] [Times: user=0.13 sys=0.00, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7054K->7054K(7168K)] 9102K->9102K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0406038 secs] [Times: user=0.09 sys=0.00, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7055K->7055K(7168K)] 9103K->9103K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0501690 secs] [Times: user=0.19 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7057K->7057K(7168K)] 9105K->9105K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0553672 secs] [Times: user=0.08 sys=0.00, real=0.06 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7059K->7059K(7168K)] 9107K->9107K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0610355 secs] [Times: user=0.09 sys=0.00, real=0.06 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7061K->7061K(7168K)] 9109K->9109K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0509795 secs] [Times: user=0.13 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7062K->7062K(7168K)] 9110K->9110K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0415111 secs] [Times: user=0.14 sys=0.00, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7064K->7064K(7168K)] 9112K->9112K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0430055 secs] [Times: user=0.23 sys=0.00, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7068K->7052K(7168K)] 9116K->9100K(9728K), [Metaspace: 3270K->3270K(1056768K)], 0.0620695 secs] [Times: user=0.16 sys=0.02, real=0.06 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7054K->7051K(7168K)] 9102K->9099K(9728K), [Metaspace: 3274K->3274K(1056768K)], 0.0443731 secs] [Times: user=0.16 sys=0.00, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7053K->7053K(7168K)] 9101K->9101K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0420758 secs] [Times: user=0.11 sys=0.02, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7055K->7055K(7168K)] 9103K->9103K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0424306 secs] [Times: user=0.11 sys=0.00, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7057K->7056K(7168K)] 9105K->9104K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0497872 secs] [Times: user=0.25 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7057K->7057K(7168K)] 9105K->9105K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0400690 secs] [Times: user=0.17 sys=0.02, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7059K->7059K(7168K)] 9107K->9107K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0435018 secs] [Times: user=0.20 sys=0.00, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7061K->7061K(7168K)] 9109K->9109K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0557236 secs] [Times: user=0.14 sys=0.02, real=0.06 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7063K->7063K(7168K)] 9111K->9111K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0396985 secs] [Times: user=0.25 sys=0.00, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7064K->7064K(7168K)] 9112K->9112K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0432890 secs] [Times: user=0.16 sys=0.00, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7066K->7066K(7168K)] 9114K->9114K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0424565 secs] [Times: user=0.08 sys=0.00, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7068K->7068K(7168K)] 9116K->9116K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0636805 secs] [Times: user=0.11 sys=0.02, real=0.06 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7070K->7070K(7168K)] 9118K->9118K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0572297 secs] [Times: user=0.08 sys=0.00, real=0.06 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7076K->7076K(7168K)] 9124K->9124K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0484387 secs] [Times: user=0.14 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7077K->7077K(7168K)] 9125K->9125K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0487714 secs] [Times: user=0.09 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7079K->7079K(7168K)] 9127K->9127K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0447861 secs] [Times: user=0.06 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7081K->7081K(7168K)] 9129K->9129K(9728K), [Metaspace: 3275K->3275K(1056768K)], 0.0502413 secs] [Times: user=0.13 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7084K->7083K(7168K)] 9132K->9131K(9728K), [Metaspace: 3277K->3277K(1056768K)], 0.0478832 secs] [Times: user=0.13 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7084K->7084K(7168K)] 9132K->9132K(9728K), [Metaspace: 3278K->3278K(1056768K)], 0.0487281 secs] [Times: user=0.08 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7086K->7086K(7168K)] 9134K->9134K(9728K), [Metaspace: 3278K->3278K(1056768K)], 0.0527008 secs] [Times: user=0.08 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7088K->7088K(7168K)] 9136K->9136K(9728K), [Metaspace: 3278K->3278K(1056768K)], 0.0496080 secs] [Times: user=0.14 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7090K->7090K(7168K)] 9138K->9138K(9728K), [Metaspace: 3278K->3278K(1056768K)], 0.0472766 secs] [Times: user=0.16 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7091K->7091K(7168K)] 9139K->9139K(9728K), [Metaspace: 3278K->3278K(1056768K)], 0.0548371 secs] [Times: user=0.09 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7093K->7093K(7168K)] 9141K->9141K(9728K), [Metaspace: 3278K->3278K(1056768K)], 0.0454322 secs] [Times: user=0.19 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7095K->7095K(7168K)] 9143K->9143K(9728K), [Metaspace: 3278K->3278K(1056768K)], 0.0507280 secs] [Times: user=0.16 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7097K->7097K(7168K)] 9145K->9145K(9728K), [Metaspace: 3278K->3278K(1056768K)], 0.0478638 secs] [Times: user=0.13 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7102K->7098K(7168K)] 9150K->9146K(9728K), [Metaspace: 3283K->3283K(1056768K)], 0.0435346 secs] [Times: user=0.17 sys=0.00, real=0.04 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7100K->7100K(7168K)] 9148K->9148K(9728K), [Metaspace: 3284K->3284K(1056768K)], 0.0506347 secs] [Times: user=0.19 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7102K->7102K(7168K)] 9150K->9150K(9728K), [Metaspace: 3284K->3284K(1056768K)], 0.0538772 secs] [Times: user=0.24 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7106K->7104K(7168K)] 9154K->9152K(9728K), [Metaspace: 3287K->3287K(1056768K)], 0.0482147 secs] [Times: user=0.25 sys=0.00, real=0.05 secs] 
[Full GC (Ergonomics) [PSYoungGen: 2047K->2047K(2560K)] [ParOldGen: 7105K->7105K(7168K)] 9153K->9153K(9728K), [Metaspace: 3288K->3288K(1056768K)], 0.0489171 secs] [Times: user=0.11 sys=0.00, real=0.05 secs] 
****** i=145353
Exception in thread "main" [Full GC (Ergonomics) [PSYoungGen: 2047K->0K(2560K)] [ParOldGen: 7147K->686K(7168K)] 9194K->686K(9728K), [Metaspace: 3312K->3312K(1056768K)], 0.0126681 secs] [Times: user=0.02 sys=0.00, real=0.01 secs] 
java.lang.OutOfMemoryError: GC overhead limit exceeded
	at java.lang.Integer.toString(Integer.java:403)
	at java.lang.String.valueOf(String.java:3099)
	at test.jvm.OOM.GcOverheadLimitExceededDemo.main(GcOverheadLimitExceededDemo.java:14)
Heap
 PSYoungGen      total 2560K, used 128K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000)
  eden space 2048K, 6% used [0x00000000ffd00000,0x00000000ffd200d0,0x00000000fff00000)
  from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
  to   space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
 ParOldGen       total 7168K, used 686K [0x00000000ff600000, 0x00000000ffd00000, 0x00000000ffd00000)
  object space 7168K, 9% used [0x00000000ff600000,0x00000000ff6abbc8,0x00000000ffd00000)
 Metaspace       used 3413K, capacity 4500K, committed 4864K, reserved 1056768K
  class space    used 369K, capacity 388K, committed 512K, reserved 1048576K

四、OutOfMemoryError:Direct buffer memory

使用Native函数库直接分配堆外内存,然后通过一个存储在Java堆里面的DirectByteBuffer对象作为这块内存的引用进行操作。但如果不断分配本地内存,堆内存很少使用,那么JVM就不需要执行GC,DirectByteBuffer对象就不会回收,这时候堆内存比较充足,但本地内存可能已经使用光了,再次尝试分配本地内存就会出现OutMemoryError,那么程序就直接蹦了。

public class DirectmMemoryBufferError {
    // -Xms10m -Xmx10m -XX:+PrintGCDetails -XX:MaxDirectMemorySize=5m
    public static void main(String[] args){
        System.out.println("配置maxDirectMemory:"+(sun.misc.VM.maxDirectMemory()/(double)1024/1024) + "MB");
        try { TimeUnit.SECONDS.sleep(3); } catch (InterruptedException e) { e.printStackTrace(); }
        ByteBuffer bb = ByteBuffer.allocateDirect(6 * 1024 * 1024);
    }
}
配置maxDirectMemory:5.0MB
[GC (Allocation Failure) [PSYoungGen: 2048K->488K(2560K)] 2048K->736K(9728K), 0.0017160 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[GC (System.gc()) [PSYoungGen: 1529K->496K(2560K)] 1777K->1192K(9728K), 0.0017757 secs] [Times: user=0.00 sys=0.00, real=0.00 secs] 
[Full GC (System.gc()) [PSYoungGen: 496K->0K(2560K)] [ParOldGen: 696K->1040K(7168K)] 1192K->1040K(9728K), [Metaspace: 3809K->3809K(1056768K)], 0.0135495 secs] [Times: user=0.01 sys=0.00, real=0.01 secs] 
Exception in thread "main" java.lang.OutOfMemoryError: Direct buffer memory
	at java.nio.Bits.reserveMemory(Bits.java:658)
	at java.nio.DirectByteBuffer.<init>(DirectByteBuffer.java:123)
	at java.nio.ByteBuffer.allocateDirect(ByteBuffer.java:311)
	at test.jvm.OOM.DirectmMemoryBufferError.main(DirectmMemoryBufferError.java:10)
Heap
 PSYoungGen      total 2560K, used 58K [0x00000000ffd00000, 0x0000000100000000, 0x0000000100000000)
  eden space 2048K, 2% used [0x00000000ffd00000,0x00000000ffd0eb88,0x00000000fff00000)
  from space 512K, 0% used [0x00000000fff80000,0x00000000fff80000,0x0000000100000000)
  to   space 512K, 0% used [0x00000000fff00000,0x00000000fff00000,0x00000000fff80000)
 ParOldGen       total 7168K, used 1040K [0x00000000ff600000, 0x00000000ffd00000, 0x00000000ffd00000)
  object space 7168K, 14% used [0x00000000ff600000,0x00000000ff704270,0x00000000ffd00000)
 Metaspace       used 3842K, capacity 4568K, committed 4864K, reserved 1056768K
  class space    used 428K, capacity 460K, committed 512K, reserved 1048576K

五、OutOfmemoryError:unable to create new native thread

高并发请求服务器的时候,经常出现如下错误:java.lang.OutOfMemoryError:unable to create new native thread,准确的说该native thread异常与对应的平台有关。

产生原因:

  • 你的应用创建了太多线程,一个应用进程创建了多个线程,超过系统承载极限
  • 你的服务器并不允许你的应用创建那么多的线程,linux系统默认允许单个进程可以创建的线程数量是1024个,应用创建超过这个数量,就会报此错误。

解决办法:

  • 降低应用创建线程的数量,分析应用是否真的需要创建这么多线程,如果不是,改代码将线程数降到最低。
  • 对于有的应用,确实需要创建很多线程,远超过linux系统的默认1024个(ulimit -u可以查)线程限制,可以通过修改linux服务配置,扩大默认限制。
vim /etc/security/limits.d/90-nproc.conf

 实例演示:

public class UnCreateNewThread {
    public static void main(String[] args){
        for (int i = 0; ; i++) {
            System.out.println("i = "+i);
            new Thread(() -> {
                    try { TimeUnit.SECONDS.sleep(Integer.MAX_VALUE); } catch (InterruptedException e) { e.printStackTrace(); }
                    },"T"+i).start();
        }
    }
}

说明:为什么940就抛异常呢?因为系统在计算时会存在一定的偏差,不同用户最大线程数量有差异。产生如此的异常后,无法直接退出线程,需用kill命令杀掉进程后,方可以退出。

 六、OutOfMemoryError:Metaspace

Jdk1.8开始,使用Metaspace代替永久代。Metaspace是方法区在HotSpot中的实现,它与永久代最大的区别在于,Metaspace并不在虚拟机内存中而是使用本地内存。Metaspace主要存放类信息、常量池、静态变量等,元空间默认大小为Integer.MAX_VALUE大约21M。

import net.sf.cglib.proxy.Enhancer;
import net.sf.cglib.proxy.MethodInterceptor;
import net.sf.cglib.proxy.MethodProxy;

import java.lang.reflect.Method;
//-XX:MetaspaceSize=8m -XX:MaxMetaspaceSize=8m
public class MetaSpaceErrorDemo {
    static class OOMTest{}
    public static void main(String[] args){
        int i = 0;
        try{
            while (true){
                i++;
                Enhancer enhancer = new Enhancer();
                enhancer.setSuperclass(OOMTest.class);
                enhancer.setUseCache(false);
                enhancer.setCallback(new MethodInterceptor() {
                    @Override
                    public Object intercept(Object o, Method method, Object[] objects, MethodProxy methodProxy) throws Throwable {
                        return methodProxy.invokeSuper(o, args);
                    }
                });
                enhancer.create();
            }
        } catch (Throwable e){
            System.out.println("**********多少次发出异常:"+i);
            e.printStackTrace();
        }finally {

        }
    }
}
**********多少次发出异常:223
java.lang.OutOfMemoryError: Metaspace
	at java.lang.Class.forName0(Native Method)
	at java.lang.Class.forName(Class.java:348)
	at net.sf.cglib.core.ReflectUtils.defineClass(ReflectUtils.java:386)
	at net.sf.cglib.core.AbstractClassGenerator.create(AbstractClassGenerator.java:219)
	at net.sf.cglib.proxy.Enhancer.createHelper(Enhancer.java:377)
	at net.sf.cglib.proxy.Enhancer.create(Enhancer.java:285)
	at test.jvm.OOM.MetaSpaceErrorDemo.main(MetaSpaceErrorDemo.java:25)

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值