Uploaded image for project: 'Commons Crypto'
  1. Commons Crypto
  2. CRYPTO-31

Make fields final wherever possible

    XMLWordPrintableJSON

Details

    • Improvement
    • Status: Resolved
    • Minor
    • Resolution: Fixed
    • 0.9.2
    • 1.0.0
    • Stream
    • None

    Description

      Final fields are automatically thread safe if the object itself is not modified.
      Whereas non-final fields are not necessarily thread-safe even if they are not mutated - this is because of the Java memory model.

      There are several non-final fields that are not mutated once created. They should be made final to improve thread-safety. This is particularly important for static fields since they are more likely to be used by multiple threads.

      Note: such changes will not affect the public API if the fields are private or package-protected.

      The fields include:

      JavaSecureRandom.instance
      OpensslSecureRandom.fallback
      OpensslSecureRandom.nativeEnabled
      ChannelInput.channel
      StreamInput.buf - since no point creating an instance if it is not going to be used for reading, might as well create the buffer up front
      StreamOutput.bufferSize
      StreamOutput.buf - as for StreamInput
      StreamOutput.out - should also be private

      static NativeCodeLoader.nativeCodeLoaded
      static OSInfo.archMapping
      static ReflectionUtils.classLoader

      Attachments

        Activity

          People

            Ferd Ferdinand Xu
            sebb Sebb
            Votes:
            0 Vote for this issue
            Watchers:
            1 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: