Jestem zainteresowany, aby wiedzieć, czy istnieje już podejście, które ma kod metody Java jako wejście i określa funkcję koszt takiego kodu (liczbę pętli, IFS/elses, I/O i inne wspólne rzeczy). Mam na myśli nie dokładny koszt w ms, ale niektóre ogólne koszty, które ten kod może powodować. Chodzi o to, że chcę być w stanie zastosować dowolną metodę, którą pisze użytkownik, aby powiedzieć, jaki może być koszt takiej metody (oczywiście nie biorąc pod uwagę pewnych cech, takich jak JVM itp.).Czy istnieje sposób określenia ogólnej funkcji kosztu arbitralnej metody java?
Odpowiedz
ja nie wiem, czy takie narzędzie istnieje, ale wątpię, zarówno jego wykonalność i jego użyteczność:
dla wykonalności takiego narzędzia w ogólnym przypadku spojrzeć na Halting problem, który jest istotną częścią tego, o co prosisz i udowodniono, że jest to undecidable.
Dla użyteczność takiego narzędzia, wierzę, że analiza statyczna kodu na własną rękę jest bezużyteczny, ponieważ znaczna część wydajności systemu zależy od jego wzorców użycia, to znaczy na jego wejściu.
Istnieje powód, że nawet systemy testowania wydajności w runtime nie są proste; to samo oprogramowanie może być zadziwiająco szybkie w niektórych przypadkach i oszałamiająco wolne w innych.
Powiedział, że istnieją several tools for code complexity analysis, ale te wskaźniki koncentrują się na złożoności strukturalnej, która odnosi się bardziej do jakości i konserwacji niż wydajność.
Dla liczby pętli, jeśli/elses można zatrudnić Złożoność cykliczna metrykę. Istnieją narzędzia do jego obliczenia. Na przykład: JavaNCSS. Jeśli chodzi o inne rzeczy, powinieneś zdecydować, co Cię najbardziej interesuje. Istnieje wiele software metrics, a niektóre z nich mogą być odpowiednie dla Ciebie. Jeśli nie, możesz wymyślić swoje i wdrożyć je. Powiedzmy, PMD - inne popularne narzędzie do zbierania różnych wskaźników - pozwala pisać własne reguły.
Jeżeli chcesz automatycznie przewidzieć wykonanie kodu to jesteś pecha. Powody są wskazywane przez thkala, inne obejmują kompilację JVM JIT i optymalizacje runtime. Twoi najlepsi przyjaciele to profilowanie, (automatyczne) testowanie wydajności i analiza algorytmów. Analiza statyczna może pokazać pewne problemy z wydajnością, takie jak łączenie ciągów lub przydzielanie obiektów w pętli. Współczesne IDE są w stanie to zrobić. Jednak wydajność zależy głównie od algorytmów i architektury, więc trudno będzie uzyskać wiele ulepszeń na drodze analizy statycznej.
Dzięki chłopaki! Tak, wiem, że strukturalna złożoność nie da mi prawdziwych kosztów, ale chcę zacząć od tego, a następnie zobaczyć, co jeszcze muszę wziąć pod uwagę. Przeanalizuję te linki i zobaczę, co mogę zrobić. – kepha
- 1. Parametry ogólnej metody Java
- 2. Czy istnieje sposób określenia fizycznej wielkości monitora?
- 3. Java Generics: łączenie razem obiektu funkcji ogólnej
- 4. Czy istnieje sposób określenia portu lokalnego do użycia w tcpClient?
- 5. Czy istnieje możliwość zastosowania ogólnej metody do listy pozycji?
- 6. Czy istnieje sposób określenia szerokości prostokąta w pliku PIL?
- 7. Czy istnieje sposób określenia ścieżki * rzeczywistej * zapisu sesji?
- 8. Czy istnieje sposób określenia metody generatora ES6 w literale obiektu w pliku node.js?
- 9. Czy istnieje biblioteka Java funkcji Unix?
- 10. Czy istnieje ogólny sposób synchronizowania metody asynchronicznej?
- 11. Czy istnieje sposób na poznanie metody wywoływania?
- 12. Czy istnieje odpowiednik Java funkcji http_build_query PHP?
- 13. Tworzenie ogólnej metody generowania zdarzeń
- 14. Generyczne zero dla funkcji ogólnej
- 15. Czy istnieje sposób na wstawienie funkcji rekursywnej?
- 16. Czy możliwe jest sprawdzenie arbitralnej interakcji za pomocą Mockito w zwarty sposób?
- 17. Czy istnieje sposób ustalenia, kiedy wątek Java został uruchomiony?
- 18. Java - Najszybszy sposób sprawdzenia, czy URL istnieje
- 19. Najlepszy sposób tworzenia spójności ogólnej/metody dla sort.data.frame?
- 20. Wywołanie metody ogólnej za pomocą odbicia w języku Java
- 21. Jak utworzyć typ powrotu dla metody ogólnej?
- 22. Czy istnieje sposób dostępu do argumentów metody w Ruby?
- 23. Przekazywanie ogólnej funkcji jako parametru
- 24. Czy istnieje powód do wyraźnego określenia typu szablonu?
- 25. Czy istnieje sposób wywołania metody, gdy ustawiona jest właściwość klasy?
- 26. Wybierz najlepszy partycji klastra opartego na funkcji kosztu
- 27. Czy istnieje sposób sprawdzania podpisu funkcji w Pythonie?
- 28. Pisanie ogólnej funkcji rzutowania Scala
- 29. Najlepszy sposób określenia, czy dana funkcja ma wyjście?
- 30. Czy istnieje odpowiednik metody skanowania C w języku Java?
oferty to pytanie z głębokim problemem w analizie statycznej i w ogóle rozwiązania będą więc zbliżone mogą nie naprawdę działa przypadków Ci zależy (czytaj, analiza statyczna jest trudne). Jeśli podasz trochę więcej informacji na temat * dlaczego * tego chcesz, możesz uzyskać bardziej szczegółowe odpowiedzi na temat narzędzi, z których możesz skorzystać. –
Wiele super-coolowych algorytmów wymaga raczej wyrafinowanych technik, aby udowodnić swoją asymptotyczną złożoność. Wykonanie go z samego kodu jest niemożliwe ze względów praktycznych. –