JDK 7コード統計

Javaソースの統計を取得し、メソッド、クラスのメソッド、コンストラクターなどに平均でいくつのパラメーターがあるかを知りたいと思っていました。このデータに基づいて、ソフトウェアでこれらのエンティティーのコンテナーの最適なデフォルトサイズを計算できるため、質問は完全にアイドル状態ではありませんメモリを節約するコードモデル(AST)。 特に、 Spoonプロジェクトについて話している。 ちなみに、このライブラリを使用して、分析を行いました。

JDKソース統計をテストして、Javaコードに関するいくつかの仮定を立てるよりも論理的なものになる可能性があります。 途中で、最も珍しいインスタンスを収集しました。たとえば、パラメーターの数が最も多いメソッドです。

それらを見るには、署名をグーグルで検索してください。最初のリンクはJavadocまたはGrepCodeである必要があります。 または、目の前でIntelliJ IDEAを開いている場合は、Shiftキーを4回押した後、クラス名またはメソッド名を挿入するだけです。

SpoonのベースとなっているEclipseコンパイラのバグではASTをビルドできないため、私はjava。*、Javax。*およびorg。*パッケージ、およびJDK 7に限定しました。

統計の観点から-考慮中のすべてのエンティティの量がポアソンの法則に従って分布しているという良い仮定だと思うので、唯一の数-平均値-は分布全体をうまく説明しています。

ただし、必要に応じて、 gist.github.com / leventov / 1f8d8d470b9632bc3cc3で詳細な分析を行うか、プロジェクトをテストできます。

メソッドのパラメーター


平均:1,063

数量方法
12java.lang.String layoutCompoundLabel(javax.swing.JComponent、java.awt.FontMetrics、java.lang.String、javax.swing.Icon、int、int、int、int、java.awt.Rectangle、java.awt.Rectangle 、java.awt.Rectangle、int)
12void drawChunk(java.awt.Image、java.awt.Graphics、boolean、int、int、int、int、int、int、int、int、boolean)
12java.lang.String layoutText(javax.swing.plaf.synth.SynthContext、java.awt.FontMetrics、java.lang.String、javax.swing.Icon、int、int、int、int、java.awt.Rectangle、java .awt.Rectangle、java.awt.Rectangle、int)
14void paintRow(javax.swing.tree.TreeCellRenderer、javax.swing.tree.DefaultTreeCellRenderer、javax.swing.plaf.synth.SynthContext、javax.swing.plaf.synth.SynthContext、java.awtavaGramics 、java.awt.Insets、java.awt.Rectangle、java.awt.Rectangle、javax.swing.tree.TreePath、int、boolean、boolean、boolean)
15void initMouseEvent(java.lang.String、boolean、boolean、org.w3c.dom.views.AbstractView、int、int、int、int、int、boolean、boolean、boolean、boolean、short、org.w3c.dom.events .EventTarget)
16void setRaster(int、int、int、int、int、int、int、int、int、int、int、int、int、int、int、int、int、int、int、int)


典型的なメソッドパラメータ


平均:0.010

数量方法
2<K、V> java.util.Map checkedMap(java.util.Map、java.lang.Class、java.lang.Class)
2<K、V> K keyOrNull(java.util.TreeMap $ Entry)
2<K、V> java.util.concurrent.ConcurrentHashMap $ HashEntry entryAt(java.util.concurrent.ConcurrentHashMap $ HashEntry []、int)
2<U、W> java.util.concurrent.atomic.AtomicReferenceFieldUpdater newUpdater(java.lang.Class、java.lang.Class、java.lang.String)
2<K、V> java.util.Map newHashMap()
2<M、I> javax.swing.RowFilter andFilter(java.lang.Iterable)
2<R、P> Rは受け入れます(javax.lang.model.element.AnnotationValueVisitor、P)
2<R、P> Rは受け入れます(javax.lang.model.element.ElementVisitor、P)
2<R、P> Rは受け入れます(javax.lang.model.type.TypeVisitor、P)
3<K、V、T> java.util.Collections $ CheckedMap $ CheckedEntrySet $ CheckedEntry checkedEntry(java.util.Map $ Entry、java.lang.Class)


コンストラクターオプション


平均:1,207

数量コンストラクター
12java.awt.LinearGradientPaintContext(java.awt.LinearGradientPaint、java.awt.image.ColorModel、java.awt.Rectangle、java.awt.geom.Rectangle2D、java.awt.geom.AffineTransform、java.awt.RenderH。 awt.geom.Point2D、java.awt.geom.Point2D、float []、java.awt.Color []、java.awt.MultipleGradientPaint $ CycleMethod、java.awt.MultipleGradientPaint $ ColorSpaceType)
12java.lang.management.ThreadInfo(java.lang.Thread、int、java.lang.Object、java.lang.Thread、long、long、long、long、java.lang.StackTraceElement []、java.lang.Object [ ]、int []、java.lang.Object [])
12javax.swing.event.MenuDragMouseEvent(java.awt.Component、int、long、int、int、int、int、int、int、boolean、javax.swing.MenuElement []、javax.swing.MenuSelectionManager)
13java.awt.event.MouseWheelEvent(java.awt.Component、int、long、int、int、int、int、int、int、boolean、int、int、int)
13java.util.SimpleTimeZone(int、java.lang.String、int、int、int、int、int、int、int、int、int、int、int、int)
14java.awt.event.MouseWheelEvent(java.awt.Component、int、long、int、int、int、int、int、int、boolean、int、int、int、double)
15java.awt.RadialGradientPaintContext(java.awt.RadialGradientPaint、java.awt.image.ColorModel、java.awt.Rectangle、java.awt.geom.Rectangle2D、java.awt.geom.AffineTransform、java.awt.attrent float、float、float、float、float []、java.awt.Color []、java.awt.MultipleGradientPaint $ CycleMethod、java.awt.MultipleGradientPaint $ ColorSpaceType)
16javax.imageio.spi.ImageReaderWriterSpi(java.lang.String、java.lang.String、java.lang.String []、java.lang.String []、java.lang.String []、java.lang.String、 boolean、java.lang.String、java.lang.String、java.lang.String []、java.lang.String []、boolean、java.lang.String、java.lang.String、java.lang.String [ ]、java.lang.String [])
18javax.imageio.spi.ImageReaderSpi(java.lang.String、java.lang.String、java.lang.String []、java.lang.String []、java.lang.String []、java.lang.String、 java.lang.Class []、java.lang.String []、boolean、java.lang.String、java.lang.String、java.lang.String []、java.lang.String []、boolean、java。 lang.String、java.lang.String、java.lang.String []、java.lang.String [])
18javax.imageio.spi.ImageWriterSpi(java.lang.String、java.lang.String、java.lang.String []、java.lang.String []、java.lang.String []、java.lang.String、 java.lang.Class []、java.lang.String []、boolean、java.lang.String、java.lang.String、java.lang.String []、java.lang.String []、boolean、java。 lang.String、java.lang.String、java.lang.String []、java.lang.String [])

典型的な設計パラメータ


平均:0.001

多くの人は、これが起こることさえ知りません。 JDKには、パラメーター化されたコンストラクターを持つ4つのクラスが見つかりました。 私は実際にこのチップを試してみる機会がありましたが、一度もそうではないようです。
数量コンストラクター
1javax.management.StandardEmitterMBean(T、java.lang.Class、boolean、javax.management.NotificationEmitter)
1javax.management.StandardMBean(T、java.lang.Class)
1javax.management.openmbean.OpenMBeanAttributeInfoSupport(java.lang.String、java.lang.String、javax.management.openmbean.OpenType、boolean、boolean、boolean、T)
1javax.management.openmbean.OpenMBeanParameterInfoSupport(java.lang.String、java.lang.String、javax.management.openmbean.OpenType、T)


典型的なクラスパラメーター


平均:0.117

突然、3つを超える典型的なパラメーターを持つクラスは見つかりませんでした。 私の個人的なベストは8です。
数量クラス
2クラスjavax.swing.DefaultRowSorter
2クラスjavax.swing.DefaultRowSorter $ ModelWrapper
2クラスjavax.swing.RowFilter
2クラスjavax.swing.RowFilter $ AndFilter
2クラスjavax.swing.RowFilter $エントリ
2クラスjavax.swing.RowFilter $ NotFilter
2クラスjavax.swing.RowFilter $ OrFilter
2クラスjavax.swing.SwingWorker
2クラスjavax.xml.bind.annotation.adapters.XmlAdapter
3クラスjava.util.Collections $ CheckedMap $ CheckedEntrySet $ CheckedEntry

実装されたインターフェース


平均:0.555

数量クラス
6クラスjavax.swing.plaf.basic.BasicComboBoxUI $ハンドラー
6クラスjavax.swing.plaf.basic.BasicTabbedPaneUI $ハンドラー
6クラスjavax.swing.plaf.basic.BasicTableUI $ハンドラー
6クラスjavax.swing.text.JTextComponent $ AccessibleJTextComponent
7クラスjavax.swing.JTable
7クラスjavax.swing.JTable $ AccessibleJTable
7クラスjavax.swing.plaf.basic.BasicInternalFrameUI $ハンドラー
7クラスjavax.swing.plaf.basic.BasicListUI $ハンドラー
10クラスjavax.swing.plaf.basic.BasicTreeUI $ハンドラー
17クラスjava.awt.AWTEventMulticaster

匿名の初期化ブロック


平均:0.057

ここで、逆に、JDKの作成者は私よりも初期化ブロックが大好きです。 クラスごとに複数のブロックを記述したことはありません。
数量クラス
2クラスjavax.management.remote.rmi.RMIConnector
2クラスjavax.swing.text.html.HTML
3クラスjava.lang.invoke.CallSite
3クラスjava.lang.invoke.MethodHandle
3クラスjava.lang.invoke.MethodHandleNatives
3クラスjava.math.BigInteger
3クラスjava.net.InetAddress
3クラスjava.util.zip.ZipFile
3クラスjavax.swing.text.rtf.RTFReader
6クラスjava.lang.invoke.LambdaForm

フィールド


平均:3,861

数量クラス
84クラスjava.awt.Event
84クラスjava.util.Calendar
93クラスjavax.swing.plaf.nimbus.InternalFrameTitlePaneMaximizeButtonPainter
98クラスjava.awt.Component
99列挙java.lang.Character $ UnicodeScript
130クラスjava.awt.color.ICC_Profile
140クラスjavax.swing.plaf.nimbus.FileChooserPainter
209クラスjava.awt.event.KeyEvent
213クラスjava.lang.Character $ UnicodeBlock
223クラスjava.awt.PageAttributes $ MediaType

コンストラクター


平均:1,467

数量クラス
10クラスjava.lang.invoke.MemberName
10クラスjava.net.Socket
10クラスjava.sql.BatchUpdateException
12クラスjava.math.BigInteger
13クラスjava.util.Scanner
14クラスjava.awt.Dialog
16クラスjava.util.Formatter
16クラスjavax.swing.JDialog
17クラスjava.lang.String
17クラスjava.math.BigDecimal

方法


平均:8,003

数量クラス
137クラスjavax.swing.plaf.synth.ParsedSynthStyle $ DelegatingPainter
143クラスjavax.swing.plaf.nimbus.SynthPainterImpl
143クラスjavax.swing.plaf.synth.ImagePainter
145クラスjava.awt.Window
147クラスjavax.swing.JTree
148クラスjavax.swing.plaf.nimbus.FileChooserPainter
152クラスjava.awt.Container
187クラスjavax.swing.JComponent
196クラスjavax.swing.JTable
331クラスjava.awt.Component

ネストされたクラス


平均:0.327

数量クラス
20クラスjavax.swing.plaf.metal.MetalBorders
20クラスjavax.swing.text.html.CSS
21クラスjavax.swing.plaf.basic.BasicTreeUI
21クラスjavax.swing.text.html.HTMLDocument $ HTMLReader
27クラスjava.beans.MetaData $ java_util_Collections
30クラスjavax.swing.plaf.metal.MetalIconFactory
33クラスjavax.swing.text.DefaultEditorKit
36クラスjava.util.Collections
48クラスjava.beans.MetaData
59クラスjava.util.regex.Pattern

Source: https://habr.com/ru/post/J258641/


All Articles