Java 7 har nyss släppts publikt. Vad innehåller den? Vad betyder det för dig? Vilka saker borde du titta extra på? Coin kommer inte att revolutionera din kod, men det kommer att göra den mer kompakt och bugresistent. Invokedynamic är en revolution, för de som är språkastronauter. Det som troligen är värt störst del av din tid är det nya fork/join-ramverket.
Mikael kommer även att förklara lite om vad vi gör inom Java i sverige, hur Oracles Java-organisation ser ut och vem som bestämmer vad.
2. The following is intended to outline our general
product direction. It is intended for information
purposes only, and may not be incorporated into any
contract. It is not a commitment to deliver any
material, code, or functionality, and should not be
relied upon in making purchasing decisions.
The development, release, and timing of any
features or functionality described for Oracle’s
products remains at the sole discretion of Oracle.
4. Java SWOT – Sun days
Strengths Weaknesses
• Most used programming language •No new releases
• Garbage collection •Steward out of cash
• Community driven •No good Smart phone story
• Adaptive runtime
• Install base
• Strong community
• High performance
Opportunities Threats
•Multi Core •Next big thing
•JVM interop •Walled garden platforms
•Cloud •Not attractive to new developers
•Uncertain future
5. Java SWOT – Oracle
Strengths Weaknesses
•Most used programming language •No new releases
•Garbage collection •Steward out of cash
•Community driven •No good Smart phone story
•Adaptive runtime
•Write once…
•Strong community
•High performance
Opportunities Threats
•Multi Core •Next big thing
•JVM interop •Walled garden platforms
•Cloud •Not attractive to new developers
•Uncertain future
•Bad name in community
6.
7. Oracle’s Java Strategy
In Order of Priority
1. A Vibrant Java Ecosystem
2. Generate Revenue
3. Lower Costs
11. Final warning!
System Property Value
java.vendor Oracle Corporation
java.vendor.url http://java.oracle.com
java.specification.vendor Oracle Corporation
java.vm.vendor Oracle Corporation
java.vm.specification.vendor Oracle Corporation
Other
Windows COMPANY file properties (.exe and .dll) Oracle Corporation
src/share/classes/javax/management/build.xml , Oracle Corporation
Specification-Vendor
src/share/classes/javax/management/build.xml , “Source bundle from Oracle
Implementation-Vendor Corporation - Customer rebuilt…”
MBeans
/jmx/build/properties, JMX spec vendor Oracle Corporation
/jmx/defaults/ServiceName.java, JXM_SPEC_VENDOR Oracle Corporation
/jmx/defaults/ServiceName.java, JMX_IMPL_VENDOR Oracle Corporation
/management/openmbean/MBeanFeatureInfoSerialStore.j Oracle Corporation
ava, SERIALIZER_VM_VENDOR
12. Paradigm level change
“…as simple and as few as possible without having
to surrender the adequate representation…”
Albert Einstein
“As simple as possible, but no simpler”
(not really) Albert Einstein
13. Merge Sort, Single threaded
function merge_sort(m)
if length(m) ≤ 1
return m
var list left, right, result
var integer middle = length(m) / 2
for each x in m up to middle
add x to left
for each x in m after middle
add x to right
left = merge_sort(left)
right = merge_sort(right)
result = merge(left, right) return result
http://en.wikipedia.org/wiki/Merge_sort
14. Merge Sort, Double threaded
function double_merge_sort(m)
if length(m) ≤ 1
return m
var list left, right, result
var integer middle = length(m) / 2
for each x in m up to middle
add x to left
for each x in m after middle
add x to right
Thread t2 = new thread()
left = t2.merge_sort(left)
right = merge_sort(right)
return merge(left, right)
http://en.wikipedia.org/wiki/Merge_sort
15. Merge Sort, n - threads
function n_merge_sort(m)
n = System.GetNoOfCores()
var parts[n] = split(m, n)
var results[n]
var threads[n] = new Thread[n]
For(i = 1 to n)
results[i] = threads[i].merge_sort(parts[i])
Return n_merge(results, threads)
http://en.wikipedia.org/wiki/Merge_sort
16. Easy! Right?
• Return values from threads
• Synchronization and locks
• Setup cost
• Unbalanced workloads
• Should you really use all HW treads at all times?
17. What if I just could…
Class MergeSorter<int[]>
… minor plumbing …
Function compute(m)
if length(m) > THRESHHOLD
return merge_sort(m)
leftWorker = New MergeSorter(firstHalf(m))
rightWorker = New MergeSorter(secondHalf(m))
invokeAll (leftWorker, rightWorker)
return merge(leftWorker.result, rightWorker.result)
http://download.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html
18. Fork/Join
• Built-in scalability
– New threads created on demand by framework
– Efficient work balancing using work stealing
• Easy to use!
– No complex synchronization
19. Nice. What else?
“naming anything „newest‟ because there's already
an older version named „new‟ should be […] sign
that it won't be for very long...”
Nords Law
“Its when you get „Newest2‟ that you know you
really are in trouble”
Topics corollary
20. NIO.2
• Better file system support
– OS agnostic
– ZIP and JAR
– Directory watch
http://download.oracle.com/javase/tutorial/essential/io/fileio.html
30. What about Stockholm & Sweden?
• Development
– JVM
– Mission Control
– Sustaining Engineering
– ...
• Power?
– Senior developers
– Inbound PM
– 2 of 4 architects
– (in Exile) Dev Manager.