Uploaded image for project: 'JDK'
  1. JDK
  2. JDK-8333396

Use StringBuilder internally for java.text.Format.* formatting

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Fixed
    • Icon: P3 P3
    • 24
    • 17, 21
    • core-libs
    • b08
    • generic
    • generic

        Create behalf of lingjun.cg@alibaba-inc.com

        Description:
        Run the following JMH test case in Linux with 8C32G, it shows the poor performance
        of DecimalFormat.forma() when compare to jdk11.

        the result with jdk 11:
        Benchmark Mode Cnt Score Error Units
        JmhDecimalFormat.testFormatOnly avgt 50 364.214 ? 1.191 ns/op
        JmhDecimalFormat.testNewAndFormat avgt 50 658.699 ? 2.311 ns/op
        JmhDecimalFormat.testNewOnly avgt 50 248.300 ? 5.158 ns/op


        the result with current jdk:
        Benchmark Mode Cnt Score Error Units
        JmhDecimalFormat.testFormatOnly avgt 50 642.099 ? 1.253 ns/op
        JmhDecimalFormat.testNewAndFormat avgt 50 989.307 ? 3.676 ns/op
        JmhDecimalFormat.testNewOnly avgt 50 303.381 ? 5.252 ns/op



        With the perf and asyncprofiler's help,
         The poor performacne of DecimalFormat.format() due to the removed BiasedLocking.
           We can see many hottest atomic instructions.
           0.34% 0x00007fe26c3ce6eb: mov %r11d,0xec(%rsp)
                          0x00007fe26c3ce6f3: movzwl %r11w,%r11d ;*i2c {reexecute=0 rethrow=0 return_oop=0}
                                                                                    ; - java.text.DecimalFormat::subformat@847 (line 2079)
           0.13% 0x00007fe26c3ce6f7: mov %r11d,0x20(%rsp)
           0.02% 0x00007fe26c3ce6fc: mov 0x68(%rsp),%r11
           0.17% 0x00007fe26c3ce701: lea 0xc0(%rsp),%rbx
                          0x00007fe26c3ce709: mov (%r11),%rax
           0.40% 0x00007fe26c3ce70c: test $0x2,%al
                       ╭ 0x00007fe26c3ce70e: jne 0x00007fe26c3ce737
           0.21% │ 0x00007fe26c3ce714: or $0x1,%rax
                       │ 0x00007fe26c3ce718: mov %rax,(%rbx)
           0.32% │ 0x00007fe26c3ce71b: lock cmpxchg %rbx,(%r11)
           4.35% │ 0x00007fe26c3ce720: je 0x00007fe26c3ce75d ; {no_reloc}
                       │ 0x00007fe26c3ce726: sub %rsp,%rax
                       │ 0x00007fe26c3ce729: and $0xfffffffffffff007,%rax
                       │ 0x00007fe26c3ce72f: mov %rax,(%rbx)
                       │ 0x00007fe26c3ce732: jmpq 0x00007fe26c3ce75b
                       ↘ 0x00007fe26c3ce737: mov %rax,%r10
                          0x00007fe26c3ce73a: xor %rax,%rax
                          0x00007fe26c3ce73d: lock cmpxchg %r15,0x3e(%r10)
                          0x00007fe26c3ce743: movq $0x3,(%rbx)
                          0x00007fe26c3ce74a: je 0x00007fe26c3ce75d
                          0x00007fe26c3ce74c: cmp %rax,%r15

              syan Sendao Yan
              syan Sendao Yan
              Votes:
              1 Vote for this issue
              Watchers:
              6 Start watching this issue

                Created:
                Updated:
                Resolved: